循环遍历工作表的(名称)

Looping through (Name) of Sheets

我的问题其实很简单,但我找不到解决方案。 我有很多不同名称的 sheet 可以由用户修改。我已经为每个 sheet 赋予了背景名称,因此对于我的前两个 sheet,它们在我的 VBA 项目中的名称如下所示:

事实是,我想做一个宏来循环遍历所有那些特定的工作表(我有 14 个),我不想循环遍历我用于不同事物的其他工作表,比如这个:

使用可由用户修改的名称(在我的示例中为 "General" 和 "Heritage")循环遍历我的表格很容易。不过,我希望用户能够随时修改此名称,如果他这样做,我的宏将无法识别 sheet 的新名称。对我来说,用户不必按下按钮或使用不同的文本框来重命名他的 sheet 非常重要,我不想通过这种方式避免问题。

我想要的是能够遍历后台名称(在我的示例中为S1和S2),做类似的事情(我知道下面的代码不好,但它只是为了给你一个例子):

Sub Example1()

Dim wksht As Worksheet

For i = 1 To 14
    Set wksht = "S" & i
    wksht.Cells(1, 1).Value = 1
Next i

End Sub

我知道以下代码适用于 1 sheet:

Sub Example2()

Dim wksht As Worksheet
Set wksht = S1
wksht.Cells(1, 1).Value = 1
Next i

End Sub

问题是我之前代码中的 S1 不是字符串,所以我不能使用 "S" & i 循环。我的问题有解决方案吗?

您正在使用 sheet 代号,因此可以这样做。顺便说一句,这将匹配 S 后跟一个数字,这可能足以满足您的需求,也可能不足以满足您的需求。 (对了,是'through',不是'threw'。)

Sub Example1()

Dim wksht As Worksheet

For Each wksht In Worksheets
    If wksht.CodeName Like "S#" Then
        'do something
    End If
Next wksht

End Sub

根据我的研究,似乎没有一种方法可以根据代号字符串引用 sheet,但是,您可以从 sheet 中获取代号作为字符串。

Sub test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ws_temp As Worksheet
    Dim i As Long

    Set wb = ThisWorkbook
    For i = 1 To 4
        For Each ws_temp In wb.Sheets
            If ws_temp.CodeName = "S" & i Then
                Set ws = ws_temp
            End If
        Next
        Debug.Print ws.Name & " " & ws.CodeName
    Next

End Sub

此代码将按顺序遍历所有 S# sheet,并允许您像 ws 一样处理每一个。