在VBA中从工作表名称获取工作表

我只需要在工作簿中拉一张工作表的位置,只知道它的名字 – 例如:

如果我们有一张纸,说
Workbook.Sheets("Sheet2")

我怎么会find相应的整数,以便我可以把它称为:说我是一个整数
Workbook.Sheets(i)

我需要能够做到这一点相反的迹象,所以我可以参考我参考的工作表旁边的工作表。

感谢您的帮助。

 Workbook.Sheets("sheet name").Index 

编辑: brettdj的答案启发了我,所以我写了这个function,可能可以清理干净的事实上想着它,如果我真的要使用和支持,我可能会做一个查找表函数,而不是如果你说sub对于第四个参数为true:

 Function adjacentsheet(Optional ws As Worksheet, Optional wsName As String, Optional nextSheet As Boolean = True, Optional search As Boolean = False) As Worksheet 'Expects worksheet or worksheet.name if blank, uses activesheet. 'Third parameter indicates if the next sheet or previous sheet is wanted, default is next = true 'Indicates adjacent sheet based on worksheet provided. 'If worksheet is not provided, uses worksheet.name. 'If no worksheet matches corresponding name, checks other workbooks if 4th parameter is true 'If no worksheet can be found, alerts the user. 'Returns found worksheet based upon criteria. If (ws Is Nothing) Then If wsName = "" Then Set adjacentsheet = adjacentsheet(ActiveSheet, , nextSheet) Else 'Check all workbooks for the wsName, starting with activeWorkbook On Error Resume Next Set ws = Sheets(wsName) On Error GoTo 0 If (ws Is Nothing) Then If search = True Then If Workbooks.Count = 1 Then GoTo notFound Else Dim wb As Workbook For Each wb In Application.Workbooks On Error Resume Next Set ws = wb.Sheets(wsName) On Error GoTo 0 If Not (ws Is Nothing) Then Set adjacentsheet = adjacentsheet(ws, , nextSheet) Exit For End If Next If (ws Is Nothing) Then GoTo notFound End If Else GoTo notFound End If Else Set adjacentsheet = adjacentsheet(ws, , nextSheet, search) End If End If Else With ws.Parent If nextSheet Then If ws.Index = .Sheets.Count Then Set adjacentsheet = .Sheets(1) Else Set adjacentsheet = .Sheets(ws.Index + 1) End If Else If ws.Index = 1 Then Set adjacentsheet = .Sheets(.Sheets.Count) Else Set adjacentsheet = .Sheets(ws.Index - 1) End If End If End With End If Exit Function notFound: MsgBox "Worksheet name could not be found!", vbCritical, "Invalid worksheet name." End Function 

以下是一些用法示例:“用法示例

 Dim nextws As Worksheet 'returns sheet before the active sheet Set nextws = adjacentsheet(, , False) 'returns sheet after the active sehet Set nextws = adjacentsheet() 'returns sheet after sheet named "Test" in current workbook Set nextws = adjacentsheet(, "Test") 'returns sheet after sheet named "Test" in any open workbook checking current workbook first Set nextws = adjacentsheet(, "Test", , True) 

如果您想参考NextPrevious一张纸张,则可以在不增加起始纸张位置的情况下执行此操作

 Sub Test() If Sheets.Count > ActiveSheet.Index Then Debug.Print "next method: " & ActiveSheet.Next.Name Debug.Print "index method: " & Sheets(ActiveSheet.Index + 1).Name Else Debug.Print "Active Sheet is the last sheet" End If End Sub