Accessに蓄積したデータを定期的に出力する際に、決まったルールでフォルダを作成しファイルをエクスポートするといった処理をするようなルーチン業務に対して、Access VBAを活用することで業務効率の改善を図ることが期待できます。
今回は、CreateFolderメソッドを活用し、これら処理の実現方法を紹介します。
なお、AccessからExcelファイルへデータをエクスポートする方法については以下の記事をご参考にしてください。
CreateFolderメソッドについて
CreateFolderメソッドの基本構文は次のように表します。
object.CreateFolder (foldername)
object: 必須で、常にFileSystemObjectを指定する。
foldername: 作成するフォルダの名前を必ず指定する。指定したフォルダが既に存在するとエラーとなる。
FileSystemObjectとは、コンピュータのファイルシステムへのアクセスを提供するオブジェクトです。
また、CreateFolderメソッドを利用する際の注意点としては、既に同名のフォルダが存在すると、エラーが発生するという点です。そこで、同名のフォルダが存在するかをあらかじめ確認する必要があり、FolserExistsメソッドを活用することで、これら処理を実現できます。
FolserExistsメソッドの具体的な使い方は以下の記事をご参照ください。
以上の点を踏まえて、サンプルを作成していきます。
サンプルコードについて
今回作成するサンプルは、次のような処理とします
①「T_sample」テーブルをExcelファイル(ファイル名は「Sample.xlsx」とします。)としてエクスポートする。
②エクスポート先のフォルダ名称を、今日の日付の「yymmdd」形式とし、Cドライブの「TEST」フォルダ直下(C:¥TEST¥yymmdd)とする。
サンプルコードの実装に先立ち、サンプルデータを「T_sample」テーブルに格納します。
まず、「T_sample」テーブルを作成し、「氏名」フィールドと「生年月日」フィールドを作成し、それぞれを「短いテキスト」と「日付/時刻型」とします。
次に、表1に示すサンプルデータを格納します。
表1 サンプルデータ
氏名 | 生年月日 |
下田 一樹 | 1984/06/24 |
武藤 祐美 | 1970/08/28 |
古川 斎 | 1985/03/17 |
土田 竹一 | 1979/07/20 |
岩田 れいや | 1985/05/04 |
実際に格納した様子は図1に示すとおりです。
それでは、上述の処理に基づき以下のコードを標準モジュールに実装します。
Public Sub CreateFolderSample() '変数宣言 Dim FolderPath As String Dim XlsFileName As String: XlsFileName = "Sample.xlsx" Dim ExportPath As String Dim fso As Object 'Excelファイルエクスポート先のフォルダパス FolderPath = "C:\TEST\" & Format(Date, "yymmdd") 'FileSystemObjectオブジェクトを生成し、変数に格納する。 Set fso = CreateObject("Scripting.FileSystemObject") 'FolserExistsメソッドを用い、「FolderPath」で指定したフォルダがあるか '確認する。 If fso.FolderExists(FolderPath) Then'対象フォルダが存在するため、特段の処理はしません。
Else'★ポイント!! 対象フォルダが存在しないため、フォルダを作成します。
fso.CreateFolder (FolderPath)
End If 'エクスポートファイルのパス ExportPath = FolderPath & "\" & XlsFileName 'Excelファイルの出力 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "T_sample", ExportPath, True, "出力" 'Excelファイルをエクスポートした旨を通知する。 MsgBox "Excelをエクスポートしました。" End Sub
作成したコードの処理を一つずつ確認していきましょう。
まずは、変数宣言をしていますが、「XlsFileName」変数にはExcelファイルの名称を格納しています。
次に、Excelファイルをエクスポートするフォルダのパスを「FolderPath」変数に格納していますが、この際に、Date関数とFormat関数を組み合わせて、今日の日付を「yymmdd」形式に変換しています。
Format関数による書式変換の詳細については、以下の記事を参照してください。
続いて、FileSystemObjectを生成し、FolderExistsメソッドを用いて該当するフォルダの有無を調べます。
If文の処理において、該当するフォルダがあればTrueに、そうでなければFalseとして分岐処理をしますが、特にFalseとなった場合がポイントとなります。
先述の通り、CreateFolderメソッドは同名フォルダが存在する場合にエラーとなるため、分岐処理時にTrueとなった場合には何もしませんが、Falseとなった場合にフォルダを作成します。これにより、フォルダの有無を毎回手作業で確認することなく、処理をすることができます。
そして、Excelファイルのエクスポートパスを決定した後、Excelファイルを出力して処理を完了します。なお、今回のサンプルの場合、同名のExcelファイルが既に存在していると上書き保存されますので、ご注意ください。
以上の処理を実行すると、図2及び3のような結果が得られます。
まとめ
今回は、CreateFolderメソッドを用いてフォルダを作成する方法を紹介しました。サンプルで作成したとおり、動的にフォルダ名を作成することができますので、ルーチン業務に応じた処理を実装することで業務効率を飛躍的に向上させることが期待できます。
是非、本記事をご参考に業務改善を図っていただければと思います。
今回紹介した内容は、以下の書籍などでも紹介されていますので、是非ご参考にしてください。
スポンサーリンク
コメント