即効テクニック

ファイル操作関連のテクニック

特殊フォルダを取得する

(Excel 97/2000/2002/2003/2007)
ブックに名前を付けて保存するときは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
WSHのSpecialFoldersプロパティでは、次のようなフォルダを取得できます。 フォルダ :引数 すべてのユーザーに共通のデスクトップ: AllUsersDesktop すべてのユーザーに共通のプログラムメニュー:AllUsersPrograms すべてのユーザーに共通のスタートアップ: AllUsersStartup ログインユーザーのデスクトップ :Desktop ログインユーザーのプログラムメニュー: Programs ログインユーザーのスタートアップ :Startup お気に入り :Favorites フォント :Fonts マイドキュメント: MyDocuments 最近使ったファイル: Recent 送る: SendTo スタートメニュー: StartMenu 新規作成のテンプレート: Templates アプリ用のデータ :AppData