Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleife bis neuer Tabellenblattname

Forumthread: Schleife bis neuer Tabellenblattname

Schleife bis neuer Tabellenblattname
07.02.2023 18:55:53
Susanne
Guten Abend liebe Excel-Gemeinde,
ich möchte gerne die Tabellenblätter anhand der Zelle A1 benennen. Jetzt ist es nur so, dass daraufhin manchmal der gleiche Name entstehen würde. Ich hab mir gedacht, sofern das der Fall ist, wird in der Zelle A1 einfach über eine Variable eine Zahl von 2-9 angehängt und es dann nochmal versucht. (Meinen Code-Schnipsel habe ich auch nur im Web gefunden, jedoch testete der nur ob das Blatt schon vorhanden ist. Ich habe ihn umgebaut, aber erfolglos.)
Der Code macht leider gar nichts, außer vielleicht endlos laufen. Kann man keine zwei Schleifen ineinander schachteln oder bin ich hier komplett falsch unterwegs?
LG,
Su
'Testen ob Blattname bereits vorhanden ist
Dim blatt As Object
Dim BlattName As String
Dim bolFlg As Boolean
Dim r As Integer
For r = 2 To 9
BlattName = Range("a1").Value
For Each blatt In Sheets
    If blatt.Name = BlattName Then bolFlg = True
       Range("A1").Value = Range("A1").Value & r
    'Wenn name noch nicht vorhanden, dann aus A1 übernehmen
    ElseIf bolFlg = False Then
    ActiveSheet.Name = Range("A1").Value
Next blatt
Next r
'''Alles erledigt
Range("b1").Value = "Modded"
End If
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife bis neuer Tabellenblattname
07.02.2023 22:59:16
Zwenn
Hallo Susanne,
ich habe am Bier gerochen und mir beim durchsehen der Foren gedacht ... Ok, gucke ich mir Mal an. Ich habe es aber nicht ausprobiert und es fehlen auch die Prüfungen auf zu lange Tabellennamen (maximal 31 Zeichen), verbotene Zeichen in Tabellennamen (:\/?*[]) und die leere Zeichenkette as Name. Dafür gibt es aber keine Grenze nach oben, was mehrfache Tabellen in der Nummerierung angeht.
Einfach ausprobieren:
(Wie immer, mehr Kommentare als Code.)

Sub TabellenBenamung()
  'Variablen
  Dim tabelle As Worksheet           'Variable, um durch alle Tabellen zu iterieren
  Dim tabellenNamen As Object        'Tabellennamen (keys) mit Zaehler (values) (wird ein Dictionary mit late binding)
  Dim tabellenNameAusZelle As String 'Zellenbezug aus Spalte (Buchstabe) und Zeile (Zahl)
  
  'Notwendige Initialisierungen von Variablen
  Set tabellenNamen = CreateObject("Scripting.Dictionary") 'Dictionary fuer Tabellennamen und Zaehler
  tabellenNameAusZelle = "A1" 'Zellenbezug
  
  'Alle vorhandenen Tabellennamen in das Dictionary einlesen
  'Denn es kann sein, dass die neue Benamung mit der bereits bestehenden kollidiert
  'Die Tabellennamen dienen jeweils als Key
  'Als Zaehler wird Value jeweils 1 gesetzt
  'Sehr weitreichende Infos zu Dictionaries:
'https://excelmacromastery.com/vba-dictionary/
  For Each tabelle In Sheets
    'Alle Tabellen koennen ohne Pruefung ins Dict geschrieben werden,
    'denn alle Namen sind auf jeden Fall eindeutig und gueltig
    'Muster: dict.Add Key, Value
    tabellenNamen.Add tabelle.Name, 1
  Next tabelle
  
  'Erneut alle Tabellen durchgehen und die endgueltigen Namen festlegen
  For Each tabelle In Sheets
    'Pruefen, ob aktueller Tabellenname schon im Dict vorhanden
    'Muster: dict.Exists(Key)
    If tabellenNamen.exists(tabelle.Name) Then
      'Name ist bereits vorhanden
      'Dann mit gleichem Namen und Nummer +1 neu festlegen
      '
      'Zunaechst den Zaehler um 1 erhoehen
      tabellenNamen(tabelle.Name) = tabellenNamen(tabelle.Name) + 1
      'Neuen Namen ins Register schreiben
      tabelle.Name = tabellenNamen.Key & CStr(tabellenNamen(tabelle.Name))
    Else
      'Namen aus gewuenschter Zelle ins Register schreiben
      tabelle.Name = tabelle.Range(tabellenNameAusZelle).Value
      'Neuen Tabellennamen als Key in Dict eintragen
      'Value auf 1 setzen
      tabellenNamen.Add tabelle.Name, 1
    End If
  Next tabelle
End Sub
Dein Code hat mehr Fehler als richtige Zeilen ;-) Er läuft auch nicht einmal los, weil ein End If fehlt. Aber egal. Nicht benutzen, ist scheiße.
Viele Grüße,
Zwenn
Anzeige
AW: Schleife bis neuer Tabellenblattname
08.02.2023 12:14:46
Susanne
Hallo Zwenn,
vielen Dank für deine ausführliche Unterstützung! Das ist sehr, sehr nett von dir mich derart zu unterstützen!
Das Sub lädt alle Namen in das Dictionary, jedoch hängt es dann im letzten if.
Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Liegt das an meinem Excel2013?
Hier hängt es:
tabelle.Name = tabellenNamen.Key & CStr(tabellenNamen(tabelle.Name))
Wenn ich den Bezug mit Range erstelle, lädt das Sub den Zellinhalt rein, statt als Wert A1 anzugeben.
tabellenNameAusZelle = Range("A1") 'Zellenbezug
tabellenNameAusZelle = "A1" 'Zellenbezug
Ich hab mich etwas daran versucht, aber dann fügt er bei folgender Änderung zu jedem Blatt eine 2 hinzu. Starte ich es nochmal, folgt eine weitere 2 hinter den Blättern.
 tabelle.Name = tabelle.Name & CStr(tabellenNamen(tabelle.Name))
LG,Su
Anzeige
AW: Schleife bis neuer Tabellenblattname
08.02.2023 14:12:30
Zwenn
Hallo Susanne,
lade bitte eine Beispielmappe mit Tabellennamen hoch, in der Art, wie sie bei Dir vorliegen. Bitte inklusive der "neuen" Namen in den Zellen A1 in jeder Tabelle.
Kann durchaus sein, dass ich da Fehler eingebaut habe. Wie gesagt, ich habe es nicht getestet. Nach Deiner Antwort gehe ich nun davon aus, dass es bereits Tabellen geben kann, die eine Nummer am Ende des Namens haben, die bei einem weiteren Durchgang weiter hochgezählt werden soll. Ist das so? Also wenn die Tabelle z.B. Tabelle2 heißt und in A1 steht Tabelle, dann soll die nach dem Makrolauf Tabelle3 heißen?
Diese Funktionalität ist in meinem Makro nicht enthalten. Das fängt bei jedem Start ganz stumpf "von Vorne" an. Die erste Zahl, die Du ranhängen willst (laut Ausgangsposting), ist die 2. Es gibt also keine Tabellennamen mit 1 am Ende. So hatte ich es verstanden. Bei einem zweiten Makrolauf wird also der vorliegende Name mit 2 am Ende eingelesen und weil es den dann schon im Dictionary gibt, wenn die Tabelle dran ist, wird der neue Name gebildet, indem eine 2 angehängt wird. Dann steht also 22 dran.
Ich weiß ja nicht, in welcher Weise Du das Makro verwenden willst. Läuft das immer wieder über die gleichen Tabellen, also in der gleichen Arbeitsmappe? Man kann solche "kleinen" Helferlein in Makroform nämlich beliebig kompliziert gestalten, wenn jede Menge Sonderfälle abgedeckt werden müssen. Da reicht es dann z.B. nicht mehr, nur das letzte Zeichen zu prüfen, ob es sich um eine Zahl handelt, sondern wenn ja, muss auch das vorletzte Zeichen geprüft werden, usw. Es kann schließlich sein, dass ein Tabellenname auch im 2-stelligen Bereich landet. 3-stellig ist eher unwahrscheinlich, müsste aber mitgeprüft werden.
Viele Grüße,
Zwenn
Anzeige
AW: Schleife bis neuer Tabellenblattname
08.02.2023 15:55:15
Piet
Hallo Susanne
mit diesem kleinen Makro kannst du dir alle Tabellen mit A1 in eine neue Tabelle Übersicht ""Übs Tab" auflisten.
Du kannst auch den UsedRange Bereich sehen. Damit hast du zuerst mal eine schöne Übersicht.
Die Tabellen umbennenen kann man danach auch aus dieser Übersicht erledigen.
mf Piet
  • Sub Tabelen_auflisten()
    With Worksheets("Übs Tab")
         .UsedRange.Offset(1, 0).ClearContents
         For j = 1 To Worksheets.Count
             .Cells(j + 1, 1) = j
             .Cells(j + 1, 2) = Worksheets(j).Name
             .Cells(j + 1, 3) = Worksheets(j).Range("A1")
             .Cells(j + 1, 4) = Worksheets(j).UsedRange.Address(0, 0)
         Next j
    End With
    End Sub

  • Anzeige
    AW: Schleife bis neuer Tabellenblattname
    08.02.2023 16:06:21
    Susanne
    Hallo Zwenn,
    vielen Dank für deine Antwort. Also im besten Fall soll das Makro nur einmal über die Arbeitsmappe laufen.
    Ich hab dir eine Beispieldatei mit den tatsächlichen Namen angehängt.
    Aus einem Export bekomme ich gerne mal 30 Blätter raus, welche ich dann eben gerne unterschiedlich benannt haben will.
    Heißt eine Tabelle bereits "GM_Panel_EUR_DE", so soll die nächste Tabelle mit "GM_Panel_EUR_DE" in der Zelle A1 eine 2 angehängt werden, der nächsten mit dem gleichen Namen eine 3 usw.
    https://www.herber.de/bbs/user/157730.xlsx
    LG, Su
    Anzeige
    AW: Schleife bis neuer Tabellenblattname
    09.02.2023 03:56:03
    Piet
    Halo Susanne
    schau dir bitte mal deine Beispieldatei an. Das Makro sollte deine Wünsche erfüllen.
    Bei Doppelnamen wird ein Index angehangen, und auch in der Zelle A1 geaendert.
    https://www.herber.de/bbs/user/157739.xls
    mfg piet
    Anzeige
    AW: Schleife bis neuer Tabellenblattname
    09.02.2023 09:07:04
    Susanne
    Guten Morgen Piet,
    traumhaft gelöst! Herzlichsten Dank!
    Auch deine Variante von gestern Nachmittag hab ich mir angesehen und kann mir vorstellen, dass ich die Auflistung anderweitig verwenden kann.
    Ich hoffe auch, dass deine Codezeilen in Zukunft auch noch von anderen Hilfebedürftigen gebraucht werden können :)
    LG, Su
    Anzeige
    ;

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige