ここから本文です

Accessの任意のテーブルにテキストインポートするVBAで1ファイルずつのテキストフ...

m69********さん

2013/12/917:44:27

Accessの任意のテーブルにテキストインポートするVBAで1ファイルずつのテキストファイルではなく、不特定多数のテキストファイルを選択して同時に取り込むにはどうしたら良いでしょうか?

できれば以下の現在使用しているVBAがシンプルで解りやすいのでこれに少し手を加えたものがいいのですが…
よろしくお願い致します。

Private Sub インポート_Click()

Dim objFileDialog As Object 'FileDialog
Dim stTitle As String 'タイトル
Dim stPath As String 'ファイルのフルパス
Dim stFilter1 As String 'ファイルのフィルタ
Dim stFilter2 As String 'ファイルのフィルタ
Dim stInitialFileName As String '初期フォルダパス

Const msoFileDialogFilePicker = 3 'ファイルの参照

stTitle = "ファイルパス取得" '★
stFilter1 = "TEXT ファイル" '★
stFilter2 = "*.txt" '★
stInitialFileName = "C:\" '★

Set objFileDialog = _
Application.FileDialog(msoFileDialogFilePicker)

With objFileDialog
'ダイアログボックスのタイトル
.Title = stTitle
'複数ファイル選択不可
.AllowMultiSelect = False
'初期フォルダパス
.InitialFileName = stInitialFileName
'ファイルの種類設定
.Filters.Clear
.Filters.Add stFilter1, stFilter2

If .Show = False Then
'キャンセル時
GoTo Exit_SUB
Else
'★選択時フルパス表示
stPath = .SelectedItems(1)
DoCmd.TransferText acImportDelim, "インポート定義", "t_テーブル", stPath, True
End If

End With

Exit_SUB:
Set objFileDialog = Nothing

End Sub

補足すいません、説明不足でしたね。
テキストファイルのフィールド属性はどのファイルも毎回固定で全て同一です。ファイル名が日付で管理されているので毎回異なり、読み込み時のファイル数も一定ではないです。

閲覧数:
1,121
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

por********さん

編集あり2013/12/1210:45:25

こんにちは。
このコードは、ファイルを選択する部分で大部分を構成しているコードです。
「テキストファイルを読み込み」するのに一番大事な部分が、だったの一行の、
「インポート定義」という部分、 で、「既に設定しているもの」を指定するだけですよね、

これで、なにをしてほしいのか?ということです。

やりたいことと、コードの変更という部分でいうと、
1) ファイルを指定する
2) ファイルの構造を正確に分析して、正しいインポート設定ファイルを生成(今のものに上書き)
3) docmdの実行
ということになります。

もともと、インポート定義を使う、という考え方は、「決まったルーチンワーク」があって、
データだけが、都度変化する、という業務スタイルに対応させるために、
「フィールドの属性は毎回変化がない」ということでするものです。その方法が今回のやりたいことにあっているのか?というもっと初期段階の設計が必要。

1) 読み込みさせるファイルのフィールド属性をどのように考えるか そのルールを設計する。
2) ある程度のパターンがあって、データを一行読み込みするだけで判断できるようだったら、
インポート定義ファイルの差し替えで、対応する

などになってきます。
(まだまだコードの段階には、なっていません)

>補足より
テキストファイルの定義は、同じで、ファイルがいくつもある。

ということだったら、
作戦1 「読み込みするフォルダに、必要なファイルを全部集める」
これは、どんなファイル名か不定期でファイル名も一定ではないのだから、エクスプローラで、丸ごと
一箇所に集めておき、マクロで処理するときに、「csvファイル名の一覧」を作成して連続的にインポートする
ものです。

作戦2 「ファイル名の付け方にはルールがある」
yyyymmddでなっているから、その部分を狙って探す、特定のフォルダの一覧表を作成して、
ファイル名で計算する方法です。作戦1は「フォルダ全体」に対してこちらは一定のルールに基づいて処理します

などです。

さて、「ファイル選択で複数のスイッチもあるから、それで・・・」というものですが、ファイルがひとつ、ふたつだったらそれでもいいですが、「選択が洩れてしまったり、全体を見渡すのも大変」というのだと、
便利なようで、良くない、ということになりそうです。

ファイル全体の一覧を作成して、というのは、vbaではdirコマンドによるループですが、
filesystemobjectだと、filesコレクションで処理できます。

ファイル名にルールがあるか、ないか、で、コードを決めてください。

質問した人からのコメント

2013/12/12 17:58:16

親切に提案していただいてありがとうございます。
補足が追加できなかったのでこちらより再投稿し続きを入れましたのでよろしくお願いします。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1411783323...

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる