在VBA中获取Excel工作表(如显示)的顺序

时间:2016-08-30 02:03:29

标签: vba excel-vba excel

我想查找工作表中显示的工作表顺序。例如,假设我有一个以Sheet1,Sheet2和Sheet3开头的工作簿。然后用户在Sheet1之前将Sheet2拖动到左侧。然后我希望Sheet2返回1,Sheet1返回2(而Sheet3仍然返回3。)

我已经做了一些搜索但是找不到在VBA中确定这个的方法。

6 个答案:

答案 0 :(得分:7)

这应该这样做:

Worksheets("Sheet1").Index

https://msdn.microsoft.com/en-us/library/office/ff836415.aspx

答案 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