PR

Access VBA フォルダが存在するか調べる方法

VBA

Accessに蓄積したデータを出力する際に、決まったルールで作成されたフォルダにファイルをエクスポートするため、まずは該当するフォルダが存在するかを調べて、その後に処理をする必要があります。

そこで、今回はAccess VBAを用いて所定のフォルダが存在するかを調べる方法を紹介します。

なお、AccessからExcelファイルへデータをエクスポートする方法については以下の記事をご参考にしてください。

スポンサーリンク

FolderExistsメソッドについて

FolderExistsメソッドの基本構文は次のように表します。

object.FolderExists (folderspec)
object: 必須で、常にFileSystemObjectを指定する。
folderspec: 存在するかどうかを調べるフォルダーの名前を必ず指定する。フォルダーが現在のフォルダーにないと予想される場合は、完全なパス (絶対パスまたは相対パス) を指定する必要がある。

ここで、FileSystemObjectとは、コンピュータのファイルシステムへのアクセスを提供するオブジェクトです。

FolderExistsメソッドは、引数として指定した「folderspec」が存在した場合はTrueを、存在しなければFalseを返します。

対象フォルダを相対パスで指定する場合、カレントフォルダは「.」を用いて表現し、カレントフォルダの一つ上の階層にあるフォルダを「..」を用いて表現します。

これらを踏まえて、VBAによる実装方法を見ていきましょう。

VBAによる実装例

まずは、標準モジュールを作成し、以下のコードを追加してください。

Private Sub FolderCheck()

'変数宣言
Dim fso As Object

'FileSystemObjectオブジェクトを生成し、変数に格納する。
Set fso = CreateObject("Scripting.FileSystemObject")

'データベースが保存されているフォルダをカレントフォルダにする。
'既定ではドキュメントフォルダがカレントフォルダになります。
ChDir CurrentProject.Path

'FolserExistsメソッドを用い、相対パスに「WorkSpace」フォルダがあるか
'確認する。
If fso.FolderExists(".\WorkSpace") Then

  MsgBox "WorkSpaceフォルダが存在します。"

Else

  MsgBox "WorkSpaceフォルダが存在しません。"

End If

'ガーベージコレクション
Set fso = Nothing

End Sub

これら処理の内容を確認していきましょう。最初に変数宣言を行いますが、FileSystemObjectを用いるために、「fso」をobject変数として宣言しています。

次に、FileSystemObjectオブジェクトを生成し、fso変数に格納しています。

この段階でカレントフォルダはドキュメントフォルダになりますが、データベースが保存されているフォルダをカレントフォルダにするため、「ChDir CurrentProject.Path」によりこれを実現しています。

そして、FolderExistsメソッドを用いて、対象の「WorkSpace」フォルダがあるかを相対パスを指定して確認しています。このとき、「.」がカレントフォルダであり、このサブフォルダに「WorkSpace」が含まれるかを調べています。

フォルダが存在した場合は、Trueとしてのメッセージを、フォルダが存在しない場合は、Falseとしてのメッセージを表示させています。

今回は、割愛していますが、Falseとなった場合には必要フォルダを作成する処理を加えたりもします。

最後に、fso変数を解放して処理を終了しています。

まとめ

今回は、Access VBAを用いてフォルダの有無を調べる方法を確認しました。サンプルでは固定のフォルダ名称を設定しましたが、例えば日付でフォルダ名が変わる場合にはDate関数やformat関数等を活用してフォルダ名を動的に作成し、これをFolderExistsのfolderspec引数に指定することで存在を調べることもできます。

ルーチン処理の場合、一度仕組みを作ることで業務効率を飛躍的に向上させることができますので、今回紹介した方法を交えてより良い機能を設けることをお勧めいたします。

以下の書籍でもAccess VBAの効果的な活用方法を紹介していますので、ご参考にしてください。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。
https://amzn.to/3dqd2n1
https://amzn.to/3h1NFKh

コメント

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