« ワークブックをアクティブにする | トップページ | ページ設定の自動化 »

2020年3月27日 (金)

ワークブックのパスを取得する

パスとは、
ブックが保存されているフォルダの場所のことです。

例えば、

C:\Users\Username\Documents\

のようなものです。

アクティブブックのパスは
次のコードで取得できます。

ActiveWorkbook.Path

A1セルにパスの値を入れるには
次のコードのようにします。

アクティブブックのパスを取得するコード:

Sub macro20200327a()
'アクティブブックのパスを取得

    Sheets.Add 'シート追加
    Cells(1, 1) = ActiveWorkbook.Path
   
End Sub

実行結果一例:
Vba20200327a
シートが追加され、
アクティブブックのパスが入力されました。

 

開いているすべてのブックのパスを取得したい場合は、
For Each文を使って
Workbookオブジェクトに格納されているすべてのブックに対して
パスを取得していきます。

Workbookオブジェクトには
開いているすべてのブックが格納されています。

開いているすべてのブックのパスを取得するコード:

Sub macro20200327b()
'開いているすべてのブックのパスを取得

    Dim wb As Workbook
    Dim count As Integer
   
    Sheets.Add
    Cells(1, 1) = "No."
    Cells(1, 2) = "ファイル名"
    Cells(1, 3) = "パス"
   
    count = 0
    For Each wb In Workbooks
        count = count + 1
        Cells(count + 1, 1) = count
        Cells(count + 1, 2) = wb.Name
        Cells(count + 1, 3) = wb.Path
    Next wb
   
    Cells.EntireRow.AutoFit
    Cells.EntireColumn.AutoFit
   
End Sub

実行結果一例:
Vba20200327b

 

次は取得したパスを使って
アクティブブックと同じフォルダに
アクティブブックの複製を保存するコードを作成してみます。

変数wb_pathにアクティブブックのパスを入れます。
複製として保存するブック名は変数wb_nameです。
アクティブブックの名前+日時を
複製するブックの名前にします。

SaveCopyAsメソッドで
アクティブブックの複製を名前を付けて保存します。
このときActiveWorkbook自体は保存や変更はされません。

アクティブブックの複製を保存するコード:

Sub macro20200327c()
'アクティブブックの複製を保存

    Dim wb_path As String 'アクティブブックのパス
    Dim ab_name As String 'アクティブブック名
    Dim wb_name As String '複製されたブック名
   
    wb_path = ActiveWorkbook.Path
    ab_name = ActiveWorkbook.Name
    wb_name = Left(ab_name, InStr(ab_name, ".") - 1) _
        & "_" & Format(Now(), "yyyymmdd_hhmmss") _
        & ".xlsx"
   
    ActiveWorkbook.SaveCopyAs wb_path & "\" & wb_name

End Sub

実行結果は
アクティブブックが保存されているフォルダに
次のようなブックが保存されていることを確認してください。
ファイル名(一例):アクティブブック名_20200327_2142.xlsx

 

|

« ワークブックをアクティブにする | トップページ | ページ設定の自動化 »

コメント

この記事へのコメントは終了しました。