循环遍历工作表的(名称)
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 一样处理每一个。
我的问题其实很简单,但我找不到解决方案。 我有很多不同名称的 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 一样处理每一个。