Excel VBAでの連続印刷

記事
IT・テクノロジー
Excelでの印刷は基本的に「遅い」。
ですから特に連続印刷をさせる為には工夫が必要になって来ます。
Forなどのループをいくつか重ねてつくっていますが、いざprintのメソッドになった時点でフリーズしたり、プリンターから出力されるのに1分以上の時間がかかったりとスムーズな動きをしてくれないといった問題が発生します。
いろいろ調べると、他の人達も同じような問題にぶち当たっているようです。どうもループがバックグランドで終了しないうちに、次の処理に移ってしまう事で生じるようなのです。(想像の域はでないのですが。)
ループの後に印刷設定。これもまた思ったよりも時間を要するようです。
なんとか、1ページ、2ページ、3、4と印刷が進んでゆきますが、とにかく遅い。「これじゃ、自動化と言わん!」と思わず叫んでしまった。
悩んだ末に、苦肉の策で途中にメッセージBOXを挟むというやり方で解決させます。
しかし、印刷の途中に必ず出て来るメッセージBOXはなんともカッコ悪いし
いちいち「OK」のボタンを押すのは面倒な作業です。一枚や二枚ならそんなに苦にならないのですが、これが何十枚という事になると話は変わります。
何かいい解決方法はないかとネットを探しまわると、同様の問題をWindowsのAPIで解決していました。プログラムの途中でAPIを使って一時ストップさせるという技で解決していました。
思わずにっこりしたのですが、APIはWindowsのバージョンやofficeのバージョンが違うと上手く動かない事があり、どのような環境で使われるのかわからない事を考えると、これは”ボツ”。ぬか喜びでした。がっかりです。
でも、「途中で止める」がヒントになりました。メッセージBOXを入れるというのも「途中で止める」事なのでした。「なぜ気づかなかったのか」と反省。
「waitメソッドが使えるじゃないか」と思い立ち早速コード追加して動かしてみると格段のスムーズさ。「おーいいぞ」
でもなんかぎこちなさが残る・・・・
調べると「印刷設定」が以外と時間がかかっているようなのです。
printのメッソドの前に「印刷設定」を入れ込んでいるのでどうもこれが問題らしいということで、いろいろ探すと「ありました。ありました。」頭のいい人は世の中に沢山いました。
プリンタとの通信を一時的に止め、「印刷設定」が終わった後に通信を再開させると格段に印刷が早くなるとの事。
早速試すと「おお~早い」別物です。劇的変化です。画面ではあっという間に「処理終了」のメッセージ。ショボいプリンタは果てしなく印刷を続けていました。
Excelの可能性がまたひとつ広がった感じです。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す