Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA anpassung

VBA anpassung
25.04.2017 10:19:17
Sebastian
Moin Leute, ich war auf der Suche einer Lösung dafür zu finden, per VBA Zeilen die per "" keinen Wert anzeigen dynamisch ausblenden zu lassen. Mein Makro funktioniert prizipiell, allerdings bekomme ich es nicht hin das es sich automatisch anpasst und Zeilen ein und ausblendet. Könnt ihr mir helfen ?
Private Sub leere_Zeilen_ausblenden()
Dim b As Range
For Each c In Range("B17:B500")
If c.Value  "" Then
c.EntireRow.Hidden = False
Else
c.EntireRow.Hidden = True
End If
Next c
End Sub

43
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA anpassung
25.04.2017 10:23:01
yummi
Hallo Sebastian

Private Sub leere_Zeilen_ausblenden()
Dim b As Range
dim letztezeile as long
letztezeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
For Each c In Range("B17:B"& letztezeile)
If c.Value  "" Then
c.EntireRow.Hidden = False
Else
c.EntireRow.Hidden = True
End If
Next c
End Sub
gruß
yummi
AW: VBA anpassung
25.04.2017 10:28:45
Sebastian
Hi Yummi,
leider klappt das nicht :( Beim nächsten öffnen bleiben die Zeilen ausgeblendet. Das Problem ist, Hi, Das alle Formeln in der Tabelle bauen darauf auf ob B17-499 einen Wert hat. B bekommt seinen Wert durch eine Formel. Ist B leer kann die Zeile augeblendet werden. beim nächsten öffnen kann das aber variieren, da aus einer anderen Datei abgeglichen wird die max. 499 Zeilen haben kann. Ich hoffe man versteht das Problem.
Anzeige
AW: VBA anpassung
25.04.2017 10:35:02
yummi
Hallo Sebastian,
spricht etwas dagegen wenn du erst alle Zeilen "zur sicherheit" einblendest und dann deine Schleife laufen lässt?
das dann in Workbook_Open
mit den entsprechenden Variablen Deklarationen
Workbook_Open findest du im Editor unter DieseArbeitsmappe

For Each c In Range("B17:B"& letztezeile)
c.EntireRow.Hidden = False
next c
Gruß
yummi
AW: VBA anpassung
25.04.2017 10:57:30
Sebastian
Hey danke erst mal, nein eigentlich spielt das keine Rolle. Es geht nur darum das beim Drucken und axportieren ( PDF ) nicht unnötige Blätter entstehen. Wie sähe der Code denn dann aus ? Ich hab wirklich 0 Ahnung von VBA ...
Anzeige
AW: VBA anpassung
25.04.2017 11:07:19
yummi
Hallo Sebastian,
also wie gesagt, im VB Editor auf DieseArbeitsmappe klicken und dann Workbook einstellen (im rechten Bereich des Bildschirms) und in der nächsten Auswahlbox auf workbook_open. Die dan nangezeigte Funktion bekommt dann diesen Code:

Private Sub Workbook_Open()   'diese Zeile steht schon da
dim letztezeile as long
dim c as Range
For Each c In Range("B17:B"& letztezeile)
c.EntireRow.Hidden = False
next c
End Sub                       'dies Zeile steht schon da
Dann werden alle Spalten wieder eingeblendet, wobei wenn du deine andere Funktion laufen lässt werden alle, auch geänderte Zeilen, wo immer die bei geschlossenen Zustand herkommen sollen, neu bewertet und nur Zeilen mit Wert angezeigt.
gruß
yummi
Anzeige
AW: VBA anpassung
25.04.2017 11:24:10
Sebastian
HI sorry, aber er sagt " Lauftzeitfehler, Die Methode Range für das Objekt Global ist fehlgeschlagen. Brauch ich also beide VBA Codes ? Sorry aber ich hab echt wirklich keine Ahnung.
AW: VBA anpassung
25.04.2017 11:30:32
yummi
Hallo Sebastian,
sry da fehlt ActiveSheet. vor dem Range (mit dem Punkt)
das Tabellenblatt, um das es geht ist ja wohl das, was beim öffnen der Datei angezeigt wird oder?
Gruß
yummi
PS: Kannst Du in der anderen Funktion auch einsetzen
AW: VBA anpassung
25.04.2017 11:38:08
Sebastian
Sorry, aber ich verstehe nichts mehr ...
Private Sub Workbook_Open()
Dim letztezeile As Long
Dim c As ActiveSheet.Range
For Each c In ActiveSheet.Range("B17:B" & letztezeile)
c.EntireRow.Hidden = False
Next c
End Sub
Klappt auch nicht .. Immer Lauftzeitfehler ...
Anzeige
AW: VBA anpassung
25.04.2017 11:39:38
yummi
schick mal die datei
AW: VBA anpassung
25.04.2017 12:16:56
yummi
Hallo sebastian,
ich habe mal den Code reingeschrieben, in deienr Datei war kein vba Code hinterlegt.
Ich habe dir auch ein paar Kommentare reingeschrieben, was Du da jetzt eigentlich macht, ich weiß aber nicht, ob Du das wirklich so willst.
https://www.herber.de/bbs/user/113100.zip Datei war jetzt minimal zu groß.
Gruß
yummi
AW: VBA anpassung
25.04.2017 12:43:23
Sebastian
Hi, vielen Dank, aber es muss so funktinoeren das es ohne Button klappt. Beim öffnen der datei, quasi beim aktualisieren der daten, muss der Code greifen und alle Zeilen wo bei B nichts steht ausbelden. Und wenn beim nächsten öffnen die zeilen zahl variiert muss er sie auch wieder einblenden.
Anzeige
AW: VBA anpassung
25.04.2017 12:52:45
yummi
Hallo Sebastian,
dann einfach den Aufruf deienr Ausblenden Funktion an das Ende von workbook_open
oder alternativ, wen nes deinem gewünschten Ergebnis entspricht, nur den Aufruf in die Workbook_open Funktion.
Gruß
yummi
AW: VBA anpassung
25.04.2017 12:55:05
Sebastian
Also brauche ich 2 Codes ? Bei öffnen ausblenden und beim schließen einblenden ?
Wie genau müssen die Codes denn aussehen. ich wiederhole, ich habe wirklich GAR KEINE Ahnung ! Gruß und Danke
AW: VBA anpassung
25.04.2017 13:08:53
yummi
Hallo Sebastian,
ersetze mal die bestehend Workbook_open durch diese hier und schau, ob das deinem gewünschten ergebnis entspricht

Private Sub Workbook_Open()
Dim letztezeile As Long
Dim i As Long
Beschleunigen True
letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = 17 To letztezeile
Active Sheet.Rows(i).Hidden = False
Next i
Call leere_Zeilen_ausblenden
Beschleunigen False
End Sub
Das geht schneller
Gruß
yummi
Anzeige
AW: VBA anpassung
25.04.2017 13:13:22
Sebastian
Aber er blendet sie ja nicht wieder ein.
AW: VBA anpassung
25.04.2017 13:22:52
yummi
was willst du denn nun?
die zeile call leere_Zeilen_ausblenden sorgt dafür, dass die zeilen wieder ausgeblendet werden,
wenn du die zeile rausnimmst werden die zellen alle nur eingeblendet.
wann sollen sie denn ausgeblendet werden?
AW: VBA anpassung
25.04.2017 13:37:05
yummi
Hallo Sebastian,
dann so:
Call lerre_Zeilen_ausblenden aus workbook_open löschen
und hinter end sub kommt

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call leere_Zeilen_ausblenden
End Sub
Der Sinn und zweck dieser Aktion erschlisst sich mir aber nicht. Es passiert jetzt folgendes
du öffnest die Datei - alle Zeilen werden eingeblendet
du schliesst die Datei - alle leeren Zeilen werden ausgeblendet (und zwar sobald eine zelle pro Zeile leer ist)
du öffnest die Datei - alle Zeilen werden eingeblendet.
Du siehst also nie die ausgeblendeten zeilen
gruß
yummi
Anzeige
AW: VBA anpassung
26.04.2017 06:08:33
Sebastian
Guten morgen Danke erst mal, aber du hast es jetzt genau falsch herum beschrieben. Ich ÖFFNE die Datei, die leeren Zeilen werden ausgeblendet. Ich SCHLIEßE sie, werden wieder eingeblendet ( Damit beim nächsten öffnen wieder alle Zeilen zur verfügung stehen ). Könntest du bitte einmal den kompletten Code posten, und genau sagen wohin um Fehler auszuschließen. Gruß Basti
AW: VBA anpassung
26.04.2017 08:42:19
yummi
Hallo Sebastian,
hier mal die komplette Datei, so wie Du es im letzten posdt beschrieben hast.
https://www.herber.de/bbs/user/113115.zip
Du wirst die eingeblendeten Zeilen aber nie sehen.
Gruß
yummi
Anzeige
AW: VBA anpassung
26.04.2017 08:50:42
Sebastian
Hey Yummi, die muss ich auch nie sehen ;) Aber so wie es aussieht ist das genau so wie ich es haben wollte :) Danke schon mal ... Ich teste mal eben :)
AW: VBA anpassung
26.04.2017 09:30:47
Sebastian
Klappt alles wunderbar. Nur eine kleine Frage. Kannst du es so abändern das es den Blattschutz kurzzeitig aufhebt seinen Zweck erfüllt und wieder aktiviert ?
AW: VBA anpassung
26.04.2017 10:01:22
Sebastian
Sorry aber jetzt klappt es wieder nicht mehr ?! Beim letzten Öffnen hat er ab zeile 282 ausgeblendet. Jetzt sind nur datenzätze bis 68, aber immer noch ab 282 ausgeblendet ... Kann es sein das er den Code laufen lässt bevor die datensätte per " aktualisieren " erneuert wurden ?
Anzeige
AW: VBA anpassung
26.04.2017 10:04:18
yummi
Hallo Sebastian,
an der Stelle wo der Blattschutz aufgehoben werden soll kommt

ActiveSheet.Unprotect Password:="DeinPasswort"
und an die Stelle wo Du es wieder schützen willst

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=" _
DeinPasswort"
Nur musst Du dein Passswort anpassen.
Also z.b.

Private Sub Workbook_Close()
Dim letztezeile As Long
Dim i As Long
Beschleunigen True
letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ActiveSheet.Unprotect Password:="DeinPasswort"
For i = 17 To letztezeile
ActiveSheet.Rows(i).Hidden = False
Next i
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=" _
DeinPasswort"
Beschleunigen False
End Sub
Private Sub Workbook_Open()
Beschleunigen True
ActiveSheet.Unprotect Password:="DeinPasswort"
Call leere_Zeilen_ausblenden
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=" _
DeinPasswort"
Beschleunigen False
End Sub
Nur wie gesagt Passwort anpassen. Wenn du dann nicht möchtest, dass jeder die Möglichkeit hat das Passwort zu lesen, dann musst du im Visual Basic Editor (da wo VBAProject (113097.xlm) steht mit der rechten Maustaste klicken und "Eigenschaften von VBA Projekt" wählen. Im folgenden Dialog auf den Reiter Schutz gehen, Haken bei Projekt für Anzeige sperren und unten ein Passwort vergeben.
Nur für den Fall, dass nciht jeder sich deinen Code anschauen kann ohne ein wenig kriminelle Energie aufzuwenden.
Gruß
yummi
AW: VBA anpassung
26.04.2017 10:17:19
Sebastian
Das klappt super, bleibt nur das beschriebene Problem mit dem ein und ausbleden.
AW: VBA anpassung
26.04.2017 10:48:24
Sebastian
Sorry aber jetzt klappt es wieder nicht mehr ?! Beim letzten Öffnen hat er ab zeile 282 ausgeblendet. Jetzt sind nur datenzätze bis 68, aber immer noch ab 282 ausgeblendet ... Kann es sein das er den Code laufen lässt bevor die datensätte per " aktualisieren " erneuert wurden ?
AW: VBA anpassung
26.04.2017 11:02:31
yummi
Hallo Sebastian,
mach mal bitte folgendes:
1. Geh in Visual Basic Editor
2. In die Funktion Workbook_Close
3. Dort in die Zeile hinter der letztezeile = und drücke auf F9 (die Zeile ist dann rot hervor gehoben)
4. Schliess dein dokument
5. Der Code stoppt an der von dir markierten Zeile, jetzt geh mit der Maus über letztezeile und schau dir an welchen Wert die Variable hat, diesen vergleichst Du mit deiner tatsächlichen letzten Zeile, auf dem Tabellenblatt, das sollte identisch sein, wenn nicht müssen wir die Berechnung der letzen Zeile ändern
Du findest hier http://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/337-letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln einige Möglichkeiten die letzte Zeile zu berechnen.
Tausch einfach mal die jeweilige Zeile (letztezeile =) aus und probier das auf die art aus, welche Versiion dir das richtige Ergebnis liefert.
Es kann sein, dass evtl vorhandene Leerzeilen dazwischen zu einem falschen Ergebnis führen. Also meien Vermutung: Zeile 69 ist leer?! und verursacht das unerwünschte Verhalten.
Gruß
yummi
AW: VBA anpassung
26.04.2017 11:07:20
Sebastian
Hi, also das Problem ist: Wenn ich nach einem langen Datensatz einen kurzen lade ist alles gut. Lade ich danach wieder einen langen Datensatz bleibt es auf der länge des kurzes ausgeblendet. Liegt für mich daran, das in dem Moment wo die Tabelle geöffnet wird, noch der alte Datensatz vorhanden ist. Erst nachdem ich im POPUP Fenster" Aktualisieren " drücke, wird der neue geladen. Da war aber der Code schon fertig mit seiner Arbeit. Weißt du was ich meine ?
AW: VBA anpassung
26.04.2017 11:23:48
yummi
Hallo Sebastian,
Ohne Datensätze nur sehr schwer nachvollziehbar. Ich kann dir nur den Tipp geben, zu debuggen und dir Zeile für Zeile anzuschauen was passiert, nur so kannst Du feststellen woran es liegt.
Wann und wie liest Du denn die Datensäze ein?
Vor Ort könnte ich dir sicherlich schnell helfen, aber von hier aus ohne Datensätze kann ich das nicht nachvollziehen.
Gruß
yummi
AW: VBA anpassung
26.04.2017 11:35:09
Sebastian
Ja ich weiß das es schwer ist mir so zu helfen :) Ja also es gibt eine weitere Datei die, die Datensätze liefert. Diese kann halt 1 Zeile oder 500 Zeilen haben. Beim öffnen der Excel Liste die den Code benötigt, wird nach dem Start darauf hingewiesen das sich die Datensätze in der 2. Datei geändert haben und ob man jetzt aktualisieren möchte. Drückte ich " aktualisieren " überträgt er die Daten halt in die Liste. Bis zu diesem Moment ist die Liste aber noch mit den letzten Daten gefüllt. Ich hoffe das kann man verstehen :D
AW: VBA anpassung
26.04.2017 11:43:55
yummi
verstehen: ja, ohne Datensätze sagen woran es genau liegt: nein
AW: VBA anpassung
26.04.2017 11:55:19
Sebastian
Aber auch wenn ich dir den datensatz gebe hättest du nichts davon. Du müsstest ja auch alle Bezüge ändern. Wenn du dir die Liste nachbaust brauchst du nur eine Spallte ( B ) mit dieser angepassten Formel.
=WENN('U:\Documents\Excel Dokumente\[Report.xls]Report'!A15="";""; 'U:\Documents\Excel Dokumente\[Report.xls]Report'!A15) 
Ich weiß nicht wie ich es anderes machen soll.
AW: VBA anpassung
26.04.2017 11:56:54
Sebastian
Aber auch wenn ich dir den Datensatz gebe hättest du nichts davon. Du müsstest ja auch alle Bezüge ändern. Wenn du dir die Liste nachbaust brauchst du nur eine Spallte ( B1-B20 ) mit dieser angepassten Formel. Und eine datei mit Datensätzen die nach belieben zwischen 1 und 20 Zeilen Werte liefern.
=WENN('U:\Documents\Excel Dokumente\[Report.xls]Report'!A15="";""; 'U:\Documents\Excel Dokumente\[Report.xls]Report'!A15) 
Ich weiß nicht wie ich es anderes machen soll :( Ich hoffe wir bekommen das hin :D
AW: VBA anpassung
26.04.2017 12:16:57
yummi
ich habe mir eine datei mit 3 zeilen a 3 bzw 5 werten erzeugt, das führt leider dazu, dass die Datei kompleet geleert wird. sry aber ich bin raus
Gruß
yummi
AW: VBA anpassung
26.04.2017 12:45:09
Sebastian
Könnten wir noch einen anderen Weg versuchen ? Ich hab ein Makro was eine PDF ausgabe auslöst. Können wir das ausblenden nicht in das PDF Makro integrieren ? Also wenn ich den Exportieren Knopf drücke ? Und das einblenden beim schließen der Mappe ?
Sub PDFActiveSheet()
'www.contextures.com
'for Excel 2010 and later
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler
Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "yyyymmdd\_hhmm")
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"
'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")
'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile
'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strPathFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Select Folder and FileName to save")
'export to PDF if a folder was selected
If myFile  "False" Then
wsA.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
'confirmation message with file info
MsgBox "PDF file has been created: " _
& vbCrLf _
& myFile
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create PDF file"
Resume exitHandler
End Sub

AW: VBA anpassung
26.04.2017 13:04:43
yummi
Hallo sebastian,
wenn es nicht mehr ausgeführt werden soll, wenn du den Export Knopf drückst, dann musst du den Aufruf PDFActiveSheet an der entsprechednen Stelle entfernen (einfach mal innerhallb des Projektes im Visual Basic Editor suchen) und wenn es ausgeführt werden soll, wenn Du die Datei schliesst, dann muss PDFActiveSheet in die Funktion Windows_Close hinein. Ob vor oder nach dem Ausblenden kannst Du durch die Stelle, wo Du es einfügst selber bestimmen. Mach es entweder vor der Zeile For.... (vor dem Ausblenden) oder hinter der Zeile Next i (nach dem Ausblenden)
Gruß
yummi
AW: VBA anpassung
26.04.2017 13:10:40
Sebastian
Es wäre super, das wenn ich den PDF knopf drücke er hat vorher die zeilen ausblendet die nicht gebraucht werden. Dann halt exportiert wie vorgesehen. Und bei schließen der datei alle Zeilen wieder einblendet. Wenn ich das anpassen soll brauche ich da stunden für :D Könntest du mir noch einmal die beiden fertiges Codes machen ?
Zeilen ausblenden + PDF als Makro & Einblenden beim schließen automatisch ?
Ich verstehe diese VBA Klamotten echt überhaupt nicht. Wäre dir sehr dankbar.
AW: VBA anpassung
26.04.2017 13:23:24
yummi
Hallo Sebastian,
Zeilen ausblenden + pdf

Beschleunigen True
Call leere_Zeilen_ausblenden
Call PDFActiveSheet
Beschleunigen False

Einblenden beim Schliessen automatisch, hast Du schon:

Private Sub Workbook_Close()
Dim letztezeile As Long
Dim i As Long
Beschleunigen True
letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
For i = 17 To letztezeile
ActiveSheet.Rows(i).Hidden = False
Next i
Beschleunigen False
End Sub
Gruß
yummi
AW: VBA anpassung
27.04.2017 06:23:55
Sebastian
Guten morgen :) ich probiere es gerade stück für stück. Aber schon das einblenden beim schließen klappt nicht. evtl ging es desshalb als gesammter code nicht ?
AW: VBA anpassung
25.04.2017 12:17:25
Werner
Hallo Sebastian,
kann auch nicht funktionieren, da weder das Tabellenblatt auf dem das passieren soll benannt ist, noch die Variable letztezeile befüllt wird.
Öffne die Datei zunächst mal ohne die Makros zu aktivieren. Dann siehst du, dass ich die Zeilen, die in Spalte B leer sind, ausgeblendet habe.
Schließe die Datei und öffne sie erneut, diesmal Makros aktivieren. Die zuvor ausgeblendeten Zeile werden dabei eingeblendet.
https://www.herber.de/bbs/user/113101.xlsm
Gruß Werner
AW: VBA anpassung
25.04.2017 13:22:22
Sebastian
Ganz einfach gesagt brauche ich einen Code, der beim öffnen alle leeren Zeilen von B17-B499 ausblendet und beim schließen wieder einblendet. Das klingt eigentlich ganz einfach ! :D
An Threads mit xmal gleichem Betreff beteilige ...
30.04.2017 14:48:03
Luc:-?
…ich mich ohnehin kaum mal, Tom… ;-]
🙈 🙉 🙊 🐵 Gruß & schöSo+FT, Luc :-?
Besser informiert mit …

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige