Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1516to1520
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

Tabellenblätter zählen

Tabellenblätter zählen
29.09.2016 16:01:45
Volker
Liebe Forengemeinde!
Ich blicke gerade bei einer Zählschleife über mehrere Tabellenblätter, beginnend mit dem aktiven Blatt, nicht durch:
...
For Blätter = ActiveSheet.Index To ActiveSheet.Index + (n - 1)
...
ActiveSheet.Index ist 3
Setze ich für n bspw. 5, gibt mir Debug.Print Blätter als Ergebnis 8 aus. Ich würde aber als Blattanzahl 5 erwarten.
Das bedeutet, dass im nachfolgenden Code die falsche Anzahl/Auswahl Tabellenblätter angesprochen wird.
Wie muss ich korrekt zählen bzw. wie muss der Tabellenblattbereich richtig angegeben werden.
Über Hinweise zur Behebung meiner Verständnisschwierigkeit freue ich mich sehr!
Volker

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter zählen
29.09.2016 16:10:46
Bernd
Servus,
hä? 3+(5-1)=5 bzw 8?
Ich würde ne 7 erwarten...
Grüße
AW: Tabellenblätter zählen
29.09.2016 16:22:02
Daniel
Hi
Blätter ist der Schleifenzähler
Nach einem vollständigen Durchlauf der For-Schleife ist der Schleifenzähler immer größer als der Endwert.
(bzw kleiner bei einem negativen Step)
Die Schleife
For i = 1 to x

entspricht einem
Do While i 
das kann man beispielsweise verwenden, um zu überprüfen ob eine Schleife, die ein EXIT FOR enthält, vollständig durchgelaufen ist oder vorzeitig abgebrochen wurde.
Gruß Daniel
Anzeige
AW: Tabellenblätter zählen
29.09.2016 16:13:57
ChrisL
Hi Volker
Hä war auch meiner Reaktion. Aber vielleicht erklärt es sich mit folgendem Codeschnipsel:
Sub t()
Dim i As Integer
For i = ActiveSheet.Index To Sheets.Count
MsgBox "Blatt " & i & " von " & Sheets.Count
Next i
End Sub

cu
Chris
AW: Tabellenblätter zählen
29.09.2016 17:58:46
Volker
Hallo Chris!
Vielen Dank. Ja, deine Schleife liefert eine Erklärung, warum bei mir 8 Blätter im Zähler auftauchen und darüber hinaus auch wenigstens teilweise den Beweis, dass meine Schleife mit dem Ausdruck "Activsheet.Index +(n+1)" nicht dazu geeignet ist, die Blätter in der richtigen Anzahl anzugeben.
Um es noch einmal zu konkretisieren:
Ich möchte in n Blättern (beginnend mit dem aktiven Blatt, also aktives Blatt plus (n-1) Blätter) den gleichen Eintrag vornehmen und komme nicht auf den Dreh, wie die korrekte Schleife formuliert werden muss. Die 8 Blätter erklären sich daraus, dass in meiner Testdatei derzeit insgesamt 10 Blätter vorhanden sind. Das habe ich in dem Eingangsbeitrag leider unterschlagen. Aber wie bekomme ich n Blätter?
AufDemSchlauchStehend
Volker
Anzeige
AW: Tabellenblätter zählen
29.09.2016 18:35:45
Daniel
Hi
meiner Ansicht nach alles Korrekt.
Test mal diesen Code mit deiner Datei, dann siehst du wie die Schleife arbeitet:

Sub test()
Dim n As Long
Dim Blätter As Long
n = 5
Worksheets(3).Activate
For Blätter = ActiveSheet.Index To ActiveSheet.Index + n - 1
Debug.Print "Blätter: " & Blätter, "Index:" & Worksheets(Blätter).Index, "Name: " &  _
Worksheets(Blätter).Name
Next
End Sub
solltest du nicht nur Tabellenblätter sondern auch Diagrammblätter in deiner Datei haben, musst du aufpassen wenn du mit Index arbeitest, dass du immer den gleichen verwendest.
"Worksheets" sind nur die Tabellenblätter
"Sheets" sind alle Blätter in der Datei, also Diagramm- und Tabellenblätter.
Gruß Daniel
Anzeige
AW: Tabellenblätter zählen
29.09.2016 18:50:04
ChrisL
Hi Volker
n Blätter = Sheets.Count
Vielleicht so...
Sub t()
Dim i As Integer
For i = ActiveSheet.Index To Sheets.Count
Sheets(i).Range("A1") = "Test"
Next i
End Sub
Auf folgende Punkte solltest du achten:
1. Sheet=Blatt d.h. kann z.B. auch ein Diagramm sein. Worksheet = Tabellenblatt.
2. Wenn du mit ActiveSheet arbeitest, dann entscheidet der User, welches Blatt aktiv ist (vielleicht so gewollt). Aber vielleicht wäre es sicherer, wenn du mit Ausschlüssen arbeitest.
Sub tt()
Dim WS as Worksheet
For Each WS in ThisWorkbook.Worksheets
If WS.Name  "Tabelle1" And WS.Name  "Tabelle2" Then
WS.Range("A1") = "Test"
End If
Next WS
End Sub

cu
Chris
Anzeige
AW: Tabellenblätter zählen
29.09.2016 19:22:11
ChrisL
Hi
OK, ich habe die Frage erst richtig verstanden, als ich die Antwort von Daniel gelesen habe.
Dabei habe ich mir Gedanken gemacht, wie man es lösen könnte, falls du tatsächlich nicht nur Tabellenblätter, sondern eine unbekannte Anzahl z.B. Diagrammblätter in der Mappe verteilt hast. Problem "ActiveWorksheet" gibt es nicht.
Sub test()
Dim n As Long
Dim Blätter As Long
Dim iAktivWS As Long
n = 5
If Worksheets(ActiveSheet.Name).Select  = False Then
MsgBox "Es ist kein Tabellenblatt aktiv"
Exit Sub
End If
iAktivWS = Worksheets(ActiveSheet.Name).Index
If iAktivWS + n - 1 > Worksheets.Count Then
MsgBox "so viele Tabellenblätter gibt es nicht"
Exit Sub
End If
For Blätter = iAktivWS To iAktivWS + n - 1
Debug.Print "Blätter: " & Blätter, "Index:" & Worksheets(Blätter).Index, "Name: " &  _
Worksheets(Blätter).Name
Next
End Sub

Vielleicht gibt es noch besser Lösungen.
cu
Chris
Anzeige
AW: Tabellenblätter zählen
29.09.2016 19:36:19
Volker
Hallo Chris!
Ich habe ausschließlich Tabellenblätter in der Mappe. Da drohen keine Konflikte. Ja, das aktive Blatt wird später vom Benutzer bestimmt, der dann in einer Art Buchungssystem eine variable Anzahl Tabellenblätter auswählen können muss. Daher funktioniert ... To Sheets.Count so ja nicht, da es immer alle Blätter der Mappe zählt. Warum ActiveSheet.Index To ActiveSheet.Index + (n-1) hier nicht greift, ist mir noch nicht klar. Die Einträge erfolgen momentan in alle Blätter ab/inklusive aktivem Blatt, also Blatt 3 bis Blatt 10.
Volker
AW: Tabellenblätter zählen
29.09.2016 19:55:43
Daniel
kannst du mal deine Datei zeigen?
wenn du Blatt 3 - Blatt 8 bearbeiten willst, ist dein Code prinzipiell richtig und funktioniert auch.
kann es sein, dass du fälschlicherweise die Indexnummer mit dem Zähler im Tabellenblattnamen gleichsetzt? ("Tabelle3", "Tabelle4")
Die Indexnummer ist die Reihenfolge der Blätter, wie sie dir am unteren Rand von links nach rechts angezeigt wird und hat nichts mit der Nummer in derBenennung zu tun, die du auf dem Reiter siehst.
Das stimmt nur am Anfang zufälliger weise über ein, aber sobald du Blätter löscht, einfügst oder verschiebst, gibt es da keinen Zusammenhang mehr.
Gruß Daniel
Anzeige
AW: Tabellenblätter zählen
29.09.2016 20:07:48
Volker
Hallo Daniel!
Ich habe deinen Prüfcode mal eingebaut und Debug.Print liefert folgendes, völlig richtige Ergebnis:
Blätter: 3 Index:3 Name: 32.KW 08.08. - 13.08.16
Blätter: 4 Index:4 Name: 33.KW 15.08. - 20.08.16
Blätter: 5 Index:5 Name: 34.KW 22.08. - 27.08.16
Blätter: 6 Index:6 Name: 35.KW 29.08. - 03.09.16
Blätter: 7 Index:7 Name: 36.KW 05.09. - 10.09.16
In diese Blätter müsste der Eintrag erfolgen. Das bedeutet, dass mein Code oben richtig ist. Es scheitert irgendwo später im Verlauf der Anweisungen.
Da muss ich noch einmal genauer hinschauen.
Ich möchte Eure Geduld und Hilfe hier zunächst nicht weiter beanspruchen und bedanke mich erst einmal ganz herzlich für die Anregungen zur Fehleranalyse.
Grüße
Volker
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige