Clever-Excel-Forum

Normale Version: Excel vba Tabellen Codenamen umbenennen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

darf ich Euch wieder einmal um Eure Hilfe bitten?

In einem Workbook habe ich Tabellen deren Anzahl sich laufend ändern können.
Davon sind 5 Tabellen, die immer im Workbook verbleiben!
Ich möchte jetzt gerne die Code-Namen per Makro so ändern können, dass die eine fortlaufende Nummerierung aller Tabellen erfolgt, egal ob sich die Anzahl der Tabellen ändert.
Aber..... die 5 erwähnten Tabellen sollen immer von 1-5, also Tabelle1.....Tabelle5 als Codename erhalten....die restlichen dann als aufsteigender Codename bis Tabellexx.

Die 5 Tabellen haben die Namen "Anlagen", "Vorlage", "Konfiguration", "Auswahl_Vorgaben", "SaveHistory"

Wie könnte man die mittels vba umsetzen?

Bin wie immer dankbar für einen Vorschlag!
Hallöchen,

im Prinzip so:

ThisWorkbook.VBProject.VBComponents("Tabelle1").Name = "MyName1"
Hallo André,

danke für den Tipp.

Mit
ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = "Tabelle" & i

möchte ich aber die Benennung in einer Schleife automatisieren.
Ewas so, aber leider komme ich da nicht weiter.

Code:
  For i = 1 To WS_Count
      Sheets(i).Select
      wksTab = Sheets(i).Name
     
      Select Case wksTab
        'Feste Vorgaben der Vorlagen-Nummerierung
        Case "Anlagen", "SBA Vorlage", "Konfiguration", "Auswahl_Vorgaben", "SaveHistory"
            ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = "Tabelle" & i
           
        'Fortlaufende Nummerierung aller anderen Sheets
        Case Else
            ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = "Tabelle" & i
      End Select
  Next i

Das funktioniert leider nicht wie vorgestellt, so wie eingangs beschrieben.
Hallöchen,

was genau funktioniert nicht?
es gibt auf den ersten Blick zwei Punkte
  • wenn Du umbenennst darf der Codenamen nicht schon vorhanden sein. Du wirst doch nicht auf Standardnamen umbenennen weil die vorher jemand auf Phantasienamen geändert hat? Das könnte höchstens klappen, wenn Du dort z.B. die englischen Bezeichnungen Sheet1 usw. ins deutsche übersetzen willst Smile
  • wenn Du den Codenamen vom Blatt wksTab ändern willst, solltest Du auch wksTab.Codenahme ändern und nicht stattdessen Worksheets(i).CodeName
Moin!
Was hat sich denn seit diesem (und anderen) Thread geändert?
https://www.clever-excel-forum.de/Thread...-erzwingen

Fragt sich Ralf
Guten Morgen,
  • das Problem ist genau das was Du in Deinem ersten Punkt beschrieben hast, es kann sein dass der Code-Name bereits vorkommt. Ich bekomme die Tabellen zugeleifert und die heissen halt nun mal mit den Code-Namen (in deutsch) Tabellex....Tabellexx usw.
Den Prosa_Namen von den Tabellenreitern kann/darf ich nicht beeinflussen....die müssen erhalten bleiben
  • bzgl. Deines zweiten Punktes. Ich möchte ja den Codenamen des wksTab ändern. Aber wie spreche ich dann die einzelnen Blätter an wenn Worksheets(i).CodeName nicht richtig ist?

Verwirrung Huh
Hallo Ralf,

danke für Deinen Hinweis....ich verwende Dein Makro ja, aber Aufgabe hat sich insofern geändert, dass ich die Blätter mit den

Blattnamen: "Anlagen", "SBA Vorlage", "Konfiguration", "Auswahl_Vorgaben", "SaveHistory"

mit den Codenamen von Tabelle1 bis Tabelle5 benannt haben möchte.....und den Rest der Tabellenblätter, egal wie viele dazukommen oder wieder gelöscht werden dann von Tabelle6 bis Tabellxxx im Codenamen umbenannt werden müssen.
Hallöchen,

Zitat:Ich möchte ja den Codenamen des wksTab ändern

es ist m.E. besser, wenn Du bei einer Variante bleibst, also entweder wksTab verwendest oder Worksheets(i).CodeName. Wenn man mal umfangreichere Codes hat weiß man irgendwann nicht mehr, wo man ist …

Deine Codenamen könntest Du erst mal auf eine temporäre Variante ändern und anschließend auf die gewünschten Nummern.
Also z.B.
Code:
For i = 1 To WS_Count
    ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = "Libelle" & i
Next
'und anschließend
ThisWorkbook.VBProject.VBComponents(Worksheets("Anlagen").CodeName).Name = "Tabelle1"
ThisWorkbook.VBProject.VBComponents(Worksheets("SBA Vorlage").CodeName).Name = "Tabelle2"
'…
'und dann einen extra Zähler
k=6
'und dann Deine ursprüngliche Schleife, aber mit kleinen Unterschieden :-)
For …
'...
    Select Case wksTab
        'Nix tun     
        Case "Anlagen", "SBA Vorlage", "Konfiguration", "Auswahl_Vorgaben", "SaveHistory"
        'Fortlaufende Nummerierung aller anderen Sheets
        Case Else
        ThisWorkbook.VBProject.VBComponents(wksTab.CodeName).Name = "Tabelle" & k
        k=k+1
    End Select
'…
Next i
Hallo André,

herzlichen Dank für Deine Bemühungen, es funktioniert bestens mit diesem Code.

Code:
Sub Num_CodeNamen()
 
  WS_Count = ActiveWorkbook.Worksheets.Count
 
  For i = 1 To WS_Count
      ThisWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = "Libelle" & i
  Next i
  'und anschließend
  ThisWorkbook.VBProject.VBComponents(Worksheets("Anlagen").CodeName).Name = "Tabelle1"
  ThisWorkbook.VBProject.VBComponents(Worksheets("SBA Vorlage").CodeName).Name = "Tabelle2"
  ThisWorkbook.VBProject.VBComponents(Worksheets("Konfiguration").CodeName).Name = "Tabelle3"
  ThisWorkbook.VBProject.VBComponents(Worksheets("Auswahl_Vorgaben").CodeName).Name = "Tabelle4"
  ThisWorkbook.VBProject.VBComponents(Worksheets("SaveHistory").CodeName).Name = "Tabelle5"
 
  'und dann einen extra Zähler
  k = 6
  'und dann Deine Schleife, aber mit
  For j = 1 To WS_Count
      wksTab = Sheets(j).Name
      '...
      Select Case wksTab
        'Nix tun
        Case "Anlagen", "SBA Vorlage", "Konfiguration", "Auswahl_Vorgaben", "SaveHistory"
            'Fortlaufende Nummerierung aller anderen Sheets
        Case Else
            ThisWorkbook.VBProject.VBComponents(Worksheets(j).CodeName).Name = "Tabelle" & k
            k = k + 1
      End Select
      '…
  Next j
End Sub

Das einzig unschöne ist, dass immer, wenn eine Tabelle dazukommt, die ich mit in der Anfangssortierung haben möchte, also direkt hinter Tabelle5, muss ich den vba-Code anpacken und händisch in den Anfangsblock des Makros einfügen.