[英]Looping through (Name) of Sheets
我的問題實際上很簡單,但找不到解決方案。 我有很多名稱不同的工作表,用戶可以修改。 我為每個工作表指定了背景名稱,因此對於我的前兩張工作表,它們在我的VBA項目中的名稱如下所示:
事實是,我想做一個宏來遍歷所有這些特定的工作表(我有14個),而我不想遍歷我用於不同事物的其他工作表,例如:
使用用戶可以修改的名稱(在我的示例中為“ General”和“ 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”和i循環。 我的問題有解決方案嗎?
您正在使用工作表代碼名稱,因此可以執行以下操作。 順便說一句,這將與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
根據我的研究,似乎沒有一種方法可以根據工作表的代號字符串來引用工作表,但是,您可以從工作表中獲取代號作為字符串。
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的方式處理每個工作表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.