- ベストアンサー
イベントプロシージャ 印刷が終わったあと…
VBA初心者です。 イベントプロシージャ 「beforeprint」 を使用して 印刷時、不要なオートシェイプを不可視にしています。 ~~ visible = false にすると、確かに印刷時に消えてくれるのですが 印刷が終わった後も消えたままなのです。 印刷が終わったあと、オートシェイプを再可視化するには どうしたらよろしいでしょうか?? 可視化に限らず、印刷後(もしくは印刷プレビューを閉じた後) なんらかの処理を加える方法でもかまいません。 ヒントだけでもいいので、なにとぞアドバイスの程よろしくお願いいたします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 以下のように、元にもどすのに、ほんのちょっと時間差を設ければよいはずです。 印刷中は、印刷バッファに送られますから、オートシェイプは、ない状態のままですし、シートは待機モード中です。その間に、命令を送ってしまえばよいと思います。なお、こういう場合、Excelのバージョンによっては違ったアイデアもあるはずです。 以下の3秒でよいのかは、調整してください。 '//ThisWorkbook モジュール Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim sp As Shape For Each sp In ActiveSheet.Shapes sp.Visible = msoFalse Next ThisWorkbook.OnTimeMethod End Sub Sub OnTimeMethod() Application.OnTime Now + TimeValue("00:00:03"), "ThisWorkbook.TestExec" End Sub Sub TestExec() Dim sp As Shape For Each sp In ActiveSheet.Shapes sp.Visible = msoTrue Next End Sub
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
オートシェイプを印刷したくないだけなら、イベントを使わずとも シェイプ右クリックメニューから[オートシェイプの書式設定]-[プロパティ]で 「オブジェクトを印刷する」のチェックボックスを外すと印刷対象外にする事ができます。 もしコードで対応したいなら Sheets("Sheet1").Shapes("シェイプ名").DrawingObject.PrintObject = False 選択して実行する場合は Selection.PrintObject = False 手動でも良いので .PrintObject = False に設定しておいて、 逆に、印刷したい時だけ .PrintObject = True にしても良いかと。
お礼
ご回答ありがとうございます。 今回はオブジェクトを印刷したくないという以外に、セルの非表示・グラフの移動といった 印刷時のレイアウト要素が強いので、オブジェクトを印刷対象外にするだけでは対応できない 現状があります。 しかしend-uさまのアドバイスは非常に勉強になりました。 特にオブジェクトを印刷対象外にすることができるというのは知りませんでした。 このツールを活用していきたいと思います!^^ ありがとうございました。
補足
こちらから失礼いたします。end-uさま申し訳ありません。 >WindFallerさま 下記補足にて、ontime以降が実行されないと書きましたが、私の手違いでした。 WindFallerさまのご回答で、無事実行されましたことをご報告させていただきます。 まことにありがとうございました。本当に助かりました^^
お礼
ご回答いただきありがとうございます。 OnTimeMethodというのははじめて知りました! 時間差をつけられるというのはとても画期的な機能ですね。 内容を勉強して、早速試してみたいと思います。
補足
申し訳ありません、beforeprintの方は実行されるのですが、 その後のTestExecの方が実行されません。 timevalueを変えてみたのですが、元にもどらないままになってしまいます… エクセルのバージョンが2001なのですが、何か関係あるのでしょうか…?