Excel Register automatisch benennen

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 alle „G1“

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