Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro in allen Tabellenblättern ausführen?

Forumthread: Makro in allen Tabellenblättern ausführen?

Makro in allen Tabellenblättern ausführen?
peter
Hallo zusammen,
Habe ein Makro gesrieben. Dies soll in allen tabellenblättern augeführt werden ca. 30 Tabellenblätter (varriert). Nachfolgend da Makro:
Sub Name_Tabellenblatt() Range("H4").Select ActiveCell.FormulaR1C1 = "=RIGHT((LEFT(R[-2]C[-2],8)),4)" Range("I4").Select ActiveCell.FormulaR1C1 = "" Range("H4").Select Selection.Copy Range("I4").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Name = ActiveSheet.Range("I4") End Sub
Wie stelle ich das an ?
Danke für Eure Hilfe!!
Gruß
Peter
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro in allen Tabellenblättern ausführen?
Josef
Hallo Peter!
Hier mal zwei möglichkeiten.
Option Explicit

Sub Name_Tabellenblatt_Kompliziert()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Sheets
With wks
.Range("H4").FormulaR1C1 = "=RIGHT((LEFT(R[-2]C[-2],8)),4)"
.Range("I4") = .Range("H4").Value
.Name = .Range("I4")
End With
Next
End Sub

Sub Name_Tabellenblatt_Einfach()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Sheets
wks.Name = Right(Left(wks.[F2], 8), 4)
Next
End Sub

Gruß Sepp
Anzeige
An Sepp
ralle
Hallo Sepp,
erstmal Danke für Deine schnelle Antwort, leider funktioniert es nicht ganz, bekommte einen Laufzeitfehler 1004. Wenn ich debuggen aktiviere, makierte er mir folgendes in gelb: "wks.Name = Right(Left(wks.[F2], 8), 4)"
Woran kan es liegen ?
Gruß
ralle
AW: An Sepp
Josef
Hallo Ralle (Peter?)
Dann ist wohl in mindestens einem der Blätter die Zelle "F2" leer !
Den Fehler kannst du so abfangen.
If wks.[F2] "" Then
wks.Name = Right(Left(wks.[F2], 8), 4)
End If
Gruß Sepp
Anzeige
AW: An Sepp
ralle
... ja ralle = peter!! sorry!!!
ich bin wohl zu blöd für diese Sache, kenne mich aber auch nicht wirklich gut mit VBA aus. Frage: Kann ich mein Makro einfach durch Dein Makro ersetzen oder wie muß das Makro laufen?
Zur Info, dass Makro muß in jedem Tabellenblatt neu gestartet werden, da sich in der Zelle F2 immer ein anderer Wert befindet. Der Name für das Tabellenblatt befindet nach durchlauf des Makros in der Zelle I5.
Hoffe Du kannst und wilst mir noch helfen, auch wenn ich mich so dumm anstelle!!
Gruß
ralle
Anzeige
AW: An Sepp
Josef
Hallo Peter!
Da hab ich dich wohl falsch verstanden!
Ich dachte, du möchtest in einem Durchlauf
alle Tabellenblätter umbenennen.
Also du willst immer das aktive Tabellenblatt
abhängig vom Wert in "F2" umbenennen.
Wenn du den Namen des Tabellenblattes auch in
"I4" benötigst, dann verwende diesen Code.

Sub Name_Tabellenblatt()
With ActiveSheet
.[I4] = Right(Left(.[F2], 8), 4) 'macht das selbe wie deine Formel
.Name = .[I4]
End With
End Sub

Brauchst du nur den Namen der Tabelle, dann
genügt folgender Code.

Sub Name_Tabellenblatt2()
ActiveSheet.Name = Right(Left([F2], 8), 4)
End Sub

Gruß Sepp
Anzeige
AW: An Sepp
ralle
Hallo sepp
dass klappt mit Deinem Makro wunderbar

Sub Name_Tabellenblatt()
With ActiveSheet
.[I4] = Right(Left(.[F2], 8), 4) 'macht das selbe wie deine Formel
.Name = .[I4]
End With
End Sub

, aber ich möchte nun in einem Durchlauf alle Tabellenblätter umbenen in abhängigkeit vom Wert "F2". Dabei ist die Anzahl der Tabellenblätter variabel.
Gruß
ralle
PS: Danke für Deine Hilfe bis jetzt, ist ja nicht selbstverständlich!!
Anzeige
AW: An Sepp
Josef
Guten Morgen Peter!
Genau das machen eigentlich die ersten Makros die
ich gepostet habe!
Nimm diesen Code.

Sub Name_Tabellenblatt_Alle()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Sheets
With wks
If .[F2] <> "" Then
'prüfen ob in "F2" ein Wert enthalten,
'sonst kommt es zu einem Laufzeitfehler!
.[I4] = Right(Left(.[F2], 8), 4)
.Name = .[I4]
End If
End With
Next
End Sub

Gruß Sepp
Anzeige
AW: An Sepp
ralle
... entschuldige, dass ich nochmal belästigen muss. Habe jetzt folgendes im Makro stehen:

Sub Name_Tabellenblatt_Alle()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Sheets
With wks
If .[F2] <> "" Then
'prüfen ob in "F2" ein Wert enthalten,
'sonst kommt es zu einem Laufzeitfehler!
.[I4] = Right(Left(.[F2], 8), 4)
.Name = .[I4]
End If
End With
Next
End Sub

Wenn ich dieses Makro ausführe passiert jetzt gar nichts. Woran liegt das, habe ich etwas vergessen ?
Gruß
ralle
Anzeige
Es funktioniert !!!
21.04.2004 09:45:52
ralle
Hallo Sepp,
Danke für Deine Mithilfe, habe jetzt endlich das passende Makro gefunden:

Sub KST()
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Worksheets
With wks
.[I4] = Right(Left(.[F2], 8), 4) 'macht das selbe wie deine Formel
.Name = .[I4]
End With
Next
End Sub

Wünsche Dir noch einen schönen Tag !!
Gruß
ralle
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro in allen Excel-Tabellenblättern ausführen


Schritt-für-Schritt-Anleitung

Um ein Makro in allen Tabellenblättern auszuführen, kannst du den folgenden VBA-Code verwenden. Dieser Code durchläuft jedes Tabellenblatt in deiner Arbeitsmappe und führt die definierten Anweisungen aus.

Sub Name_Tabellenblatt_Alle()
    Dim wks As Worksheet
    For Each wks In ThisWorkbook.Sheets
        With wks
            If .[F2] <> "" Then
                .[I4] = Right(Left(.[F2], 8), 4) ' macht das selbe wie deine Formel
                .Name = .[I4]
            End If
        End With
    Next
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.
  3. Kopiere den obigen Code in das Modul.
  4. Schließe den VBA-Editor und kehre zu Excel zurück.
  5. Drücke ALT + F8, wähle "Name_Tabellenblatt_Alle" aus und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn die Zelle F2 in einem der Tabellenblätter leer ist. Um dies zu vermeiden, stelle sicher, dass du die Zeile mit der Überprüfung einfügst:

    If .[F2] <> "" Then
  • Makro führt nichts aus: Wenn das Makro nicht funktioniert, überprüfe, ob die Zellen F2 und I4 in jedem Tabellenblatt vorhanden sind und Werte enthalten.


Alternative Methoden

Falls du eine einfachere Variante bevorzugst, kannst du auch den folgenden Code verwenden, wenn du nur den Namen des aktiven Tabellenblattes ändern möchtest:

Sub Name_Tabellenblatt()
    With ActiveSheet
        .[I4] = Right(Left(.[F2], 8), 4) ' macht das selbe wie deine Formel
        .Name = .[I4]
    End With
End Sub

Dieser Code ändert nur den Namen des aktuell aktiven Blattes.


Praktische Beispiele

Hier ist ein Beispiel, wie du den Code anpassen kannst, um den Namen der Tabellenblätter je nach Inhalt von F2 zu ändern:

Sub KST()
    Dim wks As Worksheet
    For Each wks In ActiveWorkbook.Worksheets
        With wks
            .[I4] = Right(Left(.[F2], 8), 4) ' macht das selbe wie deine Formel
            .Name = .[I4]
        End With
    Next
End Sub

Dieser Code wird durch alle Arbeitsblätter in der aktiven Arbeitsmappe iterieren und die Namen entsprechend ändern.


Tipps für Profis

  • Fehlerbehandlung: Füge eine Fehlerbehandlung hinzu, um Laufzeitfehler elegant abzufangen:

    On Error Resume Next
  • Namen validieren: Überprüfe, ob der neue Name für das Tabellenblatt gültig ist (z.B. keine verbotenen Zeichen wie \, /, ?, *, etc.).


FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um andere Zellen zu verwenden?
Ja, du kannst die Zellreferenzen im Code ändern, um andere Zellen zu nutzen.

2. Was sollte ich tun, wenn ich eine große Anzahl an Tabellenblättern habe?
Der Code ist so konzipiert, dass er durch alle Tabellenblätter iteriert, unabhängig von der Anzahl. Achte darauf, dass die Zellen F2 und I4 in jedem Blatt vorhanden sind.

3. Welche Excel-Version benötige ich?
Der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, beginnend mit Excel 2007 bis hin zu den neuesten Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige