AccessでVBAによるデータ処理をする機会が増えてくると、任意のファイルのパスを取得したいといったニーズが出てきます。
特にダイアログを開いてユーザーに対象ファイルを選択してもらうプロセスは頻出となりますので、今回はその方法について紹介します。
事前準備
今回の操作では、Microsoft Officeによるファイル操作を行うため、作成したAccessファイルのVBA画面を開き、参照設定においてMicrosoft Office XX.X Object Libraryの設定を行います。設定方法は図1及び図2をご参照ください。
以上で、msoFileDialogFilePickerを使う準備ができましたので、ここからソースコードによる実装方法を紹介します。
ソースコードの追加
ファイル選択をするためにVBAによるソースコードの実装をしていきます。まずは標準モジュールを作成し、その後に「PathSelect」プロシージャを追加します。
そしてプロシージャには次のソースコードを追加します。
Public Sub PathSelect() 'パスを取得するテキストファイルの選択 Dim varSelectedFile As Variant Dim FileSelect As String 'ファイルを選択する場合は、msofiledialogfilepicker 'フォルダーを選択する場合は、msofiledialogfolderpicker With Application.FileDialog(msoFileDialogFilePicker)'ダイアログタイトル名
.Title = "ファイルの選択"
'ファイルの種類を定義します。
.Filters.Add "テキストファイル", "*.txt"
'複数ファイル選択を可能にする場合はTrue、不可の場合はFalse。
.AllowMultiSelect = False
'最初に開くホルダーを当ファイルのフォルダーとします。
.InitialFileName = CurDir
If .Show = -1 Then
'ファイルが選択されれば -1 を返します。
For Each varSelectedFile In .SelectedItems
FileSelect = varSelectedFile
Next
Else
Exit Sub
End If
End With 'イミディエイトウインドウに結果を表示する。 Debug.Print FileSelect End Sub
これで、ファイルパスを取得するソースコードを実装できました。
今回は「FileSelect」変数に結果を格納するようにしており、「Debug.Print」によりVBA画面のイミディエイトウインドウに結果が表示されるようにしました。
任意のテキストファイルを選択してファイルパスが取得できるかを確認してみてください。
なお、本ソースコードでは「Filters.Add」で選択できるファイルを”テキストファイルに限定していますが、例えばExcelファイルを選択する場合は、「”*.txt”」と記載されている箇所を「”.xls,.xlsx”」とすることで、抽出ファイルを変更することができます。これらは拡張子の設定に気を付ければ問題はありません。その他で良く使う拡張子は「”.csv”」等が挙げられます。
試しに、Cドライブ直下に「TEST.txt」ファイルを作成し、当ファイルのパスを取得した結果を図4及び図5に示します。
図5に示すように、「TEST.txt」ファイルのパスがイミディエイトウインドウに表示されました。
まとめ
今回はAccessから任意のファイルパスを取得する方法を紹介しました。ファイルパスを取得できると、ファイルパスを直接入力せずともユーザーのニーズに合わせたファイル選定及び処理を行うことができます。
特に、都度情報が更新されるものに定型フォーマットを用いてファイルが作成される場合、当該ファイルをAccessへデータインポートをするには、ソースコードでファイルパスを決めうちで記載することができないため、処理の都度対象ファイルを選んで処理をすることができる本機能は非常に有効性が高いものとなります。
システム作りは、最初は大変ですが一度仕組みができてしまえばその後の業務効率は飛躍的に向上しますので、是非本機能を活用してより良いワークライフを実現いただければと思います。
スポンサーリンク
コメント