開いているブックの一覧の取得

上記で、自分のブックの判断方法は理解できたと思います
では、今度は、自ブック以外に開いているワークブックの一覧を取得してみます。

ワークブックの一覧は、Workbooksコレクションオブジェクトから取得します。
複数のワークブックを開いた状態で、下記のマクロを動かしてみて下さい。


'***************************************************************************************************
'   開いているブックの一覧取得サンプル                              Module1(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'* 処理名 :TEST2
'* 機能  :開いているブックの一覧取得
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub TEST2()
    Dim objWbk As Workbook                                          ' 各ブック
    Dim objSh As Worksheet                                          ' 各シート
    Dim objShOwn As Worksheet                                       ' 本ブックのシート
    Dim strOwnBook As String                                        ' 自ブック名
    Dim lngRow As Long                                              ' 行
    Dim lngCol As Long                                              ' カラム
    Set objWbk = ThisWorkbook
    strOwnBook = objWbk.Name
    Set objShOwn = objWbk.Worksheets(1)
    ' 1つのブックしか開いていない
    If Workbooks.Count <= 1 Then
        MsgBox "2つ以上のブックを開いてから起動させて下さい。", vbExclamation
        Exit Sub
    End If
    objShOwn.Cells(1, 1).Value = "ブック名"
    objShOwn.Cells(1, 2).Value = "シート名→"
    lngRow = 1
    ' 開いているブックの一覧を取得
    For Each objWbk In Workbooks
        ' 自ブック以外を対象とする
        If objWbk.Name <> strOwnBook Then
            ' ブック名のセット
            lngRow = lngRow + 1
            objShOwn.Cells(lngRow, 1).Value = objWbk.Name
            ' シートの一覧を取得
            lngCol = 1
            For Each objSh In objWbk.Worksheets
                ' シート名のセット
                lngCol = lngCol + 1
                objShOwn.Cells(lngRow, lngCol).Value = objSh.Name
            Next objSh
        End If
    Next objWbk
    ' 自ブックをアクティブに
    ThisWorkbook.Activate
End Sub

'----------------------------------------<< End of Source >>----------------------------------------
※ブック内のシートの一覧も取得しています。合わせて参考にして下さい。

動作させると、このような結果になります。

※列幅は、適当に修正しました。


※本ブックのみを開いた状態でマクロを起動すると、一覧に表示させるものがないため、このようにエラーになるようにしています。