はじめまして、Excel VBAにて困っていますので教えてください。
・以下の構造でExcelを起動しております。
1.VB6で作成したアプリケーションよりExcelで使用するためのデータ抽出を
行います。
2.抽出終了後、上記アプリケーションよりExcelを起動し、VBAマクロ
機能を使用し、自動印刷(複数帳票あり)を行います。(上記アプリケーションは待機状態)
3.印刷終了後、上記アプリケーションに戻ります。
・自動マクロ機能なので、処理終了後に上記3.に戻るのですが、リソース不足に
より(印刷時にリソースが消費されます)ハングアップ状態になる時があります。
そこで、リソース不足を解消したいと思っているのですが、ExcelVBAでリソース
不足を解消する方法がありましたら、教えていただきたいのですが。
・私としては、印刷の時に、次の印刷時に前回の印刷が終了するまでマクロを待機
させたいと思っております。
よろしくお願いします。
No.6ベストアンサー
- 回答日時:
たぶん、印刷スプール中にリソースを消費していると思う。
PrintOut後に印刷スプール終了を待つのはどうでしょう?
と言いつつも、Wordだと簡単だけどExcelの場合は簡単は方法は思い浮かばない。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=103563
todo36さん。ありがとうございました。
参考URLのサンプルを参考に実行したら、リソース不足がかなり解消されました。
出力先がレーザープリンターの為、実感がわきませんでしたが、自宅に持ち帰り、インクジェットプリンタに出力すると、リソース不足が解消されているのがわかり
ました。
No.5
- 回答日時:
>確かにブックの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
この回答への補足
TAGOSAKU7さん。ありがとうございます。
少しだけ改善されましたが、根本的には解決には至りませんでした。
どうも印刷スプール時にリソースを消費しているみたいなので、こちらの方で
解決策があれば教えてください。
No.4
- 回答日時:
マシンスペックは問題ないかと思います。
恐らくあなたの書いているコードに問題があるとしか言えません。
メモリのバグは発見しにくいものなのであなたのコードをよく眺めてごらん
というしか出来ません。
頑張ってください。
この回答への補足
zerosixさん。ありがとうございます。
どうも印刷スプール時にリソースを消費しているみたいなので、こちらの方で
解決策があれば教えてください。
No.3
- 回答日時:
あとー
一つ質問なのですが、これはzerosixさんの発言の延長ですが、Excelを何度も起動してませんか?
OK処理
エクセル起動
ブック1オープン
ブック1クローズ
ブック2オープン
ブック2クローズ
ブック3オープン
ブック3クローズ
エクセル終了(ここで開放)
NG処理
エクセル起動
ブック1オープン
ブック1クローズ
エクセル終了
エクセル起動
ブック2オープン
ブック2クローズ
エクセル終了
エクセル起動
ブック3オープン
ブック3クローズ
エクセル終了(ここで開放)
こんなことにはなってないですよね?
この回答への補足
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%をきってしまいました。
No.2
- 回答日時:
きちんと変数を使用してますか?
オブジェクトやコントロールからの参照を何度も行ってませんか?
例えば
if Form1.Text1.Text = "1" then
elseif Form1.Text1.Text = "2" then
end if
というような処理を行ってませんか?
オブジェクト参照の回数が多いほど、負荷がかかります。
それと セルへの値をセットを一つのセルごとに行うと付加がかかります。
範囲選択をして、まとめて値をセットするようにしましょう。
コードを見てみないと、主にどこで不可がかかっているかがわかりません。。。
No.1
- 回答日時:
マシンスペックが書かれていませんので推測ですが、
プログラムでできることとしては、
オブジェクトをsetすると、きちんと開放してあげたりしている
のでしょうか?
set HogeObj = CreateObject("aaa")
set HogeObj = nothing
と言う感じで、オブジェクトの開放をエラー時でも行って
いるのでしょうか?
この回答への補足
マシンスペックを記述していませんでしたので、記述します。
OS :WINDOWS98
CPU:Pentium2 233MHZ
メモリ:64MB
機種:FMV6233D9
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Excel]ADODBでNull変換されて...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
VBA アプリケーション定義また...
-
VBA シートをコピーする際に Co...
-
vbaで他のブックに転記したい。...
-
VBA 実行時エラー 2147024893
-
エクセルVBAで書式と値の貼付け...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA 別ブックからコピペしたい...
-
エクセル vba ある検索値を別ブ...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
拡張メタファイルにて貼り付け
-
【マクロ】違うフォルダにある...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
【マクロ】AブックからBブック...
-
【ExcelVBA】インデックスが有...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA コードを実行すると画面が...
-
VBA シート名が一致した場合の...
-
VBA 実行時エラー 2147024893
-
VBS Bookを閉じるコード
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【マクロ】違うフォルダにある...
-
[Excel]ADODBでNull変換されて...
-
VBAで複数のブックを開かずに処...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
vbaでvbaProjectのパスワード解...
おすすめ情報