Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]を表示する際に初期フォルダを指定するサンプルプログラム

Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]を表示する際に初期フォルダを指定するサンプルプログラム

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

スポンサーリンク

記事の概要

以前作成した以下の記事を任意のフォルダを選択させた状態で開くことができるように改版したサンプルプログラムです。

こちらの記事を読んでからのほうが理解が深まると思います。

Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム
AccessのVBAで"WizHook"オブジェクトを使用して、ダイアログボックスを表示する方法について覚書。

また記事の最後にデスクトップフォルダやテンポラリフォルダなど、Windowsの特殊フォルダをデフォルトフォルダに指定するサンプルプログラムも紹介しています。

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

サンプルとして紹介するユーザー定義関数は、以下の4つの引数を持ちます。

  1. [ファイルを開く](True)ダイアログボックスか[名前をつけて保存](False)かを表すBoolean型の引数
  2. ファイルの種類を指定するフィルタ文字列
  3. ダイアログボックスのタイトルを表す文字列
  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で取得するサンプルプログラム
マイドキュメントフォルダやデスクトップフォルダなどログインユーザーによってパスが変わるフォルダやWindowsがセットアップ時に作成するSystemフォルダなどの特殊なフォルダのパスを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で[ファイルを開く]、[名前をつけて保存]ダイアログボックスを開く方法については、結構色々な記事を作ってあるので参考にしてください。

Access VBA:WizHookオブジェクトを使用して[ファイルを開く]、[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム
AccessのVBAで"WizHook"オブジェクトを使用して、ダイアログボックスを表示する方法について覚書。
VBA:FileDialogオブジェクトを利用した各種ダイアログボックスを表示する際のまとめ
AccessのFileDialogオブジェクトを使用したダイアログボックス、ダイアログボックス、ダイアログボックスの各種ダイアログボックスを表示して使用する際のまとめ。
Access VBA:FileDialogオブジェクトを使用してフォルダのみ選択できるフォルダ選択ダイアログボックスを表示するサンプルプログラム
AccessのFileDialogオブジェクトを使用してフォルダのみ選択するダイアログボックスを表示するサンプルプログラムを覚書。例えば、このフォルダに保存されている全てのcsvファイルを読み込ませて、それぞれのファイルに何か処理をするみた...
VBA:AccessのFileDialogを使用して[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム
Accessの「FileDialog」オブジェクトを使用してダイアログボックスを表示するVBAのサンプルプログラムを覚書。AccessのVBAでFileDialogオブジェクトを使用する際には、オブジェクトライブラリの参照設定が必要となりま...
VBA:AccessのFileDialogで[ファイルを開く]ダイアログボックスを表示し、複数のファイルを選択できるようにするサンプルプログラム
AccessのFileDialogオブジェクトを使用して複数のファイルを選択できるダイアログボックスを表示して利用する方法について覚書します。
VBA:AccessのFileDialogを使用して[ファイルを開く]ダイアログボックスを表示するサンプルプログラム
今回はAccessの"FileDialog"オブジェクトを使用してダイアログボックスを表示させて利用するサンプルプログラムを覚書。
Access VBA:TransferTextを使用せずにVBAでCSVなどの区切り記号つきテキストファイルを既存のテーブルにインポートするサンプルプログラム
AccessのVBAでCSVファイルなどの区切り記号付きテキストファイルをインポートするサンプルプログラムを覚書。[ファイルを開く]ダイアログボックスの表示と組み合わせたサンプルプログラムも作成しておいた。

コメント

タイトルとURLをコピーしました