Accessからデータをエクスポートをする際に、決められたルールに基づきフォルダを作成し、ここへエクスポートファイルを保存するといった定型業務があるとします。この時、毎回手作業でフォルダを作成するようでは手間ばかりかかってしまいます。そこで、VBAを活用してフォルダを自動で作成する処理をAccessに実装できると業務効率を大幅に改善することができます。
ここで、Accessからのデータエクスポート方法については、以下の記事をご参照ください。
今回の記事では、Access VBAでフォルダを作成する際にコマンドを用いた処理を実装する点が要点となります。
それではサンプルを交えて処理の実装方法を見ていきましょう。
VBAコードの実装
まずは、標準モジュールを追加し以下のコードを記載してください。
Public Sub CmdFileCopy() On Error GoTo Err_CFC '変数宣言 Dim execCmd As String Dim wsh As Object Dim FolderName As String 'フォルダー名の指定 FolderName = Format(Date, "yymmdd") '実行するコマンドを格納する。 execCmd = "mkdir C:\TEST\" & FolderName 'Shellのセット Set wsh = CreateObject("WScript.Shell") 'コマンドを実行する。 wsh.Run Command:="%ComSpec% /c " & execCmd, WindowStyle:=0, WaitOnReturn:=False 'wshの解放 Set wsh = Nothing '終了のメッセージ MsgBox FolderName & "フォルダーを作成しました。" '以下エラー処理 Exit_CFC: Exit Sub Err_CFC: MsgBox Err.Description Resume Exit_CFC End Sub
VBAのコードが実装できたと思いますので、それぞれのコードについて確認していきましょう。
最初は、お約束の変数宣言をしており、続いて「FolderName」変数にFormat関数を用いて、本日の日付を「YYMMDD」形式で格納しています。
Format関数による日付の文字列変換方法については、以下の記事をご参照ください。
続いて、実行するコマンドを「execCmd」変数に格納しています。今回はフォルダを作る「mkdir」を用いていますが、ファイルをコピーするための「robocopy」やネットワーク設定の情報を取得するための「ipconfig」等々、コマンドには様々なものがあります。
スポンサーリンク
次に、「wsh」変数にShellをセットし、「wsh.Run」でコマンドを実行しています。
ここで、「Command」引数には「%ComSpec% /c」としてコマンドプロンプトの実行ファイルのパスを持つ環境変数であり、続いて、「execCmd」が実行するコマンドを指定しています。
「WindowStyle」引数は「0」としていますが、これによりコマンドプロンプトに対するウィンドウは非表示で、フォーカスは非表示ウィンドウに渡されます。
「WaitOnReturn」引数は「False」にしています。これは、起動したアプリケーションの終了を待つかどうかを指定するもので、「True」はアプリケーションが終了するのを待ちますが、「False」はアプリケーションが終了するのを待たずに次の処理に移行します。なお、省略時の既定値はFalseです。
最後に、wshオブジェクトを解放し、終了のメッセージを発信して処理が完了します。
処理の確認
実装したVBAコードを実行してみましょう。
すると、「C:\TEST」フォルダ(当該フォルダがなければ、新たに作成されます。)の中に本日の日付を「YYMMDD」形式としたフォルダが作成されていることが確認できます。
このように、フォルダ名を動的に設定することができますので、定常業務においては一度処理を実装すれば、あとは全て自動化することも可能となります。
まとめ
今回は、Access VBAを通じてコマンドを用い、動的にフォルダを作成する方法を紹介しました。この処理にデータエクスポートの機能等を追加することで、より汎用性の高い自動化処理もできるようになり、業務効率の改善、ヒューマンエラーを撲滅することもできるようになります。
Accessでデータベースを作成するにあたって、専門書も参考になりますので、お手元に用意されるといざというときに非常に便利です。
スポンサーリンク
コメント