Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » デスクトップに同じ名前で保存するExcelマクロ

デスクトップに同じ名前で保存するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「2010 vba 同じファイル名でデスクトップに保存する」
「2010 vba 開いているファイルと同じファイル名でデスクトップに保存する」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

現在開いているファイルを、同じ名前でデスクトップに保存するVBA(Visual Basic for Applications)のコード・マクロを探している方による検索です。

どのアプリケーションのマクロを探していたのかまではこの検索ログではわかりませんが、ここではExcelマクロをご紹介しておきます。

[スポンサードリンク]

デスクトップのパスを取得する

まずは、デスクトップのフルパスを取得するExcelマクロをご紹介しておきます。

実は、標準のVBAだけでは、デスクトップのパスを取得することはできません。

デスクトップのフルパスを取得するにはいくつかの方法が考えられますが、WSH(Windows Scripting Host)を利用するのが簡単でしょう。

Sub デスクトップのフルパスを取得する()

 Dim wsh As Object 'IWshRuntimeLibrary.WshShell
 Dim dt_path as String

 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")
 Set wsh = Nothing

 MsgBox dt_path

End Sub

上記のマクロを実行すると、デスクトップのフルパスがメッセージボックスに表示されます。

WshShellオブジェクトをCreateObjectしてから、
 Set wsh = CreateObject("WScript.Shell")

WshShellオブジェクトのSpecialFoldersプロパティでWshCollectionオブジェクトを取得して、

デスクトップに同じ名前で保存するExcelマクロ

そのデフォルトメンバーであるItemメソッドの引数に、

デスクトップに同じ名前で保存するExcelマクロ

「desktop」という文字列を指定することでデスクトップのフルパスを取得できるので、取得した文字列を変数・dt_pathに格納して、
 dt_path = wsh.SpecialFolders("desktop")

その文字列をメッセージボックスに表示しています。
 MsgBox dt_path

Windows Script Host Object Modelを参照設定していれば、

デスクトップに同じ名前で保存するExcelマクロ

以下のようなマクロでもOKです。

Sub デスクトップのフルパスを取得する_参照設定済み()
 Dim wsh As New IWshRuntimeLibrary.WshShell
 Dim dt_path As String
 dt_path = wsh.SpecialFolders("desktop")
 MsgBox dt_path
End Sub

同じ名前でデスクトップに保存するサンプルマクロ

上記のコードを含んだ、以下のようなマクロにすれば、アクティブなブックをデスクトップ上に同じ名前で保存することができます。

Sub アクティブなブックを同じ名前でデスクトップに保存する()

 Dim wsh As Object 'IWshRuntimeLibrary.WshShell
 Dim dt_path As String
 Dim bk_name As String

 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")
 Set wsh = Nothing

 bk_name = ActiveWorkbook.Name

 ActiveWorkbook.SaveAs _
  Filename:=dt_path & "\" & bk_name

End Sub

先の、デスクトップのフルパスを取得するマクロと同じコードで、変数・dt_pathにフルパスを格納してから、
 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")

アクティブなブックの名前を取得して、
 bk_name = ActiveWorkbook.Name

Workbook.SaveAsメソッドの引数・Filenameに、フルパスとブック名を結合した文字列を指定して保存をしています。
 ActiveWorkbook.SaveAs _
  Filename:=dt_path & "\" & bk_name

デスクトップ上に同じ名前のファイルが存在していた場合、上書き保存するかどうかを確認するメッセージが表示されます。このケースは、Workbook.SaveAsメソッドを利用する場合に、とてもよくいただくご質問でもありますので、近日中に別記事として解説させていただきます。

まずは、WSHを使って、VBAでデスクトップのパスを取得する方法をご理解ください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » デスクトップに同じ名前で保存するExcelマクロ

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.