「vba 開いているブックのフルパス」
「excel vba 開いているファイルのパス」
といった検索キーワードで、時折アクセスがあります。
「vba 開いているファイルの場所を調べる」
も、同じことを調べていた可能性が高いと考えています。
個々のブックのパスは、拙著『いちばんやさしいExcel VBAの教本』のLesson 75「WorkbooksとWorkbookのプロパティ・メソッドについて学習しましょう」でもご紹介している、WorkbookオブジェクトのPathプロパティで取得できます。
For~Next文で開いているブックのパスを取得するサンプルマクロ
以下のSubプロシージャを実行すると、開いているブックのパスがイミディエイトウィンドウに出力されます。Dim i As Long
For i = 1 To Workbooks.Count
Debug.Print Workbooks(i).Path
Next i
End Sub
上記SubプロシージャのFor~Next文の構造部分
For i = 1 To Workbooks.Count
Next i
は拙著の、Lesson 77「すべてのブックからシートを複製するマクロを理解しましょう」で紹介しているマクロと同じです。Lesson 77の、ブックをアクティブにしてブック名を順番に表示するマクロや、開いている全ブックの全シートをこのブックに複製するマクロと違うのは、
For i = 1 To Workbooks.Count
Next i
の間に書かれているコードだけです。
「vba 開いているブックのフルパス」
「excel vba 開いているファイルのパス」
ということですから、上記プロシージャでは、Workbook.Pathプロパティでパスを取得して、Debug.Printでイミディエイトウィンドウに出力しています。
For i = 1 To Workbooks.Count
Debug.Print Workbooks(i).Path
Next i
For Each~Next文で開いているブックのパスを取得するサンプルマクロ
For Each~Next文でも、開いているブックのパスを取得できます。Dim bk As Workbook
For Each bk In Workbooks
Debug.Print bk.Path
Next bk
End Sub
イミディエイトウィンドウに出力するだけなら、For Each~Next文のほうがFor~Next文よりも若干シンプルになります。
For~Next文で開いているブックのパスを一覧にするするサンプルマクロ
パスを取得するだけでなく、ワークシートに一覧を作成するなら以下のようなSubプロシージャです。
以下のSubプロシージャを実行すると、アクティブシートのA列に、開いているブックのパスが出力されます。Dim i As Long
For i = 1 To Workbooks.Count
Cells(i, "A").Value = Workbooks(i).Path
Next i
End Sub
パスを取得してイミディエイトウィンドウに出力する場合は、For~Next文の中が、
Debug.Print Workbooks(i).Path
でしたけれど、セルに書き出すために、
Cells(i, "A").Value = Workbooks(i).Path
になっています。
For Each~Next文で開いているブックのパスを一覧にするするサンプルマクロ
For Each~Next文を使って開いているブックのパスを一覧にする場合は、以下のようなSubプロシージャです。Dim n As Long
n = 1
Dim bk As Workbook
For Each bk In Workbooks
Cells(n, "A").Value = bk.Path
n = n + 1
Next bk
End Sub
パスを書き出すセルを指定する必要があるので、イミディエイトウィンドウに出力したSubプロシージャよりも行数が増えています。
For~Next文とFor Each~Next文の違いが明確になっていない段階の方の場合、For Each~Next文内の、
n = n + 1
を忘れがちです。
最終更新日時:2018-10-03 13:09
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 開いているブックのパスを取得-Workbook.Pathプロパティ