Hallo ich bin kurz vorm verzweifeln. Ich möchte auf allen Tabellenblättern Zeilen ausblenden. Und zwar mit einem Command Button auf dem Tabellenblatt 1.
Das Problem:
Ich habe eine Excel-Mappe, in der ich in Tabellenblatt 1 die Allgemeinen Daten von Peronen habe (Spalte 1 = lfd. Nr., Spalte 2 = Nachname, Spalte 3 = Vorname, Spalte 4 = Adresse und Spalte 5 = aktiv oder nicht aktiv).
Wenn ich jeztz in Spalte 5 eine Person auf inaktiv setze, läßt das Programm die Spalte 1 leer. Es werden nur die Personen nummeriert, welche aktiv sind.
In den anderen Tabellenblättern sind die ersten drei Spalten gleich.
Jetzt versuche ich durch einen Command Button auf Tabellenblatt 1 alle Personen auszublenden, welche inaktiv sind (über die leere Zelle in Spalte 1).
Auf einem Tabellenblatt habe ich das auch hinbekommen. Ich bekomme es allerdings nicht hin, dass es in allen Tabellenblättern funktioniert.
Mein Code sieht aktuell so aus:
Sub CommandButton3_Click()
Dim i As Integer, BlattMerken As String
BlattMerken = ActiveSheet.Name
For i = 1 To Sheets.Count
Dim Zelle As Range
For Each Zelle In Range(„A5:A39“)
If Zelle = „“ Then
Zelle.EntireRow.Hidden = True
Else
Zelle.EntireRow.Hidden = False
End If
Next Zelle
Sheets(i).Select
Next i
Sheets(BlattMerken).Activate
End Sub
Kann mir jemand helfen?
Vielen Dank im Voraus.
P.S. Ich bin absoluter VBA-Anfänger
Sub CommandButton3_Click()
Dim i As Integer, BlattMerken As String
BlattMerken = ActiveSheet.Name
Dim Zelle As Range
For Each Zelle In Range(„A5:A39“)
zl = Zelle.Row
If Zelle = „“ Then
For i = 1 To Sheets.Count
Sheets(i).Cells(zl, 1).EntireRow.Hidden = True
Next i
Else
For i = 1 To Sheets.Count
Sheets(i).Cells(zl, 1).EntireRow.Hidden = False
Next i
End If
Next Zelle
Sheets(BlattMerken).Activate
End Sub
Hallo,
Beim schnellen überfliegen deiner anfrage denke ich, dass du vergisst zu den einzelnen tabellen blättern zu springen.
In der schleife für deine sheets musst du das sheet (i) aktivieren und dann sollte es gehen.
Oder du schreibst in deiner rangeanweisung auch das sheet(i) expliziet mit aus, hat den vorteil, dass du dann am bildschirm nicht den wechsel der tabellenblätter sehen solltest.
Ja, das könnte damit zusammenhängen, das die For Sheets.Count Eigenschaft das Activesheet nicht festlegt. Baue da doch noch den Befehl Sheets(i).Activate ein oder so, damit auch dieses Blatt aktiviert wird. Evtl. Musst du zuerst den Sheetnamen abrufen, bevor man es aktivieren kann.
Grüsse Sebastian
Hallo,
Sheets(i).select
muss direkt nach
For i = 1 To Sheets.Count
Dann klappt’s. Zum Nachverfolgen des Problems schau dir deinen Code doch einmal im Debug-Modus an … du führst das ganze zwei Mal auf dem ersten Blatt aus, dafür aber nie auf dem letzten.
dein Code für die Schaltfläche steht im VBA-Editor wahrscheinlich unter dem Tabellenblatt auf dem sich die Schaltfläche befindet.
In diesem Fall beziehen sich alle verküzten Objetbezeichnungen wie Range, Cells u.s.w immer auf das Blatt in dem der Code steht, egal welches Blatt das aktive Blatt ist.
damit der Code auch in den anderen Blättern die Zeilen ein-/ausblendet muss du die vollständige Objektbezeichnung angeben. Die vorübergehende Deaktivierung der Bildschirmaktualisierung beschleunigt die Makroausführung.
Hallo flower06408,
dir fehlt eine Iteration über Tabellenblätter.
Dim i As Integer, BlattMerken As String
BlattMerken = ActiveSheet.Name
For i = 1 To Sheets.Count
Dim Zelle As Range
Sheets(i).Select
For Each Zelle In Range("A5:A39")
If Zelle = "" Then
Zelle.EntireRow.Hidden = True
Else
Zelle.EntireRow.Hidden = False
End If
Next Zelle
Sheets(i).Select
Next i
Sheets(BlattMerken).Activate
Das Problem liegt darin, dass Du Rows eines fremden Sheets nicht aufrufen kannst
Daher musst Du den Code zerlegen
Da ich Deine Version nicht kenne, habe ich mal Excel 97 genommen, dass geht immer
hier der Code für den Button
Sub CommandButton1\_Click()
BlattMerken = ActiveSheet.Name
Call Ausblender(1)
Sheets(BlattMerken).Activate
End Sub
und nun der Code für ein allgemeines Modul (da wo auch aufgezeichnete Makros landen)
Damit es nicht versehentlich als Makro aufrufbar ist, habe ich den Dummy „Aufrufverhinderer“ eingeführt und belege ihn beim Aufruf durch den Button mit einem Phantasiewert (hier 1)
Sub Ausblender(Aufrufverhinderer)
Dim i As Integer, BlattMerken As String
For i = 1 To Sheets.Count
Sheets(i).Activate
For j = 5 To 39
If Sheets(i).Cells(j, 1) = Empty Then
Rows(j).Select
Selection.EntireRow.Hidden = True
End If
Next j
Next i
End Sub
Noch eine Anmerkung: nie zur Laufzeit des Makros weiter Dim vornehmen, immer zu Beginn des Makros stellen.
Vermutlich geht der Code auch ohne das Activate und die Select, habe aber keine Zeit zu testen
Hi,
Du wechselst die Tabellenblätter nicht.
Versuche es mal hiermit:
Sub test
Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets(i).Activate
>> hier schreibst Du Deine Aktivitäten rein > also die Geschichte mit den Zeilen ausblenden