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

Forumthread: Blätter umbenennen und Name aus Zellen lesen VBA

Blätter umbenennen und Name aus Zellen lesen VBA
14.03.2017 15:24:49
Nick
Hallo,
ich hoffe ihr könnt mir bei folgender Sache weiterhelfen.
Und zwar möchte ich gerne alle Tabellenblätter, außer das erste Blatt, automatisch umbenennen lassen via Makro. Das soll dann als Schleife durchlaufen.
Der Name des jeweiligen Blattes soll aus mehreren Zellen ausgelesen werden und mit einem Präfix kombiniert werden ("Text"&B5&B1&(B2&B3 aus Tabellenblatt1)).
Das Problem dabei, der letzte Teil des Namens (B2&B3) soll aus dem ersten Tabellenblatt ausgelesen werden, der Rest aus den jeweiligen Blättern, die umbenannt werden sollen. Ich bin nicht so fit mit VBA und verzweifle langsam dran.
Grüße
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blätter umbenennen und Name aus Zellen lesen
14.03.2017 15:31:43
Michael
Hallo!
Voila:
Sub BlattNamen()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim i&, Pre$, Suf$
Application.ScreenUpdating = False
Pre = "Text"
Suf = Wb.Worksheets(1).Range("B2") & Wb.Worksheets(1).Range("B3")
For i = 2 To Wb.Worksheets.Count
With Wb.Worksheets(i)
.Name = Pre & .Range("B5") & .Range("B1") & Suf
End With
Next i
End Sub
LG
Michael
Anzeige
AW: Blätter umbenennen und Name aus Zellen lesen VBA
14.03.2017 15:37:27
dirk
Hallo!
Mal auf die Schnelle:
Sub TabellenBlätter()
'Anzahl der Tabellenblätter ermitteln
Dim Anzahl As Long
Anzahl = ThisWorkbook.Worksheets.Count
Anzahl = ThisWorkbook.Sheets.Count
'Tabellenblätter mit dem Index ansprechen
Dim i As Long
With Thisworkbook
For i = 2 To Anzahl    'mit Blatt 2 starten, da erstes nicht umbenannt werden soll
.Sheets(i).name = "Text" & .Sheets(i).range("B5") & .sheets(i).Range("B1") & _
.Sheets(1).range("B2") & .sheets(1).range("B3")
Next i
end with
End Sub
Ungetestet. Lass' mal hören, ob ok
Gruss
Dirk aus Dubai
Anzeige
AW: Blätter umbenennen und Name aus Zellen lesen VBA
14.03.2017 16:16:32
Nick
Wow, Danke für die schnelle Antwort. Leider ist der Name zu lang.
Dann doch lieber so(sieht auch besser aus):
"Text_"&B5&"_"&LINKS(B1;8)&"_"&(aus Tabellenblatt1:B2&B3)
Danke im Voraus und Grüße in die Wüste :-)
Schade, dass Dir meine AW nicht gefallen hat...
14.03.2017 16:19:05
Michael
LG
Michael
AW: Schade, dass Dir meine AW nicht gefallen hat...
15.03.2017 07:50:15
Nick
Hallo Michael,
danke auch dir für die schnelle Antwort. Hab deine Nachricht auch gelesen, konnte aus zeitlichen Gründen nicht mehr antworten.
Leider ist der erzeugte Name zu lang und das Makro funktioniert nicht. Könnte man stattdessen den Code so umschreiben, dass von Zelle B1 nur die ersten 8 Zeichen von links genommen werden? Außerdem würde ich gerne die einzelnen Textbausteine mit einem Unterstrich trennen.
"Text_"&B5&"_"&LINKS(B1;8)&"_"&(aus Tabellenblatt1:B2&B3)
Kannst du mir deinen Code so umschreiben?
Grüße
Anzeige
AW: Schade, dass Dir meine AW nicht gefallen hat...
15.03.2017 08:52:16
Nick
Hi Steve1da,
hab ich selbstverständlich gemacht. Ich bin schon von der Dynamik auf beiden Foren überrascht. Hätte nicht gedacht so schnell eine Antwort zu bekommen. Aber umso besser.
Grützi
Immer noch schade, dass ich keine AW bekommen habe
15.03.2017 09:37:26
Michael
...aber vielleicht war meine erste Antwort doch zu dynamisch, wer weiß.
Beim nächsten Mal antworte ich langsamer ;-)
LG
Michael
Anzeige
Ahh, doch noch, dann hier Ergänzung...
15.03.2017 09:40:31
Michael
Hallo,
...hab Deine AW doch noch bekommen. Hier Deine gewünschte Ergänzung:
Sub BlattNamen()
Const SEP$ = "_"
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim i&, Pre$, Suf$
Application.ScreenUpdating = False
Pre = "Text"
Suf = Wb.Worksheets(1).Range("B2") & Wb.Worksheets(1).Range("B3")
For i = 2 To Wb.Worksheets.Count
With Wb.Worksheets(i)
.Name = Pre & SEP & .Range("B5") & SEP & _
Left(.Range("B1"), 8) & SEP & Suf
End With
Next i
End Sub
LG
Michael
Anzeige
AW: Ahh, doch noch, dann hier Ergänzung...
15.03.2017 10:14:11
Nick
Hi Michael,
deine Antwort war nicht zu dynamisch, ich war zu undynamisch ;-)
Der Code funktioniert, danke dir vielmals, aber leider noch nicht perfekt. Vielleicht kann man noch ne kleine Abwandlung einbauen.
Wenn in Zelle B1 ="Kriterium", Dann so: "Text"_B4_B1_(B2&B3 aus Tabellenblatt1)
Ansonsten wie gehabt "Text"_B4_B1_(B2&B3 aus Tabellenblatt1)
Danke schonmal im Voraus!
Anzeige
Perfektion ist eine Frage des Blickwinkels...
15.03.2017 10:35:02
Michael
...mein lieber Nick,
...denn mein Code ist insofern perfekt, als er genau das macht (!) was Du angefordert hast.
Nicht perfekt ist hingegen Deine Salamitaktik, mit der Du Dir hier Code erstellen lässt - in Zukunft also gleich genau beschreiben, was Du willst/brauchst - dann bekommst Du auch gleich den entsprechenden Code.
Außerdem scheinst Du jetzt selbst schon verwirrt zu sein, ob dieser Angaben:
Wenn in Zelle B1 ="Kriterium", Dann so: "Text"_B4_B1_(B2&B3 aus Tabellenblatt1)
Ansonsten wie gehabt "Text"_B4_B1_(B2&B3 aus Tabellenblatt1)

Bisher war es doch immer "Text"_B5_B1_etc. - hier daher der geänderte Code, unter meiner Annahme, dass im Falle B1 = "Kriterium" B4 herangezogen wird, ansonsten B5:
Sub BlattNamen()
Const SEP$ = "_"
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim i&, Pre$, Suf$
Application.ScreenUpdating = False
Pre = "Text"
Suf = Wb.Worksheets(1).Range("B2") & Wb.Worksheets(1).Range("B3")
For i = 2 To Wb.Worksheets.Count
With Wb.Worksheets(i)
Select Case .Range("B1")
Case Is = "Kriterium"
.Name = Pre & SEP & .Range("B4") & SEP & _
Left(.Range("B1"), 8) & SEP & Suf
Case Else
.Name = Pre & SEP & .Range("B5") & SEP & _
Left(.Range("B1"), 8) & SEP & Suf
End Select
End With
Next i
End Sub
LG
Michael
Anzeige
AW: Perfektion ist eine Frage des Blickwinkels...
15.03.2017 11:52:57
Nick
Danke dir Michael. Funktioniert.
Deine Anmerkung hab ich verstanden, allerdings sind das Dinge gewesen die mir im Nachhinein aufgefallen sind, da die Mappe sehr komplex ist (ca 70 Blätter). Entschuldige die Unannehmlichkeiten...
Fein! Viel Erfolg noch, owT
15.03.2017 12:38:23
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Blätter umbenennen und Namen aus Zellen lesen in VBA


Schritt-für-Schritt-Anleitung

Um in Excel mehrere Tabellenblätter mit VBA umzubenennen, kannst Du das folgende Makro verwenden. Dieser Code liest die Namen der Blätter aus spezifischen Zellen und kombiniert sie mit einem Präfix.

Sub BlattNamen()
    Const SEP$ = "_"
    Dim Wb As Workbook: Set Wb = ThisWorkbook
    Dim i&, Pre$, Suf$
    Application.ScreenUpdating = False
    Pre = "Text"
    Suf = Wb.Worksheets(1).Range("B2") & Wb.Worksheets(1).Range("B3")

    For i = 2 To Wb.Worksheets.Count
        With Wb.Worksheets(i)
            .Name = Pre & SEP & .Range("B5") & SEP & _
            Left(.Range("B1"), 8) & SEP & Suf
        End With
    Next i
End Sub

In diesem Code wird der Name des aktuellen Tabellenblattes aus den Werten der Zellen B1, B2, B3 und B5 erstellt. Achte darauf, dass das erste Blatt nicht umbenannt wird.


Häufige Fehler und Lösungen

  1. Name zu lang: Wenn der erzeugte Name zu lang ist, kannst Du die Anzahl der Zeichen, die von B1 gelesen werden, mit Left(.Range("B1"), 8) anpassen. Wenn nötig, ändere die Zahl 8 in eine kleinere Zahl.

  2. Fehlermeldung bei ungültigem Namen: Vergewissere Dich, dass die Zellen, aus denen die Namen entnommen werden, gültige Zeichen enthalten. Vermeide Sonderzeichen und Leerzeichen.

  3. Makro nicht ausführbar: Stelle sicher, dass Makros in Excel aktiviert sind. Dies kannst Du unter "Datei" > "Optionen" > "Trust Center" > "Einstellungen für das Trust Center" > "Makroeinstellungen" kontrollieren.


Alternative Methoden

Falls Du keine VBA-Programmierung verwenden möchtest, kannst Du auch die Funktion "Blatt umbenennen" manuell nutzen:

  1. Klicke mit der rechten Maustaste auf das Tabellenblatt.
  2. Wähle „Umbenennen“ aus dem Kontextmenü.
  3. Gib den neuen Namen ein.

Für eine größere Anzahl an Blättern könnte ein Makro jedoch zeitsparender sein.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den Namen eines Tabellenblattes nach dem Wert einer Zelle benennen kannst:

Sub TabellenblattNachZelleBenennen()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)
    ws.Name = ws.Range("A1").Value ' Blattname wird auf den Wert von A1 gesetzt
End Sub

Mit diesem Code wird das erste Tabellenblatt nach dem Wert in Zelle A1 benannt.


Tipps für Profis

  • Verwende Error Handling in deinem VBA-Code, um unerwartete Fehler abzufangen.
  • Setze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Du kannst auch die Funktion Application.DisplayAlerts = False verwenden, um Warnmeldungen beim Umbenennen von Blättern auszuschalten.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Tabellenblätter in einem Schritt umbenennen?
Verwende ein Makro, um die Namen in einer Schleife festzulegen, wie im obigen Beispiel.

2. Kann ich die Namen der Blätter nach bestimmten Kriterien umbenennen?
Ja, Du kannst eine Select Case-Anweisung verwenden, um verschiedene Bedingungen zu überprüfen und die Namen entsprechend anzupassen.

3. Was passiert, wenn der Name eines Blattes bereits existiert?
Excel gibt eine Fehlermeldung aus, wenn Du versuchst, ein Blatt mit einem Namen zu benennen, der bereits verwendet wird. Du solltest sicherstellen, dass die neuen Namen eindeutig sind.

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