Sie können einen Platzhalter nicht verwenden, um ein Arbeitsblatt direkt zu deklarieren, also keine set shtPhotos = Sheets(Worksheet & "*")
. Eine solche Deklaration muss eindeutig sein oder möglicherweise eine Sammlung zurückgeben, die keiner Nicht-Array-Variablen zugewiesen werden kann.
Also keine Wildcards. Was können Sie tun, ist eine Schleife durch alle Arbeitsblätter und prüfen, ob der Name des Blattes enthält, was Text Sie suchen:
Sub FindPhotos()
Const csSheet As String = "Photo Sheet"
Dim shtPhotos As Worksheet
For Each shtPhotos In ActiveWorkbook.Sheets
If InStr(1, shtPhotos.Name, csSheet) <> 0 Then
'do something
End If
Next shtPhotos
End Sub
Dieses in jedem Arbeitsblatt in der aktiven Arbeitsmappe aussehen wird und sehen, ob ihr Name enthält der Text in der Konstante. Dies funktioniert gut, wenn Sie dieselben Schritte mit jedem Arbeitsblatt ausführen möchten, das "Photo Sheets" startet; wenn Sie es wollen, dass diese Schritte mit einem solchen Blatt führen, würden Sie ein Exit For
nach der Durchführung Ihrer Schritte hinzufügen:
For Each shtPhotos In ActiveWorkbook.Sheets
If InStr(1, shtPhotos.Name, csSheet) <> 0 Then
'do something
Exit For
End If
Next shtPhotos
Sie auch für eine Flagge auf den Blättern aussehen könnte, die gefunden werden, so dass nur Blätter dass, sagen wir, das heutige Datum in einer bestimmten Zelle würde verarbeitet werden:
For Each shtPhotos In ActiveWorkbook.Sheets
If InStr(1, shtPhotos.Name, csSheet) <> 0 AND _
shtphotos.range("A1").value = Date Then
'do something
End If
Next shtPhotos
FWIW Die Kennung "Worksheet" bezieht sich normalerweise auf den Typ "Excel.Worksheet". Wenn Sie eine Konstante mit diesem Bezeichner deklarieren, "verstecken" Sie möglicherweise den Typ "Excel.Worksheet" und verwechseln den Reader oder VBA selbst. –
behoben ........... – thisguyAgain