循环(名称)表格

我的问题其实很简单,但我找不到解决办法。 我有很多可以由用户修改不同名字的表单。 我已经为每个表单分配了一个背景名称,所以对于我的前两个表单,我的VBA项目中的名称如下所示:

在这里输入图像说明

事实上,我想要做一个macros来遍历所有那些特定的表格(我有14个),我不想循环使用其他的东西,比如这个:

在这里输入图像说明

使用用户可以修改的名称(我的例子中的“常规”和“遗产”)可以轻松地遍历我的表格。 不过,我希望用户能够随时修改这个名称,如果他这样做了,我的macros将不会识别该表的新名称。 用户不必按下button或使用不同的文本框来重命名表格,这对我来说非常重要,我不想用这种方法来避免这个问题。

我想要的是能够遍历背景名称(在我的例子中的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在我以前的代码不是一个string,所以我不能循环使用“S”和我。 有没有解决我的问题?

您正在使用表单代码名称,所以可以做这样的事情。 顺便说一句,这将匹配S后跟一个数字,这可能或可能不足以满足您的需求。 (顺便说一句,这是'通',而不是'扔')。

 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 

根据我的研究,没有看到基于代码名string参考工作表的方法,但是,您可以从工作表中以stringforms获取代码名称。

 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进行处理。