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

时间:2016-12-13 14:59:17

标签: excel vba variables

我有一张名为“Photo Sheet”的工作表,我想在我的代码中声明。

Const myWorksheet = "Photo Sheet"

我的问题,如果我有另一张名为“Photo Sheet(2)”的表格,有没有办法将变量声明为通配符,可以使用以“Photo Sheet *”开头的任何表格?

3 个答案:

答案 0 :(得分:2)

不太清楚你想做什么,但你可以迭代工作表,使用Like运算符选择具有相应名称的运算符:

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

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

答案 1 :(得分:2)

如果您使用权益运算符进行测试,则没有,但您可以使用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

答案 2 :(得分:0)

您无法使用通配符直​​接声明工作表,因此不能使用set shtPhotos = Sheets(Worksheet & "*")。像这样的声明必须是明确的,否则它可能会返回一个集合,而这个集合不能分配给非数组变量。

所以,没有通配符。您可以做的是遍历所有工作表并检查工作表的名称是否包含您要查找的任何文字:

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

这将查看活动工作簿中的每个工作表,并查看其名称是否包含常量中的文本。如果您想对每个开始的工作表执行相同的步骤,这将正常工作&#34; Photo Sheets&#34 ;;如果您只希望它使用一张此类工作表执行这些步骤,则在执行完步骤后添加Exit For

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

您还可以在找到的工作表上查找一个标记,以便只处理在指定单元格中具有今天日期的工作表:

    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