
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 VBA 印刷プレビューダイアログのボタン操作を判定したい
Visual Basic(VBA)
-
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
-
4
エクセルのマクロ
Excel(エクセル)
-
5
VBAで印刷スプール終了の判定をする
Visual Basic(VBA)
-
6
ACCESSで印刷プレビューをした後の印刷ボタンを押したイベント取得につて
その他(プログラミング・Web制作)
-
7
印刷をキャンセル
Excel(エクセル)
-
8
エクセルvbaでdocuworksprinterの出力先を設定
Visual Basic(VBA)
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
エクセルVBAでmeに相当するものは?
Excel(エクセル)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
Excel VBA ワークシートに貼られたボタン名(Caption)をセルの値から取得するには
その他(プログラミング・Web制作)
-
13
エクセルで複数のシートのクリアをしたいです
Excel(エクセル)
-
14
マクロを使って、シート印刷完了時にシートに”完了”マークをつけたいのですが
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
-
17
マクロ実行後に別シートの残像が残り、オブジェクトが見えなくなる
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでの自動印刷
-
プリンターを指定して印刷するには
-
印刷ダイアログを表示させない方法
-
EXCELファイルの複数ダウンロー...
-
PHPでPDFファイルの直接印刷
-
インターネットで表示させたペ...
-
VB2008で0ページの印刷ジョブを...
-
VBAにて指定したセルをプルダウ...
-
クリレポのプリンタ設定について
-
VB6上から印刷ダイアログを表示...
-
A4の2枚をA3の1枚にする編集方法?
-
オートメーションエラー(214741...
-
VBA、AシートとBシートを別々の...
-
印刷ダイアログを表示させたくない
-
ACCESSで設定した帳票の用紙サ...
-
印刷要求順番と印刷出力順番が...
-
意味不明の実行時エラーで困っ...
-
Designer.vbは直接コードをいじ...
-
「読み込み違反」が起きたとき...
-
Visual Studio 「AnyCpu」について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷要求順番と印刷出力順番が...
-
印刷ダイアログを表示させない方法
-
印刷ダイアログを表示させたくない
-
vbaでPDFファイルが印刷されない
-
2回以上PDFをコピーや印刷がで...
-
プリンターを指定して印刷するには
-
PHPでPDFファイルの直接印刷
-
クリレポのプリンタ設定について
-
ACCESSで設定した帳票の用紙サ...
-
VBscriptでPDFファイルを直接印...
-
VBAで印刷スプール終了の判定を...
-
Eclipseを使ってソースを印刷し...
-
VB2005から複合機を使い自動FAX...
-
Javaから直接プリンターへ印刷...
-
C++Builder5で画像データを用紙...
-
VBAで印刷の成功判定
-
F-BASICで印刷データをスプール...
-
オートメーションエラー(214741...
-
VBAで不特定枚数印刷をしたいで...
-
EXCELファイルの複数ダウンロー...
おすすめ情報