Clever-Excel-Forum

Normale Version: Tabellenblätter erzeugen/be-"namsen" über VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen in die Runde ...

eine schnelle Frage:

Ich erzeuge per VBA aus einem existierenden "Blanko"-Tabellenblatt ( das eine bestimmte Tabellenform enthält )
in meiner Arbeitsmappe ein neues Tabellenblatt mit gleichem Inhalt aber anderem Namen ...

Sub ErzeugeQCopy()
   Dim array1 As Variant 
   Dim i As Integer
   array1 = Array(5, 3, 1, 2, 4)

   For i = 1 to UBOUND(array1)
       Worksheets("Q-blanko").Copy after:=Worksheets(Worksheets.Count)
      Worksheets(Worksheets.Count).Name = "Q-copy" & i
   Next
End Sub


Der Name des kopierten Tabellenblattes beinhaltet somit auch den Laufindex.


Wenn ich in die Eigenschaften der neuen Tabellenblätter schaue, gibt es für jedes Blatt (natuerlich) auch den
entsprechenden Tabellennamen, wie ich ihn in der For Schleife definiert und zugewiesen habe...

Mein Problem:
Im beigefügten Bild sieht man im grünen Rahmen einen von mir per VBA definierten Tabellen NAME ... hier "Q-xyz" ...
( über: Worksheets(Worksheets.Count).Name = "Q-xyz" ), so wie ich ihn dann auch in den Eigenschaften sehe.

Es gibt in den Eigentschaften aber auch das rote Feld (NAME) ... hier "Blatt5" ... den ich zwar manuell im VBA Tool editieren
kann, wenn ich auf das entsprechende Element gehe, aber den ich scheinbar nicht per VBA Code verändern kann.

Nun die Frage 1 :
Ist es möglich, auch auf (NAME) per VBA zuzugreifen und diesen zu verändern ?

Und die Frage 2 :
Ich erzeuge die neuen Blätter ja per VBA aus der Blanko-Vorlage mit der FOR Schleife über das Array wie im obigen Code Beispiel
und möchte hinterher diese neuen Blätter anhand ihres Namens - den ich über NAME vergebe - sortieren ( und möchte vorher nicht
das Array sortieren). Geht das evtl besser über (NAME), wenn ich denn darauf zugreifen könnte?

Vielleicht hat einer von Euch ja eine gute Idee Smile.

Vielen Dank schon einmal vorab.

Gruss, Michael
oops ... sorry ... kleine Korrektur :


Sub ErzeugeQCopy()
   Dim array1 As Variant 
   Dim i As Integer
   array1 = Array(5, 3, 1, 2, 4)

   For i = 1 to UBOUND(array1)
       Worksheets("Q-blanko").Copy after:=Worksheets(Worksheets.Count)
       Worksheets(Worksheets.Count).Name = "Q-copy" & array1(i)
   Next
End Sub


Der Name des kopierten Tabellenblattes beinhaltet somit auch den i-ten Wert des Arrays.
Es kämen die Tabellenblätter "Q-copy5", "Q-copy3", "Q-copy1", "Q-copy2", "Q-copy4" heraus.

Diese möchte ich dann sortieren, als Endergebnis soll die Blätter in der xls in der Reihenfolge stehen:
"Q-copy1" ... "Q-copy2" ... "Q-copy3" ... "Q-copy4" ... "Q-copy5"

Wenn ich zusätzlich Q-copy's später mal einbaue über VBA, zB "Q-copy41", "Q-copy21" und "Q-copy22"
möchte ich diese neuen Blätter chronologisch einsortieren :
"Q-copy1" ... "Q-copy2" ... "Q-copy21" ..."Q-copy22" ..."Q-copy3" ... "Q-copy4" ... "Q-copy41"... "Q-copy5"


Habt Ihr eine Idee ?
Hallo,

was du da im rot-markierten Bereich siehst, ist der Systemname deiner Tabellenblattobjekte. Diesen Namen würde ich nicht verändern. (Dem Himmel sei es geklagt, dass das überhaupt möglich ist)! In meinen Makros arbeite ich vorzugsweise mit diesem Namen, dann können die Nutzerdefinierten Namen geändert werden, bis der Arzt kommt, das Makro läuft unbeirrt weiter, und das ist auch gut so.
Hallo Klaus-Dieter,

vielen Dank für Deine Einschätzung und Hinweise Smile.
Ich bastel mal weiter ...

Grüße,
Michael