こんにちはmasalifeです
今回はフォームに設置したボタンをクリックするだけで、特定のテキストファイルをインポートする機能を紹介します。
使用するのはVBAのDoCmd.TransferTextメソッド
それではやっていきましょう。
構文
DoCmd.TransferTextメソッドはAccessとテキストファイルの間でテキストをインポートまたはエクスポートできます。
Microsoftリファレンスでは次のように示されています。
【構文】
DoCmd.TransferText(TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)
名前 | 必須/オプション | データ型 | 説明 |
TransferType | Optional | AcTextTransferType | 変換の種類を指定。規定値はacImportDelim。 |
SpecificationName | 省略可能 | Variant | 作成してカレント データベースに保存したインポートまたはエクスポートの定義名を文字列式で指定。 |
TableName | 省略可能 | Variant | テキスト データのインポート先の Access テーブル、テキスト データのエクスポート元の Access テーブル、テキスト データのリンク先の Access テーブル、またはテキスト ファイルにエクスポートする結果の Access クエリの名前を、文字列式で指定。 |
FileName | 省略可能 | Variant | インポート、エクスポート、またはリンクを行うテキスト ファイルの、パスを含めた完全な名前を文字列式で指定。 |
HasFieldNames | 省略可能 | Variant | インポート、エクスポート、またはリンクするときにフィールド名としてテキスト ファイルの最初の行を使用するには、True (1) を使用。テキスト ファイルの最初の行を通常のデータとして扱うには、False (0) を使用。この引数を空白にすると、既定値 (False) と見なされる。 |
HTMLTableName | 省略可能 | バリアント型 | インポートまたはリンクする HTML ファイル内のテーブルまたはリストの名前を文字列式で指定。 |
CodePage識別子 | 省略可能 | バリアント型 | コード ページの文字セットを示す長整数型 (Long) の値を指定。 |
TransferTypeのデータ型、AcTextTransferTypeの種類は次のとおりです。
【AcTextTransferType】
名前 | 値 | 説明 |
acExportDelim | 2 | 区切り記号付きエクスポート |
acExportFixed | 3 | 固定長エクスポート |
acExportHTML | 8 | HTML エクスポート |
acExportMerge | 4 | Microsoft Word Merge のエクスポート |
acImportDelim | 0 | 区切り記号付きインポート |
acImportFixed | 1 | 固定長インポート |
acImportHTML | 7 | HTML インポート |
acLinkDelim | 5 | 区切り記号付きリンク |
acLinkFixed | 6 | 固定長リンク |
acLinkHTML | 9 | HTML リンク |
CSVファイルはカンマ区切りのファイルなので、acImportDelimを使います。
実例で構文を分かりやすく
実例を挙げて、DoCmd.TransferTextメソッド の引数を指定していきます。
インポートする要件は次のとおりです。
1. 特定のフォルダ(C:Users\nakam\OneDrive\ドキュメント\Access)にある特定のファイル(売上当月.csv)をAccessのテーブル(T_売上累積)にインポートします。
2. その際、CSVファイルの先頭行はフィールド名として使用します。
3. CSVファイルの売上日は日付形式となっているため、Accessのテーブル(T_売上累積)にインポート時はインポート定義を使って、テキスト型でインポートします。
※今回は事前にインポート定義(売上インポート定義)を作成済みです。
実例で構文を整理すると、次のようになります。
名前 | 実例での説明 | 実例での引数 |
TransferType | どの形式のファイルをインポートするのかエクスポートするのか ⇒CSVファイルをインポートする | acImportDelim |
SpecificationName | インポート定義を指定するのか ⇒「売上インポート定義」を指定する | “売上インポート定義” |
TableName | インポート先の名前は何か ⇒「T_売上累積」にインポートする | “T_売上累積” |
FileName | インポートするファイルのフルパスは何か ⇒「C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv」をインポートする | ” C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv” |
HasFieldNames | テキストファイルの最初の行をフィールド名に使用するか ⇒使用する | True |
【完成】
※\は¥に置き換えてください。
フォームのボタンにVBAを設定する
フォームのボタンのクリック時イベントに次のVBAコード(3と5)を設定します。
1 2 3 4 5 6 7 |
Private Sub btn売上データ取込_Click() DoCmd.TransferText acImportDelim, "売上インポート定義", "T_売上累積", "C:\Users\nakam\OneDrive\ドキュメント\Access\売上当月.csv", True MsgBox "売上データをインポートしました!!" End Sub |
※\は¥に置き換えてください。
DoCmd.TransferText ac ImportDelimでは、クリックする都度、重複してデータがインポートされてしまうため、
Msgbox関数を使って、正しくインポートされたことを知らせるようにしています。
さいごに
この方法は一番シンプルで分かりやすいですが、フルパスを指定しているため、汎用性にかけるデメリットがあります。
ルーチンでファイルをインポートするのであれば、インポートするファイル名は「〇月売上」とかではなく、「当月売上」「売上」といったファイル名にする工夫をしてください。
最後まで読んでいただきありがとうございました。