• ベストアンサー

VBAでスクリプトを一時的に止めたい

 VBAでExcelの表に対応するワードのファイルを次から次へとプリントアウトしているのですが、PCの能力の問題か途中でハングアップしてしまいます。その際には、メモリー不足と出るのですが、このマシンは、これ以上メモリーが積めません(512MBでMax)ので、メモリー開放のソフトを入れたのですが、これも追いつきません。そこで、スクリプトを一時停止させて、その間にメモリーを解放させて、また、プリントアウトしてということで回避しようかと思いますが、スクリプトの停止方法がわかりません。  どこかで Application.OnTime Now + TimeValue("00:01:00")  これで、1分待機できると読んだのですが、うまくいきません。どのようにしたら良いのでしょうか?  ちなみに、プリントアウトの内部処理が終わった頃に、再開したいので、秒単位ではなく分単位で停止したいのですが。  もしくは、ほかに方法がありますでしょうか?

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

  • ベストアンサー
  • -boya-
  • ベストアンサー率35% (176/494)
回答No.3

時間を停止させる方法として現実的かどうか良く分かりませんが、 ループ開始の時間を変数に入れておき、別ループで一定時間 経ったかを判断させるって無理ですかね? (現実的かどうかは別ですが、、、) ループA開始 変数1 = Now  ループB開始   (現在-変数1)>1分ならループBから抜ける  ループB終了 ...以下省略 もしくはプリンタのジョブを列挙するAPI関数を使用して、該当する ジョブの状態を確認するという方が、解として現実的かもしれません。 API関数については参考URLを参照してください。

参考URL:
http://www.vbvbvb.com/jp/gtips/0351/gEnumJobs.html
dogs59
質問者

お礼

ありがとうございます。 APIってわかりませんが、参考にします。

その他の回答 (3)

回答No.4

待機するのでしたらAPIのSleepを使えば どうでしょうか? Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) と宣言 あとは止めたいところで Sleep 10000 'ミリ秒で指定10000=10秒 とすればプログラムは単純に停止します。 その間に、プリントスプールにたまっている プリントファイルが、ある程度、はければ 少しは解消されるかもしれません。 参考URL http://www.vbvbvb.com/jp/gtips/0401/gSleep.html

参考URL:
http://www.vbvbvb.com/jp/gtips/0401/gSleep.html
dogs59
質問者

お礼

ありがとうございます。 APIというのが良くわかりませんが、色々と調べて参考にします。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

途中でハングアップ、及びメモリエラーと言うことなので。 開いたワードファイルを閉じる処理入れています? ワードの外部操作がわからないですが、印刷を実行したあと、印刷終了まで待機する方法ありますか?あるとして、それ使ってます? イメージとして下のような感じです。 ループ開始 ファイルオープン 印刷(印刷終了まで待機) ファイルクローズ ループ終了 ちなみに、ワードの印刷終了を待つ方法を探している最中に、下のようなソフトを見つけました。 印刷終了を待つ方法は見つかりませんでしたが。 http://www.vector.co.jp/soft/win95/writing/se299164.html

参考URL:
http://www.vector.co.jp/soft/win95/writing/se299164.html
dogs59
質問者

お礼

ありがとうございます。 指摘されている件についてもよくわかっていないのですが、 ループ開始 (これはあります。当然ですね) ファイルオープン (これもあります) 印刷(印刷終了まで待機) (印刷終了までの待機命令がわからないので、時間を指定して止めておこうと思っています) ファイルクローズ (ここもあります) ループ終了    紹介していただいたソフトを見てみたのですが、確かにファイルを次から次へとプリントアウトするには良いようですが、私の場合、それは、スクリプトの一部で、他の作業と連動しているためちょっと用途と合わないようです。  No.1の方の回答についてもそうですが、なかなか思った通りにいかないものですねぇ。

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

この場合のメモリ不足はCドライブの容量の不足でしょう。Cドライブは、どのくらい容量が空いていますか? たぶん1G以下でしたら該当するかもしれません。2G~3G以上の空き容量を確保してからやってみてください。スワップとプリントスプールで足りなくなっていると思いますので。

dogs59
質問者

お礼

 確かにCドライブの空きがありません。 ただ、このマシン元々、Cドライブが4Gしかなく、データは全てDドライブに入っていますので、アプリケーションなどだけで一杯になっています。  やはり、パーテーションマジック等を使って、Cドライブの空きを増やす他の方法はないのでしょうか?

関連するQ&A