|
▼bykinさん、しのしのさん:
ありがとうございます。
お陰様で違う視点に着目することができました。
ご指摘頂いた点から検証してみました。
結果、思いもしなかった原因が判明し、新たに頭を悩ませる事になりました。
原因は「コピー元のファイル」のバージョン違いでした。
開発は'97で行っているのですが、サンプルで貰った元ファイルが2000で
作成されたものだったようです。
今後、これを事前に判別するのが課題となります。
>たとえば、"データ操作"中に、開いているブックのオブジェクトを取得しているのに、
>きちんと、参照解放せぬままCLOSEしようとしていませんか?
変種処理は処理毎にFunctionを作成しているのですが、
解放ロジックは必要なのでしょうか?
>#ブックのシートを参照設定しておいて、その解放がきちんとされていない。
この参照設定の解放というのは、何をすれば良いのでしょうか。
以下、検証詳細です。
コピー元のファイルにはマクロ(コマンドボタン/処理は軽いもの)や
セル式が埋め込まれたものですが、サイズは240kb程度です。
シンプルにOpen→SaveAs→Closeとした場合にも処理ができなかったので、
コピー元ファイルを適当な新規ブックで実行してみたところ、処理が成功しました。
次に、問題のファイルを使用して、Saveの直前に
Application.DisplayAlerts = True
と記述し、システムのメッセージを表示させたところ、
「このエクセルは最新版のExcelで作成されました」のメッセージが・・・。
このメッセージに対して、手動で「はい」を押下すれば正常に保存され、
「いいえ」を押下するとCloseされずに開いたままです。
処理の最初に
Application.DisplayAlerts = False
を記述したので、「いいえ」を押下したのと同じ状態で処理が中断されたようです。
それから、以前Bykinさんに教えていただいたSleepはWaitよりも効果を得ました。
処理速度が落ちてしまうので最善の策とは言えませんが、各ファイル毎に
Sleep 5000(5秒)
とすれば、100ファイルの処理も可能となりました。
(3000以下では強制終了となりました)
ありがとうございました。
|
|