2

名前だけを知っているワークブック内のシートの位置をプルする必要があります。たとえば、次のようになります。

シートがある場合は、
Workbook.Sheets("Sheet2")

次のように参照できるように、対応する整数を見つけるにはどうすればよいでしょうか: i が整数であるとします。
Workbook.Sheets(i)

参照しているシートの次のシートを参照できるように、この逆インデックスを実行できる必要があります。

ご協力ありがとうございました。

4

2 に答える 2

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

編集: brettdjの答えは私にインスピレーションを与えたので、実際に考えてクリーンアップできるこの関数を書きました。 4 番目のパラメーターは 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)
于 2012-08-27T17:10:39.897 に答える
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
于 2012-08-28T01:35:35.793 に答える