VBA: Wie Code für Schleife anpassen?
#1
Moinsen!

Irgendwie sehe ich grad vor lauter Bäumen den Wald nicht.

Ich habe mal in einer Excel Datei ein "Mini-Makro" verwendet, um einem Kollegen das leben etwas leichter zu machen. Wie dem dann so ist kommen sie irgendwann wieder und wollen mehr ...

Der Codeschnipsel den ich seinerzeit verwendet habe, hat einfach den Eintrag in einer Zelle ausgelesen und diesen hergenommen und als Name für die Tabelle gesetzt.
Code:
tbl_1.Name = Worksheets(tbl_0.Name).Cells(22, 1).Value

Wie kann ich denn nun das ganze in eine Schleife packen ?
Ich soll das ganze nun für 20 Tabellenblätter machen und irgendwie macht es grad nicht so richtig klick. Mein Ansatz war dieser ...
Code:
Sub versuch()
    Dim i As Long ' Zaehler fuer Tabellennummer
    Dim z As Long ' Zeilenzaehler
    Dim NeuerName As String ' Name Tabelle
   
    For i = 1 To 20
        NeuerName = "tbl_" & i
        NeuerName.Name = Worksheets(tbl_0.Name).Cells(z, 1).Value
        z = z + 1
    Next
End Sub

Der funktioniert jedoch nicht.
Da noch einige anderen Sachen passieren sollen außer dem umbenennen, will ich das unbedingt in einer Schleife haben. Kann mich mal bitte jemand in die richtige Richtung schubsen …. 

Vielen Dank!

Gruß 
Gordon
Top
#2
Hallo Gordon,

anscheinend verwendest Du in Deinem Code den technischen Tabellennamen, also den, der im VBE vor der Klammer steht.

Diesen kann man m.W. nicht einfach zusammensetzen und schon gar nicht so, wie es in Deinem Ansatz steht.

Falls die Blattnamen, also die in in der Klammer stehen und im Registertab unten angezeigt werden auch so heißen, kannst Du es mit u.a. (ungetestete) Makro probieren.
Ansonsten wäre das Hochladen Deiner Mappe mal sinnvoll.

PS: Bei den technischen Namen musst Du nicht zusätzlich noch Worksheets schreiben.
Code in die Zwischenablage
Sub versuch()
    Dim i As Long ' Zaehler fuer Tabellennummer
    Dim z As Long ' Zeilenzaehler
 
    For i = 1 To 20
        z = z + 1
        Sheets("tbl_" & i).Name = tbl_0.Cells(z, 1).Value
    Next
End Sub
viele Grüße aus Freigericht
Karl-Heinz
Top
#3
Hallöchen,

den Codenamen eines Tabellenblattes kann man schon zusammensetzen, hier mal der Ansatz. Es sollte natürlich auch zwei Tabellen mit den Codenamen Tabelle1 und Tabelle2 in der Mappe geben.

Code:
Sub test()
Dim iCnt%
For iCnt = 1 To 2
MsgBox ActiveWorkbook.VBProject.VBComponents("Tabelle" & iCnt).Name
Next
End Sub

Wenn man die Codenamen ändert, muss man genau wie bei den "normalen" Tabellennamen aufpassen, dass keine Doppelungen entstehen könnten. Das geht nicht, in dem Fall läuft der Code auf einen Fehler..
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
(24.07.2020, 18:03)schauan schrieb: Hallöchen,

den Codenamen eines Tabellenblattes kann man schon zusammensetzen, hier mal der Ansatz. Es sollte natürlich auch zwei Tabellen mit den Codenamen Tabelle1 und Tabelle2 in der Mappe geben.

Code:
Sub test()
Dim iCnt%
For iCnt = 1 To 2
MsgBox ActiveWorkbook.VBProject.VBComponents("Tabelle" & iCnt).Name
Next
End Sub

Hi Andre
man muss wohl den Zugriff auf die VBComponents zulassen ?
Und ob man davon ausgehen kann, dass es so eingestellt ist beim Anwender? Eher nicht.
Ist eine typische Falle für Entwickler, welche das "natürlich" immer freigeschaltet haben.

Top
#5
Hi Jeanie,

ja, so ist es Sad Ausgehen kann man davon nicht, standardmäßig ist der entsprechende Haken nicht gesetzt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste