我想查找工作表中显示的工作表顺序。例如,假设我有一个以Sheet1,Sheet2和Sheet3开头的工作簿。然后用户在Sheet1之前将Sheet2拖动到左侧。然后我希望Sheet2返回1,Sheet1返回2(而Sheet3仍然返回3。)
我已经做了一些搜索但是找不到在VBA中确定这个的方法。
答案 0 :(得分:7)
答案 1 :(得分:4)
您可以只迭代Worksheets
对象的Workbook
集合。您可以通过运行以下代码来测试自己,在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
答案 2 :(得分:0)
您可以使用Sheets对象。在您的示例中,阅读Sheets(2).Name
应该返回Sheet1
。
答案 3 :(得分:0)
要遍历工作簿中的所有工作表,请使用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
答案 4 :(得分:0)
Anastasiya-Romanova提供的正确答案,但缺少一些重要细节。
有两种方法可以做到这一点。首先,使用For Each
循环:
Sub ListSheetNames()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Next ws
End Sub
其次,带有一个基本的For
循环:
Sub ListSheetNames
Dim i As Long
For i = 1 to ThisWorkbook.Worksheets.Count
Debug.Print ws.Name
Next i
End Sub
您会发现第二种方法将始终按表 index 的顺序输出名称,这通常是表的创建顺序,除非您更改索引。只需从工作簿窗口重新排列工作表不会更改索引。
因此,第一种方法是正确的方法。它将始终遵循屏幕上显示的选项卡顺序。
答案 5 :(得分:0)
即使重命名工作表或更改其顺序,下面的代码也可以工作。
Sub Display_Sheet_Tab_Number()
Dim WorksheetName As String
Dim n As Integer
WorksheetName = Sheet1.Name
MsgBox Worksheetname
n = Sheets(WorksheetName).Index 'n is index number of the sheet
MsgBox "Index No. = " & n
End Sub