すべて同じ(既知の)レイアウトを持つ新しいテキストファイルの追加を自動化しようとしています。
列はタブ(TABボタン)を使用して区切られます。私の質問は、VBAでこれを行うことは可能ですか?たとえば、テキストファイルをインポートするためのアクセスウィザードでは?
DoCmd.TransferText
VBAのメソッドを使用しています
仕様ファイルを作成するには、ウィザードを1回実行する必要があります。これを行うには、通常のようにテキストファイルをインポートしますが、ウィザードに深く入り込む前に、左下の[詳細...]ボタンをクリックします。ここでスペックファイルを作成します。
これらの列が入力ファイル、データ型などすべてに一致するようにします。{tab}
フィールド区切り文字と適切なテキスト修飾子を使用している場合は、必ず選択してください。
仕様を保存します(後でこの同じ画面に戻ってクリックSpecs...
し、古いものの上に保存することで編集できます)
これで、このようにVBAで使用できます
DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath
それがファイルであるかファイルに基づいているかHasFieldNames
を決定する必要があるパラメータがあります。true
false
インポートウィザードの欠点は、ファイル形式を少しでも変更した場合でも、インポートを機能させるには、これらすべての手順をもう一度クリックする必要があることです。
ストレートSQLでそれを行う方法については、クエリでファイルからインポートテーブルにアクセスするmsで@Remouの回答を確認してください。私は実際に私のプロジェクトで同じ方法を使用しています。私はこのようなものを使用します(詳細については私のリンクを参照してください):
insert into MyTable (column-list...)
select (column-list...)
from [data-source-specifications].[file-name]
any-other-clauses...;
注意点が1つだけです。このSQL構文を通常のAccessクエリオブジェクトに入れると、Accessがクエリオブジェクトを開くことさえできないところまでそれを壊してしまう可能性が高くなります。したがって、Accessで試してみる間、クエリを作成してテキストファイルに保存してください。クエリがテストされて機能するようになったら、VBAサブルーチンに保存して、Accessが次のようにクエリをそのまま実行するようにします。
sub MyTableImport()
sqlStr = " insert into MyTable (column-list) " ' leave a space at the
sqlStr = sqlStr & "select (column-list...) " ' end of each line of the string
sqlStr = sqlStr & "from [data-source-specifications].[file-name] "
sqlStr = sqlStr & "any-other-clauses... ;"
DoCmd.RunSQL sqlStr
end sub