
お世話になります。
引数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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
人生でいちばんスベッた瞬間
誰しも、笑いをとろうとして失敗した経験があると思います。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBSでフォルダ内のテキストファイルを全て連結するには?
その他(プログラミング・Web制作)
-
VBS ファイルマージ処理
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】テキストファイルを指定...
-
EXCELのVBAでEOFを誤認識
-
アスキー、バイナリーの違い、...
-
Excelにて、フォルダ内のTextフ...
-
同一フォルダにある複数のテキ...
-
スペース区切りのテキストファ...
-
Java:ファイルの読み込みはどれ...
-
VBでのテキストファイルへ参照...
-
unixのシェルスクリプトで特定...
-
ファイルの存在の有無を調べたい
-
VBで複数のテキストを結合する...
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
エクセルvbaでdocuworksprinter...
-
ExcelブックをGoogleスプレッド...
-
【ExcelVBA】UTF-8の文字コード...
-
カンマ区切りのCSVファイルから...
-
エクセルで複数のコメントのサ...
-
バッチファイル XCOPYで上書き...
-
エクセルVBAで一つ上の階層...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】テキストファイルを指定...
-
同一フォルダにある複数のテキ...
-
EXCELのVBAでEOFを誤認識
-
アスキー、バイナリーの違い、...
-
テキストファイルの最終行を消...
-
複数のテキストファイル内の複...
-
uwscでExcelに自動記入
-
Excelにて、フォルダ内のTextフ...
-
VBScript(vbs)での行の取得につ...
-
VBSを使用し、指定フォルダ内の...
-
VBS【特定のレコード長で件数取...
-
VBAでテキストファイルを最後ま...
-
VBでのテキストファイルへ参照...
-
VBで複数のテキストを結合する...
-
ダイアログのタイトルを変更する
-
スペース区切りのテキストファ...
-
Java バブルソート
-
unixのシェルスクリプトで特定...
-
句点で改行
-
定型書式のテキストファイルをE...
おすすめ情報