Accessロゴ

AccessのVBAでWizHookオブジェクトを使用して[ファイルを開く]もしくは、[名前をつけて保存]ダイアログボックスを表示する際に選択される初期フォルダを任意のフォルダに指定する方法についての覚書です。

「Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム」で紹介したユーザー定義関数のサンプルプログラムを任意のフォルダを選択させた状態で開くことができるように変更しました。

前述の「Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム」を基にしていますので、よくわからない場合は、まずそちらを参照してください。

また、最後の方にデスクトップフォルダやテンポラリフォルダなど、Windowsの特殊フォルダと呼ばれるフォルダを指定する方法について記述していますので参考にしてください。

以下にそのユーザー定義関数を紹介します。
スポンサードリンク


WizHookオブジェクトを使用した[ファイルを開く]、[名前をつけて保存]ダイアログボックスを表示するサンプルユーザー定義関数

サンプルとして紹介するユーザー定義関数は、引数として[ファイルを開く](True)ダイアログボックスか[名前をつけて保存](False)かを表すBoolean型の引数、ファイルの種類を指定するフィルタ文字列、ダイアログボックスのタイトルを表す文字列、カレントディレクトリを指定する文字列の4つを持ちます。

ユーザー定義関数のサンプルプログラム

以下のサンプルプログラムをVBAの標準モジュールにコピー&ペーストしてください。
Function GetFileName(OpenOrSaveFlg As Boolean, strFilter As String, strTitle As String, strCDir As String) As Variant

Dim returnValue As Integer
Dim strFilePath As String
    If strFilter = "" Then
        strFilter = "全てのファイル (*.*)|*.*"
    End If
    
    WizHook.Key = 51488399 'WIZHOOK有効
    returnValue = WizHook.GetFileName(0, "", strTitle, "", strFilePath, strCDir, strFilter, 0, 0, 0, OpenOrSaveFlg)
    
    WizHook.Key = 0 ' WizHook 無効
    
    GetFileName = Array(returnValue, strFilePath)

End Function

上記ユーザー定義関数を呼び出すサンプルプログラム

以下に上記ユーザー定義関数をプログラム中で呼び出して使用するサンプルプログラムを記述します。

初期フォルダに"C:\"を指定して呼び出す際のプログラムは以下のようになります。
Sub procOpenDialog1()
Dim ReturnArray As Variant

ReturnArray = GetFileName(True, "ログファイル (*.txt,*.csv,*.tab)|*.txt|*.csv|*.tab", "ログファイルを開く", "c:\")
    If ReturnArray(0) = -302 Then
       'キャンセルボタンが押されたときの処理を記述
       MsgBox "キャンセルが押されました。"
    Else
       'ファイルが指定されたときの処理を記述
       MsgBox ReturnArray(1)
    End If

End Sub

[デスクトップ]フォルダや[Windows]フォルダなどの特殊フォルダを初期フォルダにする方法

ちなみに、デスクトップフォルダやテンポラリフォルダなど、Windowsの特殊フォルダを指定したい場合は、少しめんどくさくなります。

ログインしているユーザーごとにパス文字列が異なる[デスクトップ]フォルダや、Windowsセットアップ時に指定するディレクトリ名によってパスが変わってしまうWindowsの特殊([Windows]フォルダや[System32]フォルダなど)フォルダをカレントディレクトリに指定したい場合は、"WScript.Shell"オブジェクトや"FileSystem"オブジェクトを利用します。

これらのオブジェクトを利用して特殊フォルダのパスを取得してからユーザー定義関数を呼び出します。

Windowsの特殊フォルダやWindowsをセットアップしたフォルダ(Windowsフォルダ)、System32フォルダなどの特殊フォルダのパスを取得する詳細については、以下の記事を参考にしてください。

「VBA:デスクトップフォルダやマイドキュメントフォルダなどWindowsの特殊フォルダのパスをVBAで取得する方法」

[デスクトップ]フォルダを初期フォルダを指定するサンプルプログラム

以下のサンプルは、"WScript.Shell"オブジェクトを利用してデスクトップフォルダのパスを取得ユーザー定義関数を呼び出しています。
Sub procOpenDialog2()
Dim wScriptHost As Object, strInitDir As String
Dim ReturnArray As Variant

    'デスクトップフォルダのパスを取得
    Set wScriptHost = CreateObject("WScript.Shell")
    strInitDir = wScriptHost.SpecialFolders("Desktop")
  
    ReturnArray = GetFileName(True, "ログファイル (*.txt,*.csv,*.tab)|*.txt|*.csv|*.tab", "ログファイルを開く", strInitDir)
                    
    If ReturnArray(0) = -302 Then
       'キャンセルボタンが押されたときの処理を記述
        MsgBox "キャンセルが押されました。"
    Else
       'ファイルが指定されたときの処理を記述
        MsgBox ReturnArray(1)
    End If

End Sub

指定できる特殊フォルダと指定する際の文字列一覧

以下は、上記サンプルプログラムの"SpecialFolders"で指定できる各特殊フォルダを表す文字列の一覧です。

デスクトップフォルダ以外の特殊フォルダのパスを取得したい際の参考にしてください。

指定文字列 取得できるフォルダのパス
Desktop デスクトップフォルダ 
Favorites お気に入りフォルダ 
Fonts フォントフォルダ 
MyDocuments マイドキュメントフォルダ 
Programs プログラムフォルダ 
Recent 最近開いたファイルフォルダ 
SendTo 送るフォルダ 
StartMenu スタートアップメニューフォルダ 
StartUp スタートアップフォルダ

AccessのVBAで[ファイルを開く]、[名前をつけて保存]ダイアログボックスを表示する方法についての記事

AccessのVBAで[ファイルを開く]、[名前をつけて保存]ダイアログボックスを開く方法については、結構色々な記事を作ってあるので参考にしてください。


スポンサードリンク

  

関連記事