Dateinamen beim Kopieren in Tabellenblatt ändern?

... komplette Frage anzeigen

1 Antwort

Du kannst mit

Dim Tabellenblatt As Worksheet
...
For Each Tabellenblatt In ActiveWorkbook.Worksheets
    ...
Next

jedes Tabellenblatt in der Datei bearbeiten.

Mit

Dim Namensbestandteile() As String
...
Namensbestandteile = Split(Tabellenblatt.Name, "_")

kannst du den Namen in die Bestandteile zwischen den Unterstrichen aufteilen.

Mit

UBound(Namensbestandteile) + 1

kannst du feststellen, wie viele Bestandteile Split ermittelt hat.

In einem Dateinamen der Form

Halo_Vorname_Nachname_Geburtsjahr.xlsx

sollen der 2. bis vorletzte Bestandteil zum neuen Namen zusammengesetzt werden. (Ich sage vorletzter und nicht 3., weil ich mir angewöhnt habe, von Anfang an solche Dinge wie zwei Vornamen zu berücksichtigen.)

Hier brauchen wir eine Abfrage, ob diese Elemente auch verfügbar sind, d. h.

UBound(Namensbestandteile) + 1 >= 4

bzw.

UBound(Namensbestandteile) >= 3

(Split liefert ein 0-basiertes Array - bei VBA hat man regelmäßig den Ärger mit verschiedenen Array-Basen: VB-Arrays sind 0-basiert, Arrays aus Excel-Objekten sind 1-basiert)

Leider gibt es in VB keine Drop-Funktion, also müssen wir selber ein neues Array zusammensetzen und in einer For-Schleife mit den richtigen Elementen füllen:

Dim NamensbestandteileNeu() As String
....
ReDim NamensbestandteileNeu(UBound(Namensbestandteile) - 2)
For ...
...
Next

Zuletzt lassen wir NamensbestandteileNeu noch zum neuen Namen zusammensetzen:

Tabellenblatt.Name = Join(NamensbestandteileNeu, " ")
Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?