OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

リソース不足を解消したい

  • すぐに回答を!
  • 質問No.168434
  • 閲覧数3503
  • ありがとう数1
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 42% (9/21)

はじめまして、Excel VBAにて困っていますので教えてください。
・以下の構造でExcelを起動しております。
1.VB6で作成したアプリケーションよりExcelで使用するためのデータ抽出を
 行います。
2.抽出終了後、上記アプリケーションよりExcelを起動し、VBAマクロ
 機能を使用し、自動印刷(複数帳票あり)を行います。(上記アプリケーションは待機状態)
3.印刷終了後、上記アプリケーションに戻ります。

・自動マクロ機能なので、処理終了後に上記3.に戻るのですが、リソース不足に
より(印刷時にリソースが消費されます)ハングアップ状態になる時があります。
 そこで、リソース不足を解消したいと思っているのですが、ExcelVBAでリソース
不足を解消する方法がありましたら、教えていただきたいのですが。

・私としては、印刷の時に、次の印刷時に前回の印刷が終了するまでマクロを待機
させたいと思っております。

 よろしくお願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル13

ベストアンサー率 59% (729/1235)

たぶん、印刷スプール中にリソースを消費していると思う。
PrintOut後に印刷スプール終了を待つのはどうでしょう?
と言いつつも、Wordだと簡単だけどExcelの場合は簡単は方法は思い浮かばない。
お礼コメント
akfk

お礼率 42% (9/21)

todo36さん。ありがとうございました。
参考URLのサンプルを参考に実行したら、リソース不足がかなり解消されました。
出力先がレーザープリンターの為、実感がわきませんでしたが、自宅に持ち帰り、インクジェットプリンタに出力すると、リソース不足が解消されているのがわかり
ました。
投稿日時 - 2001-11-14 23:17:46
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル10

ベストアンサー率 31% (47/149)

マシンスペックが書かれていませんので推測ですが、 プログラムでできることとしては、 オブジェクトをsetすると、きちんと開放してあげたりしている のでしょうか? set HogeObj = CreateObject("aaa") set HogeObj = nothing と言う感じで、オブジェクトの開放をエラー時でも行って いるのでしょうか? ...続きを読む
マシンスペックが書かれていませんので推測ですが、
プログラムでできることとしては、
オブジェクトをsetすると、きちんと開放してあげたりしている
のでしょうか?

set HogeObj = CreateObject("aaa")
set HogeObj = nothing

と言う感じで、オブジェクトの開放をエラー時でも行って
いるのでしょうか?
補足コメント
akfk

お礼率 42% (9/21)

マシンスペックを記述していませんでしたので、記述します。

OS :WINDOWS98
CPU:Pentium2 233MHZ
メモリ:64MB
機種:FMV6233D9
投稿日時 - 2001-11-14 11:02:25


  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

きちんと変数を使用してますか? オブジェクトやコントロールからの参照を何度も行ってませんか? 例えば if Form1.Text1.Text = "1" then elseif Form1.Text1.Text = "2" then end if というような処理を行ってませんか? オブジェクト参照の回数が多いほど、負荷がかかります。 それと ...続きを読む
きちんと変数を使用してますか?
オブジェクトやコントロールからの参照を何度も行ってませんか?
例えば
if Form1.Text1.Text = "1" then
elseif Form1.Text1.Text = "2" then
end if
というような処理を行ってませんか?
オブジェクト参照の回数が多いほど、負荷がかかります。


それと セルへの値をセットを一つのセルごとに行うと付加がかかります。
範囲選択をして、まとめて値をセットするようにしましょう。


コードを見てみないと、主にどこで不可がかかっているかがわかりません。。。
  • 回答No.3
レベル12

ベストアンサー率 65% (276/422)

あとー 一つ質問なのですが、これはzerosixさんの発言の延長ですが、Excelを何度も起動してませんか? OK処理 エクセル起動 ブック1オープン ブック1クローズ ブック2オープン ブック2クローズ ブック3オープン ブック3クローズ エクセル終了(ここで開放) NG処理 エクセル起動 ブック1オープン ブック1クローズ エクセル終了 エクセル起動 ブック2 ...続きを読む
あとー
一つ質問なのですが、これはzerosixさんの発言の延長ですが、Excelを何度も起動してませんか?

OK処理
エクセル起動
ブック1オープン
ブック1クローズ
ブック2オープン
ブック2クローズ
ブック3オープン
ブック3クローズ
エクセル終了(ここで開放)

NG処理
エクセル起動
ブック1オープン
ブック1クローズ
エクセル終了
エクセル起動
ブック2オープン
ブック2クローズ
エクセル終了
エクセル起動
ブック3オープン
ブック3クローズ
エクセル終了(ここで開放)

こんなことにはなってないですよね?
補足コメント
akfk

お礼率 42% (9/21)

TAGOSAKU7さん。ご指摘ありがとうございます。
確かにブックのOPEN・CLOSEを数回行っています。

コードは以下のようにしております。

Public Sub XLSM0050_PRINT_SEC()
Dim W_FILE As String
Dim PV_X As Variant
On Error GoTo ERROR_TRAP

Application.StatusBar = True
Application.StatusBar = "EXCEL添付文書出力中"

Open PB_TXTPATH & "INPM0250.TXT" For Input As #1

While Not EOF(1)
W_FILE = ""
Input #1, W_FILE
If W_FILE <> "" Then
Workbooks.Open FileName:="" & W_FILE & ""
ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveWindow.Close
End If
Wend

Close #1
Exit Sub

ERROR_TRAP:
PV_X = ABEND_SEC("1", "XLSM0010", "XLSM0050_PRINT_SEC", "")
End Sub

試しに、印刷コード(ActiveWindow.SelectedSheets.PrintOut Copies:=1)
をコメントアウトして実行すると、リソース不足にはなりませんでした(残50%)

試しに、印刷コード(ActiveWindow.SelectedSheets.PrintOut Copies:=1)
をコメントアウトせずに実行すると、リソース不足にはなりませんでしたが、
リソース残が30%をきってしまいました。
投稿日時 - 2001-11-14 12:57:42
  • 回答No.4
レベル10

ベストアンサー率 31% (47/149)

マシンスペックは問題ないかと思います。 恐らくあなたの書いているコードに問題があるとしか言えません。 メモリのバグは発見しにくいものなのであなたのコードをよく眺めてごらん というしか出来ません。 頑張ってください。 ...続きを読む
マシンスペックは問題ないかと思います。
恐らくあなたの書いているコードに問題があるとしか言えません。

メモリのバグは発見しにくいものなのであなたのコードをよく眺めてごらん
というしか出来ません。
頑張ってください。
補足コメント
akfk

お礼率 42% (9/21)

zerosixさん。ありがとうございます。
どうも印刷スプール時にリソースを消費しているみたいなので、こちらの方で
解決策があれば教えてください。
投稿日時 - 2001-11-14 16:12:52
  • 回答No.5
レベル12

ベストアンサー率 65% (276/422)

>確かにブックのOPEN・CLOSEを数回行っています。 ブックのオープンクローズはOKです。 NGなのはエクセル本体の起動、終了を複数回行った場合です。 それと、画面の描画もメモリを消費しますので、コードをちょっとだけ変更させてみました。 これでもダメですか? Public Sub XLSM0050_PRINT_SEC()   Dim W_FILE As String ...続きを読む
>確かにブックのOPEN・CLOSEを数回行っています。
ブックのオープンクローズはOKです。
NGなのはエクセル本体の起動、終了を複数回行った場合です。

それと、画面の描画もメモリを消費しますので、コードをちょっとだけ変更させてみました。
これでもダメですか?


Public Sub XLSM0050_PRINT_SEC()
  Dim W_FILE As String
  Dim PV_X As Variant
  On Error GoTo ERROR_TRAP

  Application.StatusBar = True
  Application.StatusBar = "EXCEL添付文書出力中"

  Application.ScreenUpdating = False
  Open PB_TXTPATH & "INPM0250.TXT" For Input As #1

    While Not EOF(1)
      W_FILE = ""
      Input #1, W_FILE
      If W_FILE <> "" Then
        Workbooks.Open Filename:="" & W_FILE & ""
        ActiveWindow.SelectedSheets.PrintOut Copies:=1
        ActiveWindow.Close
      End If
    Wend

  Close #1

  Application.ScreenUpdating = True

PGMEND:
  Exit Sub

ERROR_TRAP:
  Application.ScreenUpdating = True
  PV_X = ABEND_SEC("1", "XLSM0010", "XLSM0050_PRINT_SEC", "")
  GoTo PGMEND
End Sub
補足コメント
akfk

お礼率 42% (9/21)

TAGOSAKU7さん。ありがとうございます。
少しだけ改善されましたが、根本的には解決には至りませんでした。
どうも印刷スプール時にリソースを消費しているみたいなので、こちらの方で
解決策があれば教えてください。
投稿日時 - 2001-11-14 16:09:55
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ