如何声明工作表名称为通配符?

我有一个名为“照片”的工作表,我想在我的代码中声明。

Const myWorksheet = "Photo Sheet" 

我的问题,如果我有另一个名为“照片(2)”的表有没有办法将variables声明为通配符,将采取任何表格“照片Sheet *”开始?

不太清楚你想要做什么,但是你可以遍历工作表,使用Like运算符来select具有合适名称的工作表:

 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 

这将打印所有开始“照片”工作表的名称。 当然,而不是打印他们的名字,你可以把这些工作表放在一个集合中进行进一步的处理。

如果您使用股权运营商进行testing,则不存在这种情况,但您可以使用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 

你不能使用通配符来直接声明工作表,所以没有set shtPhotos = Sheets(Worksheet & "*") 。 像这样的声明必须是明确的,否则它可能会返回一个集合,它不能被分配给非数组variables。

所以,没有通配符。 你可以做的是遍历所有的工作表,并检查表单的名称是否包含你正在寻找的任何文本:

 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 

这将查看活动工作簿中的每个工作表,并查看它们的名称是否包含常量中的文本。 如果你想在每个开始“照片表”的工作表执行相同的步骤,这将工作正常; 如果您只希望用一张这样的纸张执行这些步骤,则在执行以下步骤之后,您需要添加一个“ Exit For

  For Each shtPhotos In ActiveWorkbook.Sheets If InStr(1, shtPhotos.Name, csSheet) <> 0 Then 'do something Exit For End If Next shtPhotos 

您也可以在find的工作表上查找标记,以便只处理具有指定单元格中当天date的工作表:

  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