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