簡體   English   中英

循環瀏覽工作表的(名稱)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM