特殊フォルダを取得する


ブックに名前を付けて保存するときは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