2012-08-27 3 views
2

Мне нужно тянуть позиции из листовых в учебном пособии, зная только его имя - так, например:Получение листа Indice из листа Имени в VBA

, если у нас есть лист, скажет
Workbook.Sheets("Sheet2")

хау Я бы найти соответствующее целое число, так что я мог бы сослаться на него, как: сказать, я это целое
Workbook.Sheets(i)

Мне нужно, чтобы быть в состоянии сделать это обратный indicing поэтому я могу сослаться на листы рядом с лист, на который я ссылаюсь.

Благодарим за помощь.

ответ

4
Workbook.Sheets("sheet name").Index 

Edit: ответ brettdj вдохновил меня, так что я написал эту функцию, которая, вероятно, может быть очищена до Infact думать об этом, если бы я на самом деле буду использовать и поддерживать это, я бы, вероятно, сделать функцию находки листа вместо того, что к югу делает, если вы говорите, верно для 4 параметра:

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) 
1

Если вы хотите обратиться к Next или Previous листу, то вы можете сделать это без увеличения Исходного положения листа

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 
+0

Спасибо за пример. Вы вдохновили меня сделать несколько абсурдное редактирование для моего ответа. –

Смежные вопросы