お世話になります。
引数1=結合したいテキストファイルの存在するフォルダパス("Y:\Work")
引数2=結合後のテキストファイルのフルパス("Y:\Temp\Merge_All.csv")
を引き渡し、
引数1で指定したフォルダ内に存在する、
拡張子"dat"の複数ファイルを一つに結合する共通モジュール
を作成したいと思っています。
下記モジュールをメインモジュールから何度か呼び出しているのですが、
一度目は問題なく実行されるのですが、
二度目に実行する場合に、
Set oTextFile = oFs.OpenTextFile(sFilename, 1)の行で
エラー メッセージ
"Runtime Error! Abnormal Program Termination."
が表示され処理が中断してしまい困っています。
お気づきの問題点がございましたら、是非お時間のある時にご指導いただけると幸いです。
ヒントでもかまいませんので、よろしくお願いいたします。
ついでといってはなんですが、、、
本来はヘッダー付ファイルを先頭ファイルのヘッダーだけを残して
一つに結合したいと思っていたのですが、
ファイルサイズが膨大なため、ReadLineでは遅すぎてあきらめ、
ヘッダーなしファイルをReadAllで単純結合していく方法にしました。
ヘッダー付ファイルを結合する良い方法をご存知の場合は、
是非合わせてご教授お願いいたします。
Sub MergeFiles(sFolderPath, sExpFilePath)
Const ForReading = 1
Set oFolder = oFS.GetFolder(sFolderPath)
Set oExpFile = oFS.CreateTextFile(sExpFilePath)
For Each sFilename In oFolder.Files
sFileExtension = oFS.GetExtensionName(sFilename)
If LCase(sFileExtension) = "dat" Then
Set oTextFile = oFS.OpenTextFile(sFilename, ForReading) ←二度目のここでエラーなんです
sExpLine = oTextFile.ReadAll
oTextFile.Close
oExpFile.WriteLine sExpLine
End If
Next
oExpFile.Close
End Sub
No.3ベストアンサー
- 回答日時:
#2です。
> に改行コードがあるために結合部に一行の空行が入ってしまいます。
もしかして、
oExpFile.WriteLine
を使われていますか?
これは自動的に改行されてしまいます。
oExpFile.Write
を使用してみてはどうでしょうか?
素敵です!tkrnさん!
ばっちりですーーー!!
あやうく(またしても?)「何やってんだかコード」を書き残してしまうとこでした。
また、お世話になることもあろうかと思いますが、
ボケ質問なこれに懲りずお力をお貸しください。
的確、かつ早いご回答本当にありがとうございました。
No.2
- 回答日時:
> Marge_diff.datに統合し、
> 二度目で
> 既に存在しているMarge_fixed.dat
> と上記のMarge_diff.dat
> を統合し、
> Marge_all.datを生成
単に処理のタイミングが早すぎるだけのようなな気がします。
Timerかなにかで2度目の処理を一旦スリープしてから開始してみてはどうでしょうか?
おはようございます。
ご回答ありがとうございます。
個別に実行してみましたら、
二度目(一度めの生成ファイル使用)だけにエラーが発生し、
一度目のファイルのコピーで実行するとエラーが発生せず、
どうやらファイルデータがおかしそうな感じです。
質問前に個別に実行するという問題の切り分けをしてから、
お聞きすればよかったのに、
ループが、ループが、、、と早とちりして、思いいたりませんでした。
せっかくご回答いただいたのに申し訳ありませんでした。
上記の質問とは違うのですが、
ファイルを結合する場合に
末尾に改行コードがあるために結合部に一行の空行が入ってしまいます。
末尾改行コードを除去するモジュールを足したいのですが、
末尾を改行コードを判定する方法をご存知ないでしょうか?
sExpLine = oTextFile.ReadAll
If Right(sExpLine, 2)= chr(13) & chr(10) then
sExpLine = Left(sExpLine, Len(sExpLine) - 2)
End if
とやってみたのですが、
判定していないようで、IFの中に入りません。。。
本来なら別に質問をたてなくてはならないようなことですし、
もしもお時間があればついでの時にでもご回答いただければ幸いです。
No.1
- 回答日時:
私の所ではファイルが小さいためか現象が出ませんでした。
外れているかもしれませんがオブジェクトを明示して解放してみたらどうでしょうか。
oTextFile.Closeの次辺りに「Set oTextFile = Nothing」を入れてみるとか。
また、oFSは「Set oFS = WScript.CreateObject("Scripting.FileSystemObject")」で定義しているのですよね?
これも「MergeFiles」の最初で定義して、最後にNothingで解放してみたらどうでしょう。
再現しないため勝手な思い込みで書いているので参考にならないかもしれません。ご容赦下さい。
ご親切にテストまでしていただいて、本当にありがとうございます。
コード漏れがありすみません、ご指摘のとおりoFsは上位でSetしております。
そうなんです。
Set oTextFile = Nothing
Set oExpFile= Nothing
苦肉の策でいろいろ解放してみたのですが、現象が変わらなくて。。。
一度目で
月ごとのデータファイル
200703.dat
200704.dat
200705.dat
をMarge_diff.datに統合し、
二度目で
既に存在しているMarge_fixed.dat
と上記のMarge_diff.dat
を統合し、
Marge_all.datを生成
というような使い方をしているのですが、
一度目での統合の仕方が悪く変なファイルを作っているのかもしれません。
お忙しい中お時間をいただきまして、本当に感謝です。
また何か思いつくことがありましたら、是非よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBSでフォルダ内のテキストファイルを全て連結するには?
その他(プログラミング・Web制作)
-
VBSで指定行に挿入
その他(プログラミング・Web制作)
-
ファイル結合について
Visual Basic(VBA)
-
-
4
VBScriptで、ファイルから任意の行のみ取り出す方法について
その他(プログラミング・Web制作)
-
5
VBスクリプトでテキストファイルの行数カウント
その他(プログラミング・Web制作)
-
6
VBS ファイルマージ処理
その他(プログラミング・Web制作)
-
7
COPYコマンドで結合すると余計な改行コードができる
その他(プログラミング・Web制作)
-
8
VBScriptでファイルの日時順(降順)で並び替えて一覧を出力したい。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】テキストファイルを指定...
-
テキストファイルの最終行を消...
-
EXCELのVBAでEOFを誤認識
-
Java バブルソート
-
同一フォルダにある複数のテキ...
-
Excelにて、フォルダ内のTextフ...
-
複数のテキストファイル内の複...
-
uwscでExcelに自動記入
-
ファイルのアクセス回数について
-
バッチファイル 二つ上のディ...
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
VBA 最新のフォルダ取得
-
Windows10でコマンドプロンプト...
-
VBA フォルダ名に特定の文字を...
-
エクセルVBAで開いているファイ...
-
カンマ区切りのCSVファイルから...
-
Wordで差込印刷した後に別々の...
-
初心者powershellのPS1ファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】テキストファイルを指定...
-
EXCELのVBAでEOFを誤認識
-
アスキー、バイナリーの違い、...
-
同一フォルダにある複数のテキ...
-
Excelにて、フォルダ内のTextフ...
-
VBScript(vbs)での行の取得につ...
-
複数のテキストファイル内の複...
-
uwscでExcelに自動記入
-
テキストファイルの最終行を消...
-
VBAでテキストファイルを最後ま...
-
VBで複数のテキストを結合する...
-
VBSを使用し、指定フォルダ内の...
-
unixのシェルスクリプトで特定...
-
Java バブルソート
-
xmlファイルから文字列の読...
-
vbaでテキストファイル(*.txt...
-
句点で改行
-
【VBA】テキストファイルの内容...
-
スペース区切りのテキストファ...
-
VBでのテキストファイルへ参照...
おすすめ情報