現在開いているブックの一覧を取得するには、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プロパティには拡張子も含まれるからです。