循环(姓名)表格

时间:2017-08-08 15:51:17

标签: excel vba excel-vba spreadsheet

我的问题其实很简单,但我无法找到解决方案。 我有很多具有不同名称的表格,可由用户修改。我已经为这些工作表中的每个工作表添加了一个背景名称,因此对于我的前两张工作表,我在VBA项目中的名称如下所示:

enter image description here

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

enter image description here

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

我想要的是能够遍历背景名称(在我的示例中为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张纸:

Sub Example2()

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

End Sub

问题是我以前的代码中的S1不是一个字符串,所以我不能使用" S" &安培;一世。我的问题有解决方案吗?

2 个答案:

答案 0 :(得分:8)

您正在使用工作表代码名称,因此可以执行此类操作。顺便说一句,这将匹配S后跟一个数字,这可能或可能不足以满足您的需求。 (顺便说一下,它是'通过',而不是'扔'。)

{{1}}

答案 1 :(得分:0)

根据我的研究,似乎没有办法根据代号字符串引用工作表,但是,您可以从工作表中将代号作为字符串。

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#表,并允许您以ws的形式处理每个S#。