我想查找工作表顯示在工作簿中的順序。例如,假設我有一個以Sheet1,Sheet2和Sheet3爲順序的工作簿。然後用戶將Sheet2拖動到左側,在Sheet1之前。然後我希望Sheet2返回1,Sheet1返回2(並且Sheet3仍然返回3.)獲取VBA中Excel工作表(如顯示)的順序
我已經完成了一些搜索,但找不到在VBA中確定這一點的方法。
我想查找工作表顯示在工作簿中的順序。例如,假設我有一個以Sheet1,Sheet2和Sheet3爲順序的工作簿。然後用戶將Sheet2拖動到左側,在Sheet1之前。然後我希望Sheet2返回1,Sheet1返回2(並且Sheet3仍然返回3.)獲取VBA中Excel工作表(如顯示)的順序
我已經完成了一些搜索,但找不到在VBA中確定這一點的方法。
您可以迭代Workbook
對象的Worksheets
集合。您可以通過運行以下代碼來測試自己,在UI中切換順序,然後再次運行它:
Option Explicit
Sub IterateSheetsByOrder()
Dim intCounter As Integer
Dim wb As Workbook
Set wb = ThisWorkbook
For intCounter = 1 To wb.Worksheets.Count
Debug.Print wb.Worksheets(intCounter).Name
Next intCounter
End Sub
哈!謝謝!實際上,我知道如何遍歷工作表,但出於某種原因,Worksheets集合的順序是基於創建順序,而不是顯示的順序。我一直抱着這種誤解,感到很寂寞。而蒂姆威廉的提法「證明」它確實是顯示的順序。 – HedgePig
@HEdgePig Tim的答案是有效的,只要你不預期用戶可能會改變表格名稱,那麼所有的投注都是關閉的。雖然這兩個都是好的/合理的答案,但我要提醒的是,除非您完全控制工作簿的結構(即它是受保護的結構),否則依靠表名或索引通常是不安全的, 。如果你真的需要VBA來操作特定的表格,你需要用戶輸入和驗證來測試它:) –
您可以使用Sheets對象。在你的例子中,閱讀Sheets(2).Name
應該返回Sheet1
。
要遍歷一個工作簿中使用For Each WS in ThisWorkbook.Worksheets
其中WS
是一個工作表對象的所有工作表。因此,要獲得Excel工作表的順序如圖所示,我們也可以使用下面的代碼:
Sub LoopThroughWorksheets()
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
Debug.Print WS.Name
Next
End Sub
爲了獲得像Worksheets("Sheet1").Index
的輸出,那麼你可以使用這個代碼
Sub IndexWorksheet()
Dim WS As Worksheet, n As Long
For Each WS In ThisWorkbook.Worksheets
n = n + 1
If WS.Name = "Sheet1" Then Debug.Print n
Next
End Sub
**注意:**工作表集合是指工作簿中的所有工作表。它不包括類型圖表,同時圖表集合是指屬於工作簿的所有工作表,包括類型圖表。 –
感謝您的參考。我錯誤地認爲索引是創建順序而不是顯示的順序! – HedgePig