• ベストアンサー

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

  • エクセル2007です。VBA不具合について教えてください。

    不具合ついてですが、任意のセルに何か入力中の時にA1の表示が停止してしまうことです。 入力中でもこれを回避する方法がありましたら是非お知恵を拝借したいと思います。よろしくお願いします。 現在の環境は以下のとおりです。 セルA1は=now()で秒まで表示。 横軸に日付(B2=2010/1/18~I2=2010/1/25)の8日、縦軸に時間(A3=0~A27=24)の24時間割があるシートです。 日付と時間(HOUR)がマッチしたリアルタイムセルのみを緑色(条件付き書式にて)に塗りつぶすスケジュール表を作成中です。 標準モジュールは次のとおりです。 Sub Auto_Open() Application.OnTime Now + TimeValue("00:00:01"), "timer" End Sub Sub timer() With Worksheets("Sheet1") If .Cells(1, 2) <> "" Then Exit Sub .Cells(1, 1).Calculate End With Application.OnTime Now + TimeValue("00:00:01"), "timer" End Sub

  • ontimeのリセット方法

    簡単な問題を出すexcelを作っています。 問題を出した時点でタイマー(ontime)を出し、 1分間だけ猶予を持たせ、 回答が出ればリセットをする。 間に合わなければ「残念でした」を出そうとしています。 Sub start8() Application.OnTime Now + TimeValue("00:01:00"), "timeout8" End Sub Sub reset8() Application.OnTime Now + TimeValue("00:01:00"), "timeout8", , False End Sub Sub timeout8() "残念でした。" End Sub 見よう見まねで上記の通り書きましたが、 分からないのは、これだとresr8の引き金を引いてから、1分後のように思います。 ここはどのように書けばいいのでしょうか。 Application.OnTime Now + TimeValue("00:00:00"), "timeout8", , Falseのように書いてみましたが、 エラーになります。 制限時間内にリセットボタンを押せば何事もなかった、という風にやりたいのです。 宜しくお願いします。

  • Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが

    Excel2003 VBAでタイマーを組んでマクロを走らせたいのですが、以下のエラーメッセージが出ました。 マクロ "C:\aaa\Timer.xls'!Record1'が見つかりません。 マクロは、Timer.xlsブックのThisWorkbookに記述しています。 ---------------------------------------------------------------------- Sub timer1() 指定時刻 = TimeValue("09:00:00") 終了時刻 = TimeValue("11:00:00") Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- Sub Record1() Dim sh1, sh2 If TimeValue(Now) >= 終了時刻 Then '終了時刻になら終わる MsgBox "終了時刻になりました。" Application.CutCopyMode = False Exit Sub End If Set sh1 = Worksheets("1") Set sh2 = Worksheets("2") sh1.range("G5:G506").Copy 'コピー sh2.range("Q5:Q506").PasteSpecial Paste:=xlValues Selection.Offset(0, 2).Select '2行ずらす 指定時刻 = Now + TimeValue("00時05分00秒") '5分後 Application.OnTime 指定時刻, "Record1" End Sub ---------------------------------------------------------------------- どこを直せばよろしいのでしょうか? よろしくお願いします。

  • Excel TimeValueをしようしたループマクロの待機中のCPU開放について教えて頂けませんでしょうか?

    質問1: 10秒間隔で”解析1”のマクロを実行する下記のPrgですと待機の10秒間 ビジーになってしまいます。解決方法ご存知の方教えて下さい。 Sub 解析1実行用ループマクロ() Do 指定時刻 = Now + TimeValue("0時00分10秒") '10秒後 待ち時間 = TimeValue("0時00分05秒") Application.OnTime TimeValue(指定時刻), "解析1", TimeValue(待ち時間) Loop End Sub  (マクロ集引用しただけで理解はあまりできていません。) 質問2: ループを終了させるのにEscで終わらせています。Escをボタンに登録しようと思ってますが他にスマートな方法有りますでしょうか?

  • VBA 制限時間を、一時停止させたい

    Excel VBAでの質問です。Excel2007使用です。 ユーザーフォームに制限時間と、制限時間を一時停止させるコマンドボタンを作りたいです。制限時間(60分)は、下ので実行できたのですが、一時停止ができるか、わかりません。 Private Sub 制限時間_Click() Dim myTime As Date Dim myLImit As Date myLImit = Now + TimeValue("1:00:00") Do While myLImit > Now DoEvents myTime = myLImit - Now 分表示.Caption = Minute(myTime) & "分" 秒表示.Caption = Second(myTime) & "秒" Loop msgbox "終了です。" Unload Me End Sub できれば、ボタンを押すとmsgbox"一時停止"を表示させ、表示させている間は、制限時間を一時停止させたいです。制限時間、一時停止ができれば、違うコードでもかまいません。 どうぞよろしくお願いします。

  • エクセル時間毎ごとにマクロを実行するやり方。

     初めまして、よろしくお願いします。より正確な指定時間毎にマクロを実行させるやり方を考えています。  1分毎ごとにマクロを実行する nextTime = Now() + TimeValue("00:01:00") Application.OnTime nextTime, "時間毎ごとに実行" というやり方は解るのですが、 Application.OnTime TimeValue("09:00:00"), "時間毎ごとに実行"  この指定時間("09:00:00")に実行するマクロを利用し ("09:01:00")、("09:02:00")、("09:03:00")、("09:04:00")、("09:05:00"),・・・・・の時間、秒が00になると("hh:ss:00")マクロを実行されるやり方は有るのでしょうか。  もし有るのでしたら、よろしくお願いします。

  • Application.OnTime が動作するタイミング(vba)

    まず10秒たってからtest2222と表示させて、次にtestと表示させるプログラムを以下のように作成したのですが、なぜか先にtestが表示されて、次にtest2222が表示されます。 なぜなのでしょうか? 分かる方がいれば教えてください。 よろしくお願いします。 Sub aa() Application.OnTime Now + TimeValue("00:00:10"), "kara" MsgBox "test" End Sub Sub kara() MsgBox "test22222" End Sub

  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、

  • OnTimeの取り消しについて

    ヘルプには次のように記述がありますが、指定時刻に 実行させるプロシージャーの取り消しはサンプルの手順 で動作しますが、何秒後・・・を指定した場合のサンプル はうまく取り消せません。"実行時エラー '1004'"と なります。 この場合、どのように記述すればいいのでしょうか? 使用例 次の使用例は、現在から 15 秒後に my_Procedure を実行します。 Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 次の使用例は、午後 5 時に my_Procedure を実行します。 Application.OnTime TimeValue("17:00:00"), "my_Procedure" 次の使用例は、前の使用例で設定した OnTime メソッドの設定を取り消します。 Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False

  • VBAでスクリ-ンセーバーを起動させない方法

    会社のパソコンですが、スクリーンセーバーが設定されていて、一定時間がたつと自動的に起動します。 この設定は変更ができないようにされています。 今般、そのうちの一台に社内での案内用のデータを記載したエクセルのファイルを常時表示させようと思います。 そうなるとスクリーンセーバーがじゃまになります。 設定を解除できるとよいのですが、社内ルールで設定は変えられません。 しかたなく、人間が手でキーボード等を打ち込むかわりにマクロで画面を動かせばスクリーンセーバーは起動しないのではないかと考え、下記のコードを書いてみました。 Sub kidou() Call jikkou01 End Sub Sub jikkou01() Application.SendKeys "{PGDN}" Application.OnTime Now + TimeValue("00:00:10"), "jikkou02" End Sub Sub jikkou02() Application.SendKeys "{PGUP}" Application.OnTime Now + TimeValue("00:00:10"), "jikkou01" End Sub コードはちゃんと動くのですが、スクリーンセーバーはやはり立ち上がってしまいます。 なにかよい方法はないでしょうか?

専門家に質問してみよう