ブックに名前を付けて保存するときはSaveAsメソッドです。たとえば次のコードは、アクティブブックに「Sample1.xls」という名前を付けて保存します。
Sub Sample1() ActiveWorkbook.SaveAs "Sample1.xls" End Sub
このとき、ファイル名が「Sample.xls」のように保存するフォルダのパスを指定していないので、この「Sample.xls」はカレントフォルダに保存されます。
保存するフォルダを特定して保存したいときは、次のようにフォルダのパスを指定します。次のコードは、アクティブブックを「C:\Data」フォルダに「Sample.xls」という名前で保存します。
Sub Sample2() ActiveWorkbook.SaveAs "C:\Data\Sample1.xls" End Sub
ここまでは簡単です。
ではデスクトップやマイドキュメントフォルダに保存したいときはどうしたらいいでしょう。デスクトップフォルダのパスは「C:\Documents and Settings\<ログインユーザー名>\デスクトップ\」ですから、パソコンによって異なります。「C:\Data\Sample1.xls」のように、あらかじめVBAのコードで特定はできません。
そんなときは、WSH(Windows Scripting Host)を使います。次のコードは、アクティブブックを「デスクトップ」フォルダに「Sample.xls」という名前で保存します。
Sub Sample3() Dim Path As String, WSH As Variant Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("Desktop") & "\" ActiveWorkbook.SaveAs Path & "Sample1.xls" Set WSH = Nothing End Sub
もちろん、ブックの保存だけではなく、次のように[ファイルを開く]ダイアログボックスを使うときにも有効です。次のコードは、[ファイルを開く]ダイアログボックスで「マイドキュメント」フォルダを開きます。
Sub Sample4() Dim Path As String, WSH As Variant, OpenFileName As String Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("MyDocuments") & "\" ChDir Path OpenFileName = Application.GetOpenFilename("Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Set WSH = Nothing End Sub