- ベストアンサー
エクセルVBAのプリンタ制御で困っています
- エクセル2003を使用しています。Sheet1での印刷を禁止し、Sheet2での印刷はネットワーク上のどのプリンタでも許可する方法を教えてください。
- 現在、Sheet1で印刷禁止を出されると、Sheet2の印刷ダイアログで従前のプリンタのプロパティが呼ばれてしまいます。この現象の回避策を教えてください。
- エクセルVBAのプリンタ制御についての回避策をお教えください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2です。 それではこうしたらどうでしょう? 該当BOOKのSheet1だけ、Ctrl+Pも無効にします。 ThisworkbookモジュールとSheet1のシートモジュールを使います。 Thisworkbookモジュールに Private Sub Workbook_Open() If ActiveSheet.Name = "Sheet1" Then Application.OnKey "^{p}", "" For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB Else Application.OnKey "^{p}" For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "^{p}" For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End Sub Private Sub Workbook_Activate() If ActiveSheet.Name = "Sheet1" Then Application.OnKey "^{p}", "" For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB Else Application.OnKey "^{p}" For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End If End Sub Private Sub Workbook_Deactivate() Application.OnKey "^{p}" For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End Sub Sheet1のモジュールに Private Sub Worksheet_Activate() Application.OnKey "^{p}", "" For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB End Sub Private Sub Worksheet_Deactivate() Application.OnKey "^{p}" For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End Sub
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
乱暴ですがいっそのこと、Sheet1ではメニューを消してしまうというのはどうでしょうか?(印刷だけでなく、書式等も変更できなくなってしまいますが。) Sheet1のシートモジュールに以下をコピペしてみて試してください。 Sheet1がアクティブになるとメニューが隠れ、他シートに移動すればメニューは戻ります。 Private Sub Worksheet_Activate() For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB End Sub Private Sub Worksheet_Deactivate() For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB End Sub
お礼
merlionXXさん、どうも有難うございました。
補足
アドバイスをありがとうございます。 有効な手段だと思います。 しかし、Sheet1でショートカットキー(ctrl + P)が押された場合も Sheet2が同様の症状になってしまい、症状回避が不十分なままとなってしまいます。 アドバイス頂いた点は埋め込んでおくつもりですが、 症状回避の不十分な部分の改善か、若しくは、何故この症状が出てしまうのか? と言う原因なども、もしお分かりになりましたらお教え頂ければ幸いです。 細かい事を言って申し訳ありませんが、宜しくお願いいたします。
- hige_082
- ベストアンサー率50% (379/747)
Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then Cancel = True MsgBox "印刷は禁止されています。" else cancel=false End If End Sub 上の2行を追加してみてください ヘルプにイベント終了後も、制御が保持されるようなことが書いてあるので この場合は「sheet1」以外は、falseにしないと印刷関係の操作ができないのではと思います
お礼
hige_082さん、どうもありがとうございました。
補足
早速のご解答どうもありがとうございます。 ご教示の通り修正して試してみましたが、やはり状況は改善されず、 Sheet2でアクティブプリンタをPrinter2に変更しても従前のアクティブプリンタだった Printer1のプロパティが表示されてしまいます。 Sheet1で禁止メッセージを出さなければこの現象は発生しないのですが、 不思議です。 質問に記載をし忘れてしまいましたが、 Printer1、Printer2共にネットワーク共有されているプリンタです。 もし、他に回避策を思いつくようでしたら、是非ご教示下さい。 宜しくお願いいたします。
お礼
merlionXXさん、有難うございました。
補足
merlionXXさん、有難うございます。 Application.OnKeyメソッドのことは知りませんでした。 キーボードの押下を制御できるのですね。 勉強になりました。 頂いた回答で今回の症状は回避できそうです。 大変助かりました。 ただ、皆さんWorkbook_BeforePrintのCancelを使っていて私のような症状は出ていないのでしょうか? また、別の機会に今度はこの症状の事を質問してみようと思います。 本当に有難うございました。