ブックの一覧を取得する


現在開いているブックの一覧を取得するには、Workbooksコレクションのメンバーを調べます。Workbooks コレクションのCountプロパティは、コレクション内に存在するWorkbookオブジェクトの数を返します。

Sub Sample1()
    Dim i As Long, tmp As String
    For i = 1 To Workbooks.Count
        tmp = tmp & Workbooks(i).Name & vbCrLf
    Next i
    MsgBox "現在開いているブックは、" & vbCrLf & tmp & "です"
End Sub

あるいは、For Each Nextステートメントを使って次のようにも書けますね。

Sub Sample2()
    Dim wb As Workbook, tmp As String
    For Each wb In Workbooks
        tmp = tmp & wb.Name & vbCrLf
    Next wb
    MsgBox "現在開いているブックは、" & vbCrLf & tmp & "です"
End Sub

任意のブックが開いているかどうかを調べる

では、現在「Book1.xlsx」を開いているかどうかを調べてみましょう。Sample2をベースにして考えます。For Each Nextステートメント内ではWorkbooksコレクションのメンバーが順番に登場します。そこで、wb.Nameが「Book1.xlsx」かどうかを判定します。

Sub Sample3()
    Dim wb As Workbook, flag As Boolean
    For Each wb In Workbooks
        If wb.Name = "Book1.xlsx" Then
            flag = True
            Exit For
        End If
    Next wb
    If flag = True Then
        MsgBox "Book1.xlsxを開いています"
    Else
        MsgBox "Book1.xlsxは開いていません"
    End If
End Sub

このとき、wb.Name = "Book1"と拡張子を除いて判定すると失敗します。WorkbookオブジェクトのNameプロパティには拡張子も含まれるからです。