Accessの処理において、「ユーザー指定のフォルダにファイルを出力する」というニーズがあります。
テキストボックスに直接入力やコピペによるフォルダ指定でも実現できますが、少々ユーザビリティが悪いですね。
そこで、ファイルダイアログを開いてフォルダを指定する方法が便利です。
ファイルダイアログを開く画面イメージ

大体こんな感じのフォームをダイアログ形式で表示することが多いです。
出力フォルダのテキストボックスの横にフォルダアイコンがあるボタンを配置します。
ファイルダイアログを開くための事前準備
ダイアログを開くにはFileObjectLibralyを使用します。
VBAからこのライブラリを利用できるように、参照設定を追加する必要があります。
VisualBasic画面の上部メニューのツール → 参照設定 の順で選択します。
「Microsft Office xx.x Object Library」 (xxはバージョン)にチェックを入れます。

この参照設定がなければコンパイルエラーとなります。

ファイルダイアログを開く
以下のコードを標準モジュールに貼り付けます。
'--------------------------------------------------------------------
'フォルダ選択ダイアログ
'---------------------------------------------------------------------
Public Function getFolderName(tmpFilePath As String) As String
Dim intret As Integer
With Application.FileDialog(msoFileDialogFolderPicker)
'ダイアログのタイトルを設定
.Title = "フォルダ選択ダイアログ"
'デフォルトのフォルダパス
.InitialFileName = tmpFilePath
'ダイアログを表示
intret = .Show
If intret <> 0 Then
'フォルダが選択されたとき戻り値に設定
getFolderName = Trim(.SelectedItems.Item(1))
Else
'フォルダが選択されなければ長さゼロの文字列を返す
getFolderName = ""
End If
End With
End Function
後は、先のフォームのフォルダ選択ボタンのクリックイベントでこのモジュールを呼び出すだけです。
この関数の引数はデフォルトのフォルダ名(初期表示させたいフォルダ名)です。
(例)me.txt出力先=getFolderName(“c:\”)
上記の例ではCドライブ直下がデフォルトのパスとしてファイルダイアログが表示されます。

デフォルトのパスを指定しなかった場合(引数が空文字””の場合)、マイドキュメントがデフォルトのパスになります。
フォルダを選択してOKをクリックすると、フォルダ選択ダイアログが閉じられ選択したフォルダがフォームの出力先テキストボックスにセットされます。
尚、キャンセルをクリックした場合は出力先テキストボックスには何もセットされません。
💡 Accessしかできなかった私が年収2倍のPMになった話
キャリアを見直した実体験はこちらの記事で紹介しています
コメント