Liebe Fachleute,
um meine Registerkarten automatisch zu benennen, habe ich folgendes eingegeben:
'Sub Tabellenname()
For I = 1 To Sheets.Count
If Sheets(I).Range(„G1“).Value „“ Then Sheets(I).Name =Sheets(I).Range(„G1“).Value
Next I
Das klappt soweit auch wunderbar.
Da es sich jedoch um Jahresangaben handelt, kommt es bei einer Aktualisierung hin und wieder zu Problemen, wenn alle Register von Anfang bis Ende neu durchbenannt werden sollen.
Kann mir Jemand einen Code schreiben, der in laienhaften Worten ausgedrückt folgendes bewirkt:
- Prüfe alle „G1“
- Wenn sie nicht leer sind, nummeriere die Register von 1 bis… durch
Das ganze vor den obigen Code gesetzt.
Oder gibt es noch eine bessere Idee ?
Mit freundlichen Grüßen
Jorma
Liebe Fachleute,
Hallo Jorma!
um meine Registerkarten automatisch zu benennen, habe ich
folgendes eingegeben:
'Sub Tabellenname()
For I = 1 To Sheets.Count
If Sheets(I).Range(„G1“).Value „“ Then
Sheets(I).Name =Sheets(I).Range(„G1“).Value
Next I
Das klappt soweit auch wunderbar.
Da es sich jedoch um Jahresangaben handelt, kommt es bei einer
Aktualisierung hin und wieder zu Problemen, wenn alle Register
von Anfang bis Ende neu durchbenannt werden sollen.
welche Probleme?
Kann mir Jemand einen Code schreiben, der in laienhaften
Worten ausgedrückt folgendes bewirkt:
Prüfe in einer Vorabschleife, ob alle G1 belegt sind und setzte eine boolean-Variable entsprechend:
Sub Tabellenname()
Dim zähler
Dim eineLeer As Boolean
For zähler = 1 To Sheets.Count
If Sheets(zähler).Range("G1").Value = "" Then eineLeer = True: Exit For
Next zähler
If Not eineLeer Then
'hier den Code einfügen, der ausgeführt werden
'soll, wenn mindestens alle Zellen G1 gefüllt sind
End If
End Sub
Die Bedingung "If Sheets(I).Range(„G1“).Value „“ " aus Deinem Code kannst Du Dir nun sparen, da bereits vor Aufruf sichergestellt ist, dass alle Zellen „G1“ gefüllt sind.
- Wenn sie nicht leer sind, nummeriere die Register von 1
bis… durch
für die Zellinhalte aus „G1“ als Tabellennamen:
wie bisher
Sheets(I).Name =Sheets(I).Range("G1").Value
für lfd. Nummern 1 bis …
Sheets(I).Name=CStr(I)
Das ganze vor den obigen Code gesetzt.
Oder gibt es noch eine bessere Idee ?
Mit freundlichen Grüßen
Jorma
Viele Grüße tester
Hallo tester,
klappt leider nicht.
Mein Eintrag sieht jetzt so aus :
Private Sub Workbook\_Open()
Dim zähler
Dim eineLeer As Boolean
For zähler = 1 To Sheets.Count
If Sheets(zähler).Range("G1").Value = "" Then eineLeer = True: Exit For
Next zähler
If Not eineLeer Then
Sheets(I).Name = CStr(I)
'Sheets(I).Name = Sheets(I).Range("G1").Value
End If
End Sub
Es aktualisiert sich gar nichts mehr, egal welche Variante ich aktiviere.
Habe ich irgendetwas falsch verstanden ?
Wäre nett, wenn du noch mal einen Blick darauf werfen könntest.
Viele Grüße
Jorma
Hallo tester,
Hallo!
klappt leider nicht.
Es aktualisiert sich gar nichts mehr, egal welche Variante ich
aktiviere.
Habe ich irgendetwas falsch verstanden ?
Könnte man so auffassen oder auch, dass ich es etwas zu knapp und unklar formuliert habe.
Natürlich musst Du zum Umbenennen der Tabellenblätter wie bisher dies in einer Schleife tun nur dass diese nur ausgeführt wird, wenn alle „G1“ gefüllt sind. Die angegebenen Befehlsvorschläge aus meiner vorherigen Antort bezogen sich lediglich auf den Schleifeninhalt.
Das vollständige Makro müsste so aussehen:
Private Sub Workbook\_Open()
Dim zähler
Dim eineLeer As Boolean
For zähler = 1 To Sheets.Count
If Sheets(zähler).Range("G1").Value = "" Then eineLeer =
True: Exit For
Next zähler
If Not eineLeer Then
For zähler = 1 To Sheets.Count
Sheets(zähler).Name = CStr(zähler) 'wenn lfd. Nr. als Name
Next zähler
End If
End Sub
Wenn Du den jeweiligen Zellinhalt von „G1“ als Tabellenblattnamen benutzen möchtest dann musst Du die Zeile in der zweiten Schleife ersetzen durch:
Sheets(zähler).Name = Sheets(zähler).Range("G1").Value 'wenn Zellinhalt als Name
In diesem Fall würde es allerdings zu Namenskonflikten und zu Fehlern führen, sofern mehrere Tabellenblätter den gleichen Zelleintrag in „G1“ besitzen.
Ich hoffe in der o.g. Form funktioniert es.
Gruß, tester
Hallo tester,
tja, was soll ich sagen, resp. schreiben ?
Es klappt wunderbar.
Auch der bug um den es mir ging tritt nicht mehr auf.
Ganz herzlichen Dank für deine Mühe.
Mit besten Grüßen
Jorma