2017-08-08 111 views
0

我的問題其實很簡單,但我找不到解決方案。 我有很多可以由用戶修改不同名稱的工作表。我給每一個這些紙張的背景名字,所以我的第一個兩片,它們在我的VBA項目的名字是這樣的:循環(名稱)表

enter image description here

事實是,我希望做一個宏遍歷所有那些特定的表(我有他們的14),我不通過,我使用的不同的東西其他的人要循環,像這樣的:

enter image description here

這是很容易使用可以由用戶修改的名稱(在我的示例中爲「常規」和「遺產」)遍歷我的表格。不過,我希望用戶能夠隨時修改該名稱,如果他這麼做,我的宏將不會識別該表的新名稱。對我來說非常重要的是,用戶不必按下按鈕或使用不同的文本框來重命名他的工作表,我不想通過這種方式避免這個問題。

我想要的是能夠遍歷背景名稱(在我的例子中的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。有沒有解決我的問題?

+4

使用工作表對象的CodeName來檢查您給出的名稱:if wksht.CodeName =「S1」then ... end if – Sorceri

+0

Thanks!這確實是我正在尋找的CodeName –

回答

7

您正在使用表單代碼名稱,所以可以這樣做。順便說一句,這將匹配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 
+0

非常感謝!對不起拼寫錯誤.. –

+0

我的榮幸,也沒有必要道歉。 – SJR

+1

@ M.Tailleur:請接受答案。 –

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工作。