2016-12-13 6 views
1

Ich habe ein Arbeitsblatt namens "Photo Sheet", das ich in meinen Codes deklarieren möchte.Wie deklariere ich einen Arbeitsblattnamen als Platzhalter?

Const myWorksheet = "Photo Sheet" 

Meine Frage, wenn ich ein anderes Blatt namens „Photo Sheet (2)“ ist es eine Möglichkeit, die Variable als Platzhalter zu erklären, dass jede Folie beginnend mit nehmen würde „Photo Blatt *“?

+0

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. –

+0

behoben ........... – thisguyAgain

Antwort

2

nicht ganz klar, was Sie tun möchten, aber Sie können über die Arbeitsblätter durchlaufen, mit dem Like Betreiber diejenigen auszuwählen, die den entsprechenden Namen haben:

Sub test() 
    Dim ws As Worksheet 
    For Each ws In Worksheets 
     If ws.Name Like "Photo Sheet*" Then Debug.Print ws.Name 
    Next ws 
End Sub 

Dadurch werden die Namen aller Arbeitsblätter drucken das beginnt "Foto-Blatt". Natürlich, anstatt ihre Namen zu drucken, könnten Sie z.B. Legen Sie diese Arbeitsblätter zur weiteren Verarbeitung in eine Sammlung.

+0

Lol - Beat mich um 41 Sekunden. – Comintern

+0

@Comintern in VBA gibt es oft einen ziemlich direkten Weg, um ein gegebenes Problem anzugehen, das bei den meisten erfahrenen VBA-Programmierern fast sofort auftritt. –

+0

Ich muss meine Variable nur auf den Namen des Blattes einstellen, wie "Photo Sheet (2)", wenn sie "Photo Sheet" enthält. Danke – thisguyAgain

0

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 
2

es ist nicht, wenn Sie eine Aktien Operator um es verwenden, aber Sie können etwas ähnliches tun mit Like:

Const SHEET_NAME = "Photo Sheet*" 

Sub WhateverYourThingDoes() 
    Dim ws As Worksheet 
    For Each ws in Worksheets 
     If ws.Name Like SHEET_NAME Then 
      'Your code here. 
     End If 
    Next 
End Sub 
+0

das ist die Schleife fehlt, so 'ws ist nichts' – ThunderFrame

+0

@ThunderFrame - Danke - HTH habe ich das geschafft? Fest. – Comintern

Verwandte Themen