
No.11ベストアンサー
- 回答日時:
nana_pocoさん、こんにちは。
返事がおそくなってすみません。>もし該当ファイルが存在しない場合、
>エラーメッセージを出すとするとどこにその処理を持って行けばよいのでしょうか?
Fname = Dir(myPath & "file?" & "_" & BaseFname)
Do While Fname <> ""
このようにして、実在するファイルを選び出していますから、該当ファイルが存在しない場合のエラーメッセージは、ここの場合はありません。
もしも、あえて必要なら、
If rtn = vbYes Then
と
DoCmd.TransferText acImportDelim, "インポート定義名", "インポート先テーブル名", myPath & Fname, True
の間に、やはり、
If Dir(Fname) ="" Then
MsgBox "該当ファイルが存在しません。"
Exit Sub
End if
ということになりますね。おそらくは使われることはないと思います。
この回答への補足
ありがとうございます。本当にご丁寧にありがとうございます。重ね重ね申し訳ございませんが、Dateから引っ張ってきた日付の前日をあらわすにはどうしたらよいのでしょうか?
補足日時:2005/06/30 09:44No.10
- 回答日時:
#6 の Wendy02 です。
前回、あまり反応されていなかったので、実際に、作ってみました。なお、テキストフォーマット自体は、この件とは別ですので、それについては考慮していません。'<標準モジュール>
Option Compare Database
Sub TextFileImport()
On Error GoTo TextFileImport_Err
Dim myDate As String
Dim myPath As String
Dim Fname As String
Dim rtn As Integer
Dim BaseFname As String
'テキスト・ファイルのパス
myPath = "D:\Data\"
'日付の部分
BaseFname = Format(Date, "yyyymmdd") & ".txt"
'ファイルの定型フォームにあわせてください。
Fname = Dir(myPath & "file?" & "_" & BaseFname)
Do While Fname <> ""
rtn = MsgBox("「 " & Fname & " 」をインポートしますか?", vbYesNoCancel)
If rtn = vbYes Then
DoCmd.TransferText acImportDelim, "インポート定義名", "インポート先テーブル名", myPath & Fname, True
ElseIf rtn = vbCancel Then
Exit Sub
End If
Fname = Dir()
Loop
TextFileImport_Exit:
Exit Sub
TextFileImport_Err:
MsgBox Error$
Resume TextFileImport_Exit
End Sub
この回答への補足
本当にご丁寧にありがとうございます。教えていただいたロジックで想定通りうまく動きました。もし該当ファイルが存在しない場合、エラーメッセージを出すとするとどこにその処理を持って行けばよいのでしょうか?
補足日時:2005/06/29 00:02No.9
- 回答日時:
takiboです。
誤って投稿ボタンを押してしまいましたので続きを。と思ったら skikichiさんが全て解説してくださいました。
まったくその通りです。どうもありがとうございます。
No.8
- 回答日時:
私や#4さんが想定しているケースはこうです。
D:\Data\ というフォルダーの中に毎日複数のファイルが作成される。
一日に一つだけファイルが作成されるのではないので、たとえば、2005年6月28日には、file1_20050628.txt とか file2_20050628.txt とか file3_20050628.txt など、いくつものファイルが作成される。
当然、前日、前々日など過去のファイルも同じフォルダーに存在するので、Accessで自動的にインポートする際にはその日付を見て当日のものだけをインポートする。
#4さんのサンプルプログラムでは、最初にFNAMEには最初に見つかったファイル「file1_20050628.txt」が読み込まれます。
次にwhileでloopしてきたときには、「file2_20050628.txt」が読み込まれます。
同様に3回目には「file3_20050628.txt」が読み込まれ、それ以上ファイルが無ければloopを抜け出します。
FNAME = Dir()
という構文で次のファイル名が検索され、FNAMEという変数にセットされるのです。
また、インポート文ですが・・・
ファイル名の指定のところは、"D:\Data\日付*.txt" ではなく、FNAME になります。
>また、if文のInstr(1,FNAME,…)のところで、
FNAMEをなぜいれるのかよくわかりません。
ここまででおわかりかと思いますが、FNAMEという変数には日付の付いたファイル名(file1_20050628.txt)が入っていますから、Instrという関数で日付(当日の日付)と比較して、当日の日付の入ったファイル名だけをインポートするようにしているのです。
No.7
- 回答日時:
No.4 takibo です。
まず、nana_pocoさんの作られたインポートプログラムの [Filename] の部分を
パス & FNAME (ダブルコーテーション無し)
に置き換えて実行してみてください。
>また、if文のInstr(1,FNAME,…)のところで、FNAMEをなぜいれるのかよくわかりません。
ご親切にありがとうございます。takiboさんに教えていただいたロジックを元にして、うまくいきました!また機会がありましたらお願いいたします。
No.6
- 回答日時:
#1 さんへの「回答に対する補足」を読んだ限りでは、そのテキストファイルというのは、単にインポートしたところで、それだけのデータテーブルが作られるだけだと思います。
例えば、
Function インポート()
DoCmd.TransferText acImportDelim, , [TableName],[FileName]
'acImportDelim (区切り記号付きテキストインポート)
End Function
などとなると思うのですが、それを、マクロにつければよいのではないかと思います。
ファイル名の方は、もしも、当日で間に合うのでしたら、
FileName = "file1_" & Format$(Date,"yyyymmdd") &".txt"
このようなものを作ればよいと思います。
そうでないのでしたら、
DoCmd.RunCommand acCmdImport("*.txt")
で、外部データインポートのダイアログ・メニューを開けるか、どちらかだと思います。
No.4
- 回答日時:
ExcelVBAで使うものですが、Accessでも使えると思います。
(Access2002で確認済)Sub 指定ファイルインポート()
日付 = Format(Date, "yyyymmdd")
パス = "D:\test\"
FNAME = Dir(パス & "*.txt")
Do While FNAME <> ""
If InStr(1, FNAME, 日付, vbTextCompare) > 0 Then '・・・・・(※)
'(インポート処理)
Else
MsgBox "該当ファイルがありません"
End If
FNAME = Dir()
Loop
End Sub
指定ディレクトリ=[D:\test\]、対象拡張子=[.txt]と仮定しています。
インポート処理やエラー処理は書き加えてください。
上記のコードは『ファイル名にシステム日付(8文字)が含まれている場合』です。
『更新日がシステム日付の場合』は(※)の部分を以下の2行と差替えます。
更新日 = Format(FileDateTime(FNAME), "yyyymmdd")
If 更新日 = 日付 Then
あくまでもExcelVBAからのアプローチです。ご参考になれば幸いです。
この回答への補足
ご丁寧にありがとうございます。
私のインポートのプログラムがおかしいのでしょうか?
DoCmd.TransferText acImportDelim, "インポート定義名","インポート先テーブル名","D:\Data\日付*.txt",true
をインポート部分に入れたのですが、
該当データなしになってしまいます。
また、if文のInstr(1,FNAME,…)のところで、
FNAMEをなぜいれるのかよくわかりません。
お手数ですがお時間ありましたら教えてください。
No.3
- 回答日時:
バッチファイルはご存知ではないのですね!?
1.バッチファイルの作成(file_ichiran.bat)
DIR C:\*.txt > file_ichiran.txt
2.Accessでfile_ichiran.txtをインポート
3.インポートした内容にファイル名と更新日付が入っていますので、日付を見て当日のファイルだけをあらためてインポートする。
以上です。
file_ichiran.txtの中身を見ていただけば3.の処理方法は自ずと見えてくるかと思います。
もし更新日付ではなく、作成日付で判断せねばならない場合には、さらにワンクッション処理が必要です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- WordPress(ワードプレス) インポートできない 2 2023/06/24 01:02
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access2016のExcelインポートの機能のことで教えてください 1 2022/09/11 14:58
- Access(アクセス) Access VBA を利用して、フォルダ内のファイルの名称を変更したい 1 2023/08/03 08:27
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
3つ以上のテキストファイルをコ...
-
バッチファイル 複数ファイル...
-
多数のサブディレクトリ内のフ...
-
連番の数字を含む文字列の作成
-
VBAでワークシートを引数として...
-
ファイルの最後に文字列挿入
-
バッチファイルからVBAに引数を...
-
unixの[cut]コマンドについて
-
Windows版のgzipについて
-
バッチにてフォルダ内ファイル...
-
AccessVBAでのインポート
-
Pythonの質問です テキストファ...
-
ファイルロックの考え方につい...
-
PostMessageで外部のexeへメッ...
-
ファイル名の一部をbatで変更し...
-
C言語、ファイルの存在チェック...
-
ウインドウパソコンのファイル...
-
psqlでエラーログをとりたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
拡張子を元に戻す
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
psqlでエラーログをとりたい
-
COPYコマンドで結合すると余計...
-
エクセルの各セルの内容をそれ...
-
バッチファイルで文字列削除に...
-
ファイルの最後に文字列挿入
-
UWSCでテキストファイルを開い...
-
バッチファイル 複数ファイル...
-
renameコマンドについて
-
ファイル名の一部をbatで変更し...
-
forfilesで検索したファイルを...
-
外部exeに対しての引数受け渡し
-
Windowsのバッチファイルを利用...
-
VBSでフォルダ内のテキストファ...
-
VBAでエクセルをtxtに変換する...
-
ExcelVBA テキストファイルUNIC...
おすすめ情報