Jetzt stellt sich für mich die Frage wie ich angebe, dass er durch die worksheets regelrecht hüpfen soll?
Danke und Gruß
Sub test()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Range("A1")
Next 'ws
End Sub
Wenn du mit "Namen allerdings" benannte Bereiche meinst, diese sind Objekte der Arbeitsmappe, nicht der Tabellenblätter und können nach demselben Muster folgendermaßen durchgearbeitet werden:Sub test()
Dim na As Name
For Each na In ThisWorkbook.Names
Debug.Print na.RefersTo
Next 'na
End Sub
Die Eigenschaft RefersTo gibt dabei den Namen des Tabellenblattes und die Zellreferenz nach dem Muster Tabellenblattname!$A$1 zurück, so dass aus dieser Info auch das Tabellenblatt ausgelesen werden kann.Um alle Worksheets in einer Excel-Arbeitsmappe mit VBA zu durchsuchen, kannst Du das folgende Makro verwenden. Damit wird jede Zelle A1 in jedem Worksheet ausgedruckt.
ALT + F11, um den VBA-Editor zu öffnen.Sub test()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Range("A1")
Next ws
End Sub
ALT + F8, wähle test und klicke auf "Ausführen".Dieses Skript verwendet For Each ws In ThisWorkbook.Worksheets, um durch alle Worksheets zu iterieren.
Fehler: "Objekt erforderlich"
Lösung: Stelle sicher, dass Du die richtige Syntax und Objektreferenzen verwendest. Überprüfe, ob das Arbeitsblatt existiert.
Fehler: "Debug.Print gibt nichts aus"
Lösung: Überprüfe, ob die Zelle A1 in jedem Worksheet tatsächlich einen Wert hat. Wenn nicht, wird nichts im Direktfenster angezeigt.
Wenn Du benannte Bereiche in Deiner Arbeitsmappe hast, kannst Du diese ebenfalls durchlaufen:
Sub test()
Dim na As Name
For Each na In ThisWorkbook.Names
Debug.Print na.RefersTo
Next na
End Sub
Worksheets vs. Sheets:Beachte, dass Worksheets nur Arbeitsblätter umfasst, während Sheets auch Diagramme und andere Arten von Blättern einschließt. Verwende ThisWorkbook.Sheets, wenn Du alle Blätter durchlaufen möchtest.
Sub AusgabeWerte()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Range("A1").Value
Next ws
End Sub
Sub SucheWert()
Dim ws As Worksheet
Dim Zelle As Range
Dim Suchwert As String
Suchwert = "DeinWert"
For Each ws In ThisWorkbook.Worksheets
Set Zelle = ws.Cells.Find(What:=Suchwert)
If Not Zelle Is Nothing Then
Debug.Print "Wert gefunden in: " & ws.Name & " Zelle: " & Zelle.Address
End If
Next ws
End Sub
Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind.With-Anweisung, um den Code lesbarer zu machen:Sub MitWith()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
Debug.Print .Range("A1").Value
End With
Next ws
End Sub
Workbook.Worksheets oder Worksheets verwenden möchtest, je nachdem, ob Du auf die aktuelle oder eine spezifische Arbeitsmappe zugreifen möchtest.1. Wie kann ich mehrere Zellen anstelle von nur A1 durchsuchen?
Du kannst die Schleife anpassen, um mehrere Zellen zu durchlaufen, indem Du die Range anpasst, z.B. ws.Range("A1:B10").
2. Was ist der Unterschied zwischen Sheets und Worksheets?
Sheets umfasst alle Blätter, einschließlich Diagramme, während Worksheets nur die Arbeitsblätter umfasst. Verwende Worksheets, wenn Du nur mit Arbeitsblättern arbeiten möchtest.