wie kann ich in einer Datei per VBA alle Blätter markieren, deren Name mit einem "a" oder einem "b" endet?
Micha
Sub mark()
Dim Sheet As Worksheet
Dim Arr() As String
ReDim Preserve Arr(1 To ActiveWorkbook.Sheets.Count)
i = 0
For Each Sheet In ActiveWorkbook.Sheets
If Right(Sheet.Name, 1) = "a" Or Right(Sheet.Name, 1) = "b" Then
i = i + 1
Arr(i) = Sheet.Name
End If
Next Sheet
If i > 0 Then Sheets(Arr).Select
End Sub
viele Grüße. HeideSub mark()
Dim Sheet As Worksheet
Dim Arr() As String
Dim i As Long
ReDim Arr(1 To ActiveWorkbook.Sheets.Count)
i = 0
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name Like "*[ab]" Then
i = i + 1
Arr(i) = Sheet.Name
End If
Next Sheet
ReDim Preserve Arr(1 To i)
If i > 0 Then Sheets(Arr).Select
End Sub
Gruss, Jogy
Sub mark()
Dim Sheet As Worksheet
Dim Arr() As String
Dim i As Long
ReDim Arr(1 To ActiveWorkbook.Sheets.Count)
i = 0
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name Like "*[ab]" Then
i = i + 1
Arr(i) = Sheet.Name
End If
Next Sheet
If i > 0 Then
ReDim Preserve Arr(1 To i)
Sheets(Arr).Select
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Sub mark2()
Dim wks As Worksheet, aStr() As String, lngN As Long
ReDim aStr(1 To ActiveWorkbook.Sheets.Count)
For Each wks In ActiveWorkbook.Sheets
If wks.Name Like "*[ab]" Then
lngN = lngN + 1
aStr(lngN) = wks.Name
End If
Next wks
If lngN > 0 Then
ReDim Preserve aStr(1 To lngN)
Sheets(aStr).Select
End If
End Sub
Sub mark3()
Dim wks As Worksheet, aLng() As Long, lngN As Long
ReDim aLng(1 To ActiveWorkbook.Sheets.Count)
For Each wks In ActiveWorkbook.Sheets
If wks.Name Like "*[ab]" Then
lngN = lngN + 1
aLng(lngN) = wks.Index
End If
Next wks
If lngN > 0 Then
ReDim Preserve aLng(1 To lngN)
Sheets(aLng).Select
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Sub mark4()
Dim wks As Worksheet, aLng() As Long, lngN As Long
ReDim aLng(1 To ActiveWorkbook.Worksheets.Count)
For Each wks In ActiveWorkbook.Worksheets
If wks.Name Like "*[ab]" Then
lngN = lngN + 1
aLng(lngN) = wks.Index
End If
Next wks
If lngN > 0 Then
ReDim Preserve aLng(1 To lngN)
Worksheets(aLng).Select
End If
End Sub
Sub mark4()
Dim wks As Object, aLng() As Long, lngN As Long
ReDim aLng(1 To ActiveWorkbook.Sheets.Count)
For Each wks In ActiveWorkbook.Sheets
If wks.Name Like "*[ab]" Then
lngN = lngN + 1
aLng(lngN) = wks.Index
End If
Next wks
If lngN > 0 Then
ReDim Preserve aLng(1 To lngN)
Sheets(aLng).Select
End If
End Sub
@Heide: Fehler macht jeder mal! Ist doch nicht schlimm.Sub TabSelektiern()
Dim sh As Worksheet
Dim i As Long
For i = -1 To 0
For Each sh In ActiveWorkbook.Worksheets
If sh.Name Like "*[ab]" Then sh.Select i
Next
Next
End Sub
Gruß, Daniel
Sub TabSelektiern()
Dim sh As Worksheet, blnR As Boolean
blnR = True ' alte Selektion entfernen
For Each sh In ActiveWorkbook.Worksheets
If sh.Name Like "*[ab]" Then
sh.Select blnR
blnR = False ' alte Selektion nicht entfernen
End If
Next sh
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-LintfortSub TabSelektiern()
Dim sh As Worksheet
Dim i As Boolean
i = True
For Each sh In ActiveWorkbook.Worksheets
If sh.Name Like "*[ab]" Then
sh.Select i
i = False
End if
Next
End Sub
Gruß, DanielUm in Excel alle Blätter mit Namen, die auf "a" oder "b" enden, zu markieren, kannst Du den folgenden VBA-Code verwenden:
Sub mark()
Dim Sheet As Worksheet
Dim Arr() As String
Dim i As Long
ReDim Arr(1 To ActiveWorkbook.Sheets.Count)
i = 0
For Each Sheet In ActiveWorkbook.Sheets
If Sheet.Name Like "*[ab]" Then
i = i + 1
Arr(i) = Sheet.Name
End If
Next Sheet
If i > 0 Then
ReDim Preserve Arr(1 To i)
Sheets(Arr).Select
End If
End Sub
ALT + F11
, um den VBA-Editor zu öffnen.Einfügen > Modul
).ALT + F8
, um das Makro auszuführen.Fehlende Deklaration von Variablen
Stelle sicher, dass alle Variablen korrekt deklariert sind. Zum Beispiel: Dim i As Long
sollte vor der Verwendung stehen.
Leere Elemente im Array
Wenn Du leere Elemente im Array hast, kann die Selektierung fehlschlagen. Verwende ReDim Preserve
, um das Array anzupassen, nachdem Du die Blätter gezählt hast.
Falscher Objekttyp
Wenn Du auch andere Arten von Blättern (z.B. Diagrammblätter) berücksichtigen möchtest, ändere Dim Sheet As Worksheet
in Dim Sheet As Object
.
Eine alternative Methode kann die Verwendung einer zweiten Schleife sein:
Sub TabSelektiern()
Dim sh As Worksheet
Dim blnR As Boolean
blnR = True ' alte Selektion entfernen
For Each sh In ActiveWorkbook.Worksheets
If sh.Name Like "*[ab]" Then
sh.Select blnR
blnR = False ' alte Selektion nicht entfernen
End If
Next sh
End Sub
Diese Methode sorgt dafür, dass nur die gewünschten Blätter markiert werden, indem die Selektion effizient verwaltet wird.
Hier sind einige praktische Beispiele, die Du ausprobieren kannst:
Markieren von Blättern, die mit "c" oder "d" enden: Ändere einfach die Bedingung im Code:
If Sheet.Name Like "*[cd]" Then
Markieren aller Blätter in einer bestimmten Arbeitsmappe: Wenn Du nur in einer bestimmten Arbeitsmappe arbeiten möchtest, könntest Du den Namen der Arbeitsmappe angeben.
Option Explicit
am Anfang Deines Modul-Codes, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler frühzeitig zu erkennen.ActiveWorkbook.Worksheets.Count
, um die Anzahl der Arbeitsblätter zu ermitteln, die Du bearbeiten möchtest.1. Wie kann ich den Code anpassen, um nur Tabellenblätter zu markieren?
Du kannst die Deklaration von Dim Sheet As Worksheet
beibehalten und sicherstellen, dass Du nur mit Worksheets
arbeitest.
2. Was passiert, wenn kein Blatt die Bedingung erfüllt?
In diesem Fall wird der Selektionsbefehl einfach übersprungen und es passiert nichts.
3. Kann ich das Makro für andere Bedingungen verwenden?
Ja, ändere einfach die If
-Bedingung im Code, um andere Endungen oder Muster zu verwenden.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen