Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenblattnamen in Makros

Tabellenblattnamen in Makros
12.10.2015 09:20:36
MB12
Hallo zusammen,
habe zwei Fragen zu Tabellenblattnamen:
Ich habe allen Sheets einer Datei unterschiedliche Namen gegeben (z.B. "BA" oder "IA" für verschiedene Arbeitsphasen). Wenn ich ins Projekt reingehe, sind diese aber in der Reihenfolge des Anlegens mit "Tabelle 1 (BA)" bis "Tabelle 66 (IA)" aufgeführt.
Wenn ich ein Makro allen Sheets von "Tabelle 7" bis "Tabelle 25" zuordnen will, könnte ich dann so arbeiten:
For i = 7 To 25 Worksheets.Count
With Worksheets(i)
oder müsste ich für die verschiedenen Namen einen Platzhalter einfügen? Geht das überhaupt? Sonst müsste ich vermutlich die einzelnen Blattnamen nacheinander aufführen.
Ein kleines Problem dazu: Sheet 13 soll nicht einbezogen werden. Mir fällt nur ein, dieses Blatt zu kopieren und das Original zu löschen. Dann müsste eigentlich diese Kopie automatisch das Sheet 67 sein. Korrekt?
Vielen Dank für Eure Hilfe.
Margarete

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblattnamen in Makros
12.10.2015 11:45:27
fcs
Hallo Margarete,
du kannst in der Schleife die Namen der Tabellen prüfen und die Tabellen, die nicht bearbeitet werden sollen überspringen.
Gruß
Franz
Sub TabellenBearbeiten()
Dim intSheet As Integer, wks As Worksheet
For intSheet = 7 To ActiveWorkbook.Worksheets.Count
Set wks = ActiveWorkbook.Worksheets(intSheet)
Select Case wks.Name
Case "Tabelle13", "TabelleXXX" 'name(n) ggf anpassen
'Diese Tabellen nicht bearbeiten
Case Else
With wks
'mach was im Tabellenblatt
End With
End Select
Next
End Sub

AW: Tabellenblattnamen in Makros
12.10.2015 12:35:54
MB12
Hi Franz,
danke für die schnelle Lösung. Durch mein rudimentäres VBA-Wissen ist mir einiges trotzdem noch nicht klar. Ich versuche immer, den Grund zu verstehen, damit ich zukünftig ähnliche Aufgaben selbst lösen kann.
1. Heißen meine Tabellenblätter eigentlich immer noch "Tabelle 1" usw. oder aber "Tabelle 1 (BA)" usw oder ist das unwichtig, da der Code einfach mit der 7. Tabelle beginnt? Und hat das mit "intSheet" zu tun?
2. Lassen wir mal das überspringen von Sheet 13 außer acht. Bei meinem Beispiel möchte ich nur die Blätter 7 bis 25 einbeziehen, nicht aber die Blätter ab Blatt 26 bis Blatt 66. Wenn ich deinen Code richtig verstehe, müsste ich mich im Blatt 25 befinden (ActiveWorkbook), um den Code auszuführen. Ist das korrekt?
Danke schön im Voraus
Margarete

Anzeige
AW: Tabellenblattnamen in Makros
12.10.2015 15:38:30
fcs
Hallo Margartete,
1. Heißen meine Tabellenblätter eigentlich immer noch "Tabelle 1" usw. oder aber "Tabelle 1 (BA)" usw oder ist das unwichtig, da der Code einfach mit der 7. Tabelle beginnt? Und hat das mit "intSheet" zu tun?
Deine Blätter heißen wie du es auf den Tabregistern im Excelprorammfenster lesen kannst.
Die index-Zählung beginnt beim linken Tab mit der Nr. 1, dabei werden ausgeblendette Blätter mitgezählt.
"intSheet" ist einfach ein Zähler, der hier in der For-Next-Schleife bei 7 beginnt und beim letzten Blatt endent. Er hat nichts mit den Blattnamen zu tun. Wenn du nur bestimmte Blätter bearbeiten willst, dann kannst du die Namen auch anders prüfen, z.B. ob der Name "(BA)" enthält oder "(IA)"
Intern verwalte Excel die Blätter mit dem sog. Codename.
Wenn du im VBA-Editor den VBA-Projektexplorer anzeigts, dann werden die Blätter in der Reihenfolge der Codenamen gelistet, der Name auf dem Tabregister wird in Klammern angezeigt.
Unter den Eigenschaften der Blätter kannst du den Codenamen -Eigenschaft = (Name)- auch ändern.
2. Lassen wir mal das überspringen von Sheet 13 außer acht. Bei meinem Beispiel möchte ich nur die Blätter 7 bis 25 einbeziehen, nicht aber die Blätter ab Blatt 26 bis Blatt 66. Wenn ich deinen Code richtig verstehe, müsste ich mich im Blatt 25 befinden (ActiveWorkbook), um den Code auszuführen. Ist das korrekt?
Nein. Wenn du die Blätter mit der INDEX-Nr. 7 bis 25 bearbeiten willst, dann muss in der Schleife das Ende des Zählers auf 25 gesetzt werden
For intSheet = 7 to 25
Probiere mal die folgenden Makros. Dann solltes du ein Gefühl bekommen, wie man die Blatt-Bearbeitung steuern kann.
Gruß
Franz
Sub Blattnamen()
Dim intSheet As Integer, wks  As Worksheet
For intSheet = 1 To ActiveWorkbook.Worksheets.Count
Set wks = ActiveWorkbook.Worksheets(intSheet)
If MsgBox("Tabellen-Infos:" & vbLf _
& "Index-Nr: " & intSheet & vbLf _
& "Blattname: " & wks.Name & vbLf _
& "Codename: " & wks.CodeName, _
vbOKCancel, "Anzeige von Information zu Tabellen") = vbCancel Then
Exit Sub
End If
Next
End Sub
Sub Blattnamen2()
Dim intSheet As Integer, wks  As Worksheet
For intSheet = 1 To ActiveWorkbook.Worksheets.Count
Set wks = ActiveWorkbook.Worksheets(intSheet)
If InStr(wks.Name, "(IA)") > 0 Or InStr(wksName, "(BA)") > 0 Then
If MsgBox("Tabellen-Infos:" & vbLf _
& "Index-Nr: " & intSheet & vbLf _
& "Blattname: " & wks.Name & vbLf _
& "Codename: " & wks.CodeName, _
vbOKCancel, "Anzeige von Information zu Tabellen") = vbCancel Then
Exit For
End If
End If
Next
End Sub

Anzeige
AW: Tabellenblattnamen in Makros
12.10.2015 16:22:13
MB12
Hallo Franz und Matthias,
habe heute viel gelernt von tollen Erklärungen und perfekten Lösungen; meine Fragen sind mehr als beantwortet - ganz herzlichen Dank euch beiden!!

AW: Tabellenblattnamen in Makros
12.10.2015 12:24:33
matthias
Hallo Margarete,
For i = 7 To 25
If i = 13 Then GoTo Nächste
With Worksheets(i)
'Deine Aktionen
End With
Nächste:
Next i
Bitte bedenke dass bei "Worksheets(i)" i einen Index darstellt, welcher sich an der Reihenfolge der Sheets orientiert und nicht am Code-Namen. So muss "Tabelle66 (IA)" nicht zwingend das 66. Blatt von links sein. Kommt es also vor, dass deine Reihenfolge der Blätter verschoben werden sollte, so kannst du nicht nach obigem Prinzip vorgehen.
Variante 1 wäre alle Blätter durchzugehen und den Codenamen mit einem in ein Schleife stehenden _ Namen zu vergleichen. Dies ist jedoch der langsamste Weg, gerade bei vielen Blättern, da er für jedes Blatt alle i's durchgeht.

Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
For i = 7 To 25
If i = 13 Then GoTo Nächste
If wks.CodeName = "Tabelle" & i Then
With wks
'Deine Aktionen
End With
Exit For
End If
Nächste:
Next i
Next wks
Wesentlich schneller in der Ausführung wäre da jedoch die Code-Namen alle aufzulisten:
Dim wks As Worksheet
For i = 7 To 25
Select Case i
Case 7: Set wks = Tabelle7
Case 8: Set wks = Tabelle8
Case 9: Set wks = Tabelle9
Case 13: GoTo Nächste
Case 14: Set wks = Tabelle14
Case 25: Set wks = Tabelle25
End Select
With wks
'deine Aktionen
End With
Nächste:
Next i
lg Matthias

Anzeige
AW: Tabellenblattnamen in Makros
12.10.2015 13:29:23
matthias
Ach übrigens kannst du in den Eigenschaften den Code-Namen der Blätter ändern, dazu einfach F4 drücken.
Damit kannst du deine Blätter welche nicht bearbeitet werden sollen anders benennen, Beispielhaft "TB13". Alle anderen lässt du "Tabelle7", "Tabelle8", usw. Dann kannst du für alle Blätter deren Code-Namen mit "Tabelle" beginnen folgendes machen:
For Each wks In Thisworkbook.Worksheets
If wks.Codename = "Tabelle" & * Then
With wks
'deine Aktionen
End With
End If
Next wks

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige