Accessのノウハウ(フォーム上でのインポート設定)
ファイルのインポート・エキスポートをフォーム上で実行する
こんな感じのものを作ります。
前回取り込んだパスを入れておけるので、直す箇所が最小限ですみます。

インポートの作成手順は以下の通りです。
1.どんなフォームを作るか考える
(テキストボックス(取り込みパス)やボタンの数を考えておく)
2.フォームとテーブルの設計
①フォームのレコードソースになるテーブルを作る
(今回は「T_format」としました)
T_formatのフィールド名やデータ型を設定
②テーブルにインポートパス名を入力
③フォーム作成
取り込み用のテキストボックスやボタンを作る

3.必要なファイルをいったん取り込んでみる
ウィザードを使ってインポートする。
CSV等のテキストファイルは、取り込み時に、インポート定義を保存する

4.取り込み後のテーブルは 「T_workなんちゃら」にする
いったんワークファイルに取り込む
5.上記「T_work…」を使って、正式なテーブルに取り込む
正式なテーブルには、追加クエリで追加する。
※蓄積型で無いテーブルなら、追加クエリの前に削除クエリでいったん空にする。
※通常は、インポートしたテーブルを使って、そのまま定例処理を実施しない方が良いです。
なぜなら、テーブルのフォーマットが変わったり、
データの不具合があったりして、テーブルが取り込めなかったときに、定例処理に影響が出る可能性があるからです。
ですから、ワークテーブルにいったん取り込むのです。
6.最終的には、以下の流れになります。
①ワークテーブルのデータ削除(削除クエリ)
②データインポート(CSVまたはExcelファイル)
CSVの時はインポート定義を使うと便利(インポート定義を使わなくても動きます)
③正式なテーブルに取り込む(削除クエリ+追加クエリ)
(正式:その後の処理…クエリ等を組み込んでいるテーブル)
7.上記の流れをフォーム(フォームモジュール)に書き込む

■フォームのテキストボックスの入力チェック・ファイルの存在チェック等。
■ワーニングをFalseにしたり、Trueに戻したり。
※2020/9/8補足 上記のうち、Excelインポートで False(ヘッダーなし)で書いてましたが、
一般的にはTrue(ヘッダーあり)ですね。紛らわしくてスミマセン。
8.一度にインポートする
「複数のテキストボックスを入力して、全てを一度にインポートするボタン」を作る場合は、注意が必要です。

モジュールを書くときには、ボタンを押した「直後」に
「テキストボックスの入力チェック「入力ファイルパスの存在チェック」を済ませるようにして下さい。
たまに、「一個処理する毎にファイルの存在チェックをしている」という大変悲しいフォームを見ることもあります。
→30分かかってインポートして、最後のファイルのインポート時に「ファイルが存在しません」でコケるわけです。
たまにベンダーの方が作ったものでも見ることはありますので、
依頼するときは、「失礼ながら、まず全てのファイルの存在チェックをしていますよね」と念のため確認するのがお勧めです。
9.整備
フォームの見た目を整えたり、テーブルで次のデータに進まないようにする。

10.Mainフォームへの遷移ボタンを作ったりする。
11.その他便利ハック
ちなみに、インポート定義のファイル名等は、以下のようにすると確認できます。
①ナビゲーションオプションを開いて、「システムオブジェクトの表示」にチェックを入れる。

②MSysIMEXSpecs で、どんなインポート定義ファイルがあるか確認できる。
またMSysIMEXColumnsフィールド名等も確認できる。

12.一応コード貼っておきますね。
2020/9/8補足 Excelインポートで False(ヘッダーなし)で書いてましたが、
一般的にはTrue(ヘッダーあり)なので訂正しておきます。
Private Sub cmd_import_Click()
Dim myDirFN As String
Dim myFN As String
myFN = "T_work明細"
If IsNull(Me.txt_Import) Then
MsgBox "フォルダパスを入力してください"
Exit Sub
End If
myDirFN = Me.txt_Import
If Dir(myDirFN) = "" Then
MsgBox "ファイルが見つかりません"
Me.txt_Import.SetFocus
Exit Sub
End If
DoCmd.SetWarnings False
DoCmd.OpenQuery "Q_001_import明細_削除"
'CSVデータのインポートの時
DoCmd.TransferText acImportDelim, "MEISAIインポート定義", myFN, myDirFN, False
'xlsxのインポートの時
'DoCmd.TransferSpreadsheet acImport, , myFN, myDirFN, True
DoCmd.OpenQuery "Q_101_明細_削除"
DoCmd.OpenQuery "Q_102_明細_追加"
MsgBox ("import終了")
DoCmd.SetWarnings True
End Sub


