こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

access VBA でテキストファイルの編集をしたい

既に退社した前任者の代から受注データを本社のサーバからダウンロードしてエクセルで加工するファイルがあるのですが、日々更新されるのも不都合が出てきましたのでなんとかアクセスのデータに日々蓄積したくなりました。

毎日日付を含む名前のファイルがアップされFTPで○月○日のファイルを受信するのですが、バッチファイルとテキストファイルをを使ってFTPの受信をしていました。
1、VBAでテキストファイルの日付を変更する。(任意の日付)
2、VBAからバッチファイルを実行し、先に変更した日付のファイルを受信する。

これをアクセスで同じことをしたいです。
フォームにテキストボックスを作って、そこに日付を入れるようにして、VBAでテキストファイルの日付をテキストボックスにある日付に変更して、それから・・・まだ工程はあるのですが、まずテキストファイルが変更できないと先へ進めません。

エクセルのVBAは少しは判るのですが、accessVBAは初心者です。
よろしくお願いします

投稿日時 - 2008-06-01 03:02:30

QNo.4066219

困ってます

質問者が選んだベストアンサー

A No.2です。
短いバッチなら、毎回1から作成した方が簡単かもしれませんね。
VBA本来のテキストファイル読み書きの機能もありますが、FSOのオブジェクトの方がなんとなく馴染むので愛用しております。

参考URL:http://officetanaka.net/excel/vba/filesystemobject/textstream.htm

投稿日時 - 2008-06-03 21:29:35

補足

試してみました。

参考URLからの説明がすごくわかり易かったので簡単でした。

とはいっても、書き換えの仕方がわからなかったので、
一度テキストファイルを削除して、同じファイル名で新規作成し、
内容を書き込むという。スマートでない方法ですが、
一日一回でそんなに時間のロスがあるわけでもないので、
とりあえず、良しとしました。

従来使用のエクセルファイルを利用することなくアクセスにデータを
ためていけるようになりました。
ありがとうございました。

今度はサイズの心配が必要かもしれませんが

投稿日時 - 2008-06-12 22:44:00

お礼

ありがとうございます。
参考URLを見て少し考えてみます。また
報告させていただきます。

現状、以前のエクセルのファイルを日付毎に作成し、
日付を選んでアクセスに取り込むフォームを作って対応してますが、
FTPから受信するときだけエクセルを動かさないといけないのは
やはり不便です。がんばってみます

投稿日時 - 2008-06-09 06:02:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

A No.2です。
正規表現を使う事例です。今日の日付に変えるコードですが、お好きな様に変更してください。また、XXXXXXXXYYMMDDの所は秘密のコマンド+日付を表す数字6桁という解釈で作成しています。XXXXXXXXの所にも数字が含まれていると、もう一ひねりが必要ですが、ご自分で正規表現をお調べ下さい。過去に作成したコードをアレンジしたので、冗長なところもあるかと思います。
Sub test()
Dim FSO As Object
Dim buf As String
Dim fileName As String
Dim subMatchText As String
Dim returnString As String

Dim patternString As String
fileName = "C:\Documents and Settings\?????\My Documents\sample.bat"
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FileExists(fileName) Then Exit Sub
With FSO.getfile(fileName).OpenAsTextStream
buf = .ReadAll
.Close
End With
patternString = "(\d{6}) "
subMatchText = subMatchWord(buf, patternString)
returnString = replaceText(buf, subMatchText, Format(Date, "yymmdd"))
With FSO.getfile(fileName).OpenAsTextStream(2)
.Write returnString
.Close
End With
Set FSO = Nothing
End Sub

Private Function subMatchWord(targetstring As String, patternString As String) As String
Dim regEx As Variant, Matches As Variant, match As Variant
Dim i As Long
Dim buff As String

Set regEx = CreateObject("VBScript.RegExp")
regEx.MultiLine = True
regEx.Pattern = patternString
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(targetstring)
If Matches.Count > 0 Then
For Each match In Matches
If Matches(i).subMatches.Count > 0 Then
subMatchWord = Matches(i).subMatches.Item(0)
End If
Next match
End If
Set Matches = Nothing
Set regEx = Nothing
End Function

Private Function replaceText(targetstring As String, patrn As String, replStr As String) As String
Dim regEx As Object

Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = patrn
regEx.IgnoreCase = False
replaceText = regEx.Replace(targetstring, replStr)
End Function

投稿日時 - 2008-06-02 22:25:27

ANo.3

ANo.2です。
興味から、バッチ完了迄待つ処理について調べてみました。
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=29854&rev=&no=0&P=R&KLOG=193

http://aircross.hp.infoseek.co.jp/vb_synshell.htm
ご参考まで。

投稿日時 - 2008-06-01 21:08:32

ANo.2

>1、VBAでテキストファイルの日付を変更する。(任意の日付)
これはファイルの作成日を変更したいのでしょうか?
たぶんご要求は違うと思いますが、敢えてお答えすると方法は下記にあります。
http://aircross.hp.infoseek.co.jp/vb_timestamp.htm
これはVB用のコードですが、
Attribute VB_Name = "mdlSetLocalFileTime"
を削除すると、使用可能です。下記は使用例
Sub test()
Dim retVal As Boolean
Dim timeStamp As Date

timeStamp = DateValue("2009/6/1")
retVal = SetLocalFileTime("C:\Documents and Settings\????\My Documents\Sample.txt", timeStamp)
End Sub
なお、実際になさりたい事が、
日付になっているファイル名を変更したいなら、
vba ファイル名 変更
VBAから、バッチファイルを実行したいなら、
vba バッチファイル 実行
で検索すれば、直ぐにいくつも見つかります。
Accessでの事例も出てきますし、この手の内容なら、Excel用とされているコードも多くはそのままAccessで使用できると思います。

投稿日時 - 2008-06-01 20:37:28

お礼

ご回答ありがとうございます。

私の説明がいまいちだったようです。

テキストに書かれている内容は
-----------------------------------------------
open (xxx.xxx.xxx.xxxx)
(loginname)
(password)
binary
get XXXXXXXXYYMMDD "c:\test\test.dat)
quit
-----------------------------------------------

のようにFTPで行う処理が書かれていて、YYMMDDの部分を
対象日付に書き換えたいのです。

エクセルのVBAではテキストを開いてgetが出てくるまで探して、
getが出たら そこから右XX文字をcell(X,X)の値に書き換える。
という処理でした。

同じことをアクセスで記述する方法がわからず困っています。
「microsoftaccess テキスト編集 VBA」 等で検索してもパッとそれらしい答えが見つからず困っています

投稿日時 - 2008-06-02 00:43:04

ANo.1

すみませんが、「課題の丸投げ」になっていませんか?

こういうやり方をしてみたら、こうなった的な結果がないと、質問として成立しないのですよ。

以上

投稿日時 - 2008-06-01 13:38:35

あなたにオススメの質問