Zeilen ausblenden über VBA mehrere Tabellenblätter

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

Hallo,

ich würde das Ganze so umstellen:

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

Gruß
Natator

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.

Hallo Natator,

dies war meine erste Anfrage im Forum. Und ich muss sagen, ich bin begeistert. Es hat tadellos funktioniert.

Vielen Dank für Deine schnelle Hilfe.

Beste Grüße

flower06408

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.

Viel Erfolg
Katharina

Musst Du leider 3-4 Tage warten, bereite gerade meine Dienstreise vor.

Hallo flower6408,

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.

Gruß
Franz

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

Hallo flower…,

bei dem Problem komme ich leider nicht auf eine Lösung.

Gruß Hugo

hallo,

bin gerade vom urlaub zurück und sehe, daß du schon antworten bekommen hast. ist dein problem damit gelöst?

grüße, ascan

Ja,
das Problem wurde gelöst. Aber vielen Dank für die Nachfrage.

Beste Grüße

flower06408

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