
いつもお世話になっています。
Excel VBA で不明な点が出てきたので質問させていただきます。
処理順として
1.AccessからExcelを出力し、出力後はそのまま表示しておく。
2.表示してあるExcelをユーザーが印刷する。
3.印刷したシートの見出しの色を変更する。
の3つなのですが、3の処理をExcelマクロで実行する際に、
印刷が実行されたかどうかの判別方法がわからないのです。
印刷直前でも構わないと思い、BeforePrint イベントを調べて使用してみたのですが、
印刷プレビューでもイベントが走ってしまい、ダメでした。
印刷実行なのか、プレビューなのか区別が出来る方法があればとも思っているのですが…。
ご存知の方、ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは。
印刷したものと、プレビューしたもののイベントの区別をしたいということですね。いくつか方法を考えてみましたが、実際に印刷したかどうかは、API関数でしか把握できませんが、かなり大掛かりで、リスクを背負うことになってしまいます。私としては、あまりお勧めできません。
私が、実際の開発で、Excelの中だけでどう考えるかというと、あまり良い案は浮かびません。
'<ThisWorkbook>
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If PrinterFlg = False Then
Cancel = True
End If
End Sub
'<標準モジュール>
Public PrinterFlg As Boolean
'<シートモジュール>
Private Sub CommandButton1_Click()
PrinterFlg = True
ActiveSheet.PrintOut
'他の作業
PrinterFlg = False
End Sub
こうすれば、PrinterFlg がTrue にならない限りは、印刷もプレビューもされませんので、後は、開発側の設けたボタンで、印刷が把握できます。そのボタンを押した時のみ、有効になるわけです。ユーザー側に余計なことをしてもらいたくない場合は、メニューバーやツールバーも隠します。自分が望むボタンだけを置くことにします。
ここまでは良いと思いますが、しかし、印刷プレビューを許す場合は、印刷プレビュー画面から印刷が可能ですから、そこでは、もう BeforePrint イベントが利きません。印刷プレビューのイベントで、例えば、PDF出力などのダミーのプリンタ・ドライバに切り替えるぐらいしか、今のところ思いつきません。やはり、API関数での制御になってしまいます。
根本的にPrint Out Preview と Print Out の違いというは、Excel上ではないかもしれません。
ちなみに、印刷プレビューのイベントというのは、以下のようなものです。
'Class 1
Public WithEvents myPrinterButton As CommandBarButton
Private Sub myPrinterButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Application.ActivePrinter = " 別のプリンタドライバ "
End Sub
'標準モジュール
Dim myClass As Class1
Sub PreviewEventSetting()
Set myClass = New Class1
Set myClass.myPrinterButton = Application.CommandBars("Standard").FindControl(, 109)
End Sub
なお、PreviewEventSetting を、ThisWorkbook の Open イベントから、Call すればよいと思います。
アドバイスありがとうございます。
API関数の使用になりますか。
それ以外となると、やはりユーザーに印刷プレビューをさせない方法をとるしかないのですかね。
ありがとうございます。参考にさせていただきます。
No.2
- 回答日時:
こんにちは。
Accessからのデータを常に決まったブックの決まったシートに出力するようにすれば、
案1.
シート上に、Print用とPreview用のボタンを配置
案2.
Print用とPreview用のボタンを配置したユーザー定義のフローティングメニューを表示
案3.
Print用とPreview用のボタンを配置したモードレスのユーザーフォームを表示
このような方法が簡単では、と思います。
但し、何れの場合もメニューバー、ツールバー等は非表示にしておくことは言うまでもありません。
以上です。
回答ありがとうございます。
ツールバー・メニューバーでプレビュー禁止でいきたいと思います。
ありがとうございます。今後の為、頂いた回答の案も参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBA 印刷プレビューダイアログのボタン操作を判定したい
Visual Basic(VBA)
-
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
イベントプロシージャ 印刷が終わったあと…
Visual Basic(VBA)
-
-
4
VBAで印刷の成功判定
Visual Basic(VBA)
-
5
VBAで印刷スプール終了の判定をする
Visual Basic(VBA)
-
6
印刷をキャンセル
Excel(エクセル)
-
7
マクロを使って、シート印刷完了時にシートに”完了”マークをつけたいのですが
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
12
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
13
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
14
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
17
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
18
セルの文字を「印刷時だけ非表示」にしたいです。
Excel(エクセル)
-
19
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
20
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word2010の差し込み印刷で結果...
-
エクセルの印刷で、テキストボ...
-
Wordで画面に出てこない文字が...
-
Excel VBA の印刷後の判定
-
ワードで、ヘッダーの文字が表...
-
wordで作ったテキストボックス...
-
ワードで作成した文書を印刷す...
-
存在しない文字が印刷されます...
-
一太郎2009で白紙を表示しない...
-
印刷できないページがある
-
イラストレーターのデータをワ...
-
Draftsight でカラー印刷するた...
-
エクセルにテキストボックスを...
-
WORDでヘッダーを印刷しない方...
-
EXCEL2013で開くと図形の位置が...
-
印刷プレビューにはうつるが印...
-
サブレポートのレポートフッタ...
-
筆ぐるめで宛て先印刷・・役職...
-
エクセルで自動改行を使ってい...
-
word(webレイアウト)縮小印刷に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Word2010の差し込み印刷で結果...
-
Wordで画面に出てこない文字が...
-
エクセルの印刷で、テキストボ...
-
ワードで作成した文書を印刷す...
-
ワードで、ヘッダーの文字が表...
-
ワード差し込みで結果のプレビ...
-
エクセルにテキストボックスを...
-
WORDでヘッダーを印刷しない方...
-
Excel VBA の印刷後の判定
-
word 白黒で印刷プレビュー
-
ワードのズームの固定
-
ワードの文章と印刷プレビュー...
-
WORDのVBAで印刷プレビューの制...
-
Word フィールドコードの印刷
-
存在しない文字が印刷されます...
-
Wordの文書作成で、画面上は一...
-
貼り付けた画像が印刷すると横...
-
サブレポートのレポートフッタ...
-
ビジオファイルをPDF形式で保存...
-
EXCEL2013で開くと図形の位置が...
おすすめ情報