
VBA初心者です。
イベントプロシージャ 「beforeprint」 を使用して
印刷時、不要なオートシェイプを不可視にしています。
~~ visible = false
にすると、確かに印刷時に消えてくれるのですが
印刷が終わった後も消えたままなのです。
印刷が終わったあと、オートシェイプを再可視化するには
どうしたらよろしいでしょうか??
可視化に限らず、印刷後(もしくは印刷プレビューを閉じた後)
なんらかの処理を加える方法でもかまいません。
ヒントだけでもいいので、なにとぞアドバイスの程よろしくお願いいたします!
No.1ベストアンサー
- 回答日時:
こんばんは。
以下のように、元にもどすのに、ほんのちょっと時間差を設ければよいはずです。
印刷中は、印刷バッファに送られますから、オートシェイプは、ない状態のままですし、シートは待機モード中です。その間に、命令を送ってしまえばよいと思います。なお、こういう場合、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
この回答への補足
申し訳ありません、beforeprintの方は実行されるのですが、
その後のTestExecの方が実行されません。
timevalueを変えてみたのですが、元にもどらないままになってしまいます…
エクセルのバージョンが2001なのですが、何か関係あるのでしょうか…?
ご回答いただきありがとうございます。
OnTimeMethodというのははじめて知りました!
時間差をつけられるというのはとても画期的な機能ですね。
内容を勉強して、早速試してみたいと思います。
No.2
- 回答日時:
オートシェイプを印刷したくないだけなら、イベントを使わずとも
シェイプ右クリックメニューから[オートシェイプの書式設定]-[プロパティ]で
「オブジェクトを印刷する」のチェックボックスを外すと印刷対象外にする事ができます。
もしコードで対応したいなら
Sheets("Sheet1").Shapes("シェイプ名").DrawingObject.PrintObject = False
選択して実行する場合は
Selection.PrintObject = False
手動でも良いので .PrintObject = False に設定しておいて、
逆に、印刷したい時だけ .PrintObject = True にしても良いかと。
この回答への補足
こちらから失礼いたします。end-uさま申し訳ありません。
>WindFallerさま
下記補足にて、ontime以降が実行されないと書きましたが、私の手違いでした。
WindFallerさまのご回答で、無事実行されましたことをご報告させていただきます。
まことにありがとうございました。本当に助かりました^^
ご回答ありがとうございます。
今回はオブジェクトを印刷したくないという以外に、セルの非表示・グラフの移動といった
印刷時のレイアウト要素が強いので、オブジェクトを印刷対象外にするだけでは対応できない
現状があります。
しかしend-uさまのアドバイスは非常に勉強になりました。
特にオブジェクトを印刷対象外にすることができるというのは知りませんでした。
このツールを活用していきたいと思います!^^
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA の印刷後の判定
Excel(エクセル)
-
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
エクセルのマクロ
Excel(エクセル)
-
-
4
EXCEL VBA 印刷プレビューダイアログのボタン操作を判定したい
Visual Basic(VBA)
-
5
エクセルvbaでdocuworksprinterの出力先を設定
Visual Basic(VBA)
-
6
VBAで印刷スプール終了の判定をする
Visual Basic(VBA)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
印刷をキャンセル
Excel(エクセル)
-
10
エクセルで複数のシートのクリアをしたいです
Excel(エクセル)
-
11
マクロを使って、シート印刷完了時にシートに”完了”マークをつけたいのですが
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
印刷ダイアログを表示させたくない
-
vbaでPDFファイルが印刷されない
-
スプーラを使わずに印刷する
-
プリンタとジョブのステータス...
-
イベントプロシージャ 印刷が...
-
VB.NETで罫線付きのデータを印...
-
VBでExcel印刷する時のプリンタ...
-
リンク先のページを印刷したい
-
出力するプリンタを指定したい。
-
2回以上PDFをコピーや印刷がで...
-
オートメーションエラー(214741...
-
cプログラムを読んでいると put...
-
ご存知の方がいましたら教えて...
-
VBAでArrayListを使う為の「msc...
-
VBAでIEが起動しているか...
-
Designer.vbは直接コードをいじ...
-
意味不明の実行時エラーで困っ...
-
C++初心者です。 debug asserti...
-
VB.NETで参照設定したDLLの修正...
-
wshで既に立ち上がっているアプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷要求順番と印刷出力順番が...
-
印刷ダイアログを表示させない方法
-
PHPでPDFファイルの直接印刷
-
2回以上PDFをコピーや印刷がで...
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
VBAで印刷の成功判定
-
VB6上から印刷ダイアログを表示...
-
ACCESSで設定した帳票の用紙サ...
-
クリレポのプリンタ設定について
-
オートメーションエラー(214741...
-
プリンターを指定して印刷するには
-
VBでExcel印刷する時のプリンタ...
-
EXCELファイルの複数ダウンロー...
-
VBAで印刷スプール終了の判定を...
-
ActiveReportsを使って[印刷ダ...
-
イベントプロシージャ 印刷が...
-
VB.NET+ActiveReports で印刷...
-
A4の2枚をA3の1枚にする編集方法?
-
VBからプリンタに出力する時に...
おすすめ情報