在VBA中,我知道它能夠循環通過工作表所示:(VBA)循環通過片代號
for i = 1 to 5
msgbox worksheets(i).cells(1,1)
next
在工作簿(從左至右按順序)其中拉動第一5張。我怎樣才能參考工作表的代號呢?因爲在工作簿中的第一張工作表中可能是Sheet10,第二張Sheet6等等......所以如果我試圖循環使用sheet#s(codenames),那可能嗎?
在VBA中,我知道它能夠循環通過工作表所示:(VBA)循環通過片代號
for i = 1 to 5
msgbox worksheets(i).cells(1,1)
next
在工作簿(從左至右按順序)其中拉動第一5張。我怎樣才能參考工作表的代號呢?因爲在工作簿中的第一張工作表中可能是Sheet10,第二張Sheet6等等......所以如果我試圖循環使用sheet#s(codenames),那可能嗎?
您可以創建的工作表自己的收藏,您可以通過代號爲指數。這個函數是:
Function SheetsByCodeName() As Collection
Dim sh As Worksheet
Set SheetsByCodeName = New Collection
For Each sh In ThisWorkbook.Worksheets
SheetsByCodeName.Add sh, sh.CodeName
Next
End Function
,然後你可以使用你的索引,就像這樣:
dim sheetsByCN as Object: Set sheetsByCN = SheetsByCodeName
dim cn
For each cn in Array("Sheet10","Sheet11","Sheet22","Sheet5","Sheet1")
debug.print sheetsByCN(cn).Cells(1,1).value
Next
感謝您的回覆。創建集合的原因是codeName的屬性而不是對象? – lostinOracle
@ excelmonkey93'codeName'是string類型的屬性。要使用它進行索引,我們需要的是創建我們自己的集合並將其用作關鍵字。 「Worksheets」集合已經做了相同的處理,但是名稱而不是代碼名稱,這就是爲什麼我們需要做類似的事情。 –
明白了。真的很感謝解釋。 – lostinOracle
如果叫Sht1,Sht2牀單,,, Sht5 然後
for i = 1 to 5
msgbox worksheets("Sht" & i).cells(1,1)
next
我正在尋找迭代通過表代碼名稱,而不是工作表名稱。 – lostinOracle
的是代號爲沒有索引,所以你必須通過自己的牀單循環。 一個非常基本的例子是這樣的:
Public Sub FindSheets()
Dim i As Integer
Dim objSheet As Worksheet
For i = 1 To 5
Set objSheet = FindSheetByName("Sheet" & i)
If objSheet Is Nothing Then
MsgBox "No sheet with codename Sheet" & i
Else
MsgBox objSheet.Name & " has codename " & objSheet.CodeName
End If
Next
End Sub
Function FindSheetByName(ByVal v_strCodeName As String) As Worksheet
Dim objSheet As Worksheet
Set FindSheetByName = Nothing
For Each objSheet In ActiveWorkbook.Sheets
If objSheet.CodeName = v_strCodeName Then
Set FindSheetByName = objSheet
Exit Function
End If
Next
End Function
不,這不可能通過自己的代號指數表。
您可以循環中的所有表和檢查他們的代號,或使用一個單獨的方法:
Sub processSheet(ws As Worksheet)
Debug.Print ws.Cells(1)
End Sub
Sub process()
processSheet(Sheet10)
processSheet(Sheet11)
processSheet(Sheet12)
End Sub
另一種方法是(未測試):
For Each ws In Array(Sheet10, Sheet11, Sheet12)
Debug.Print ws.Cells(1)
Next
問題的答案取決於你的最終目標。如果要在工作表中啓動特定的VBA方法,則會有答案,但是如果您只想根據其代碼名稱的順序在表單上迭代,則會有不同的答案。哦,順便說一下,名稱不同於代碼名稱與索引不同。這些完全相互獨立。 –
@ A.S.H道歉,我編輯了我的問題。我希望遍歷代碼名稱。例如,對於具有30多張工作表的工作簿,我試圖循環訪問代碼名稱10-15 – lostinOracle
只需確保* name *或* codeName *?前者是您在Excel中的標籤欄中看到的內容。後者是VBA編輯器中相應模塊的名稱。 –