質問: 「一太郎2017」ではメニューの「印刷」を押せないようにする機能があります 。 「Excel」のVBAではExcelブックを印刷できないようにメニューの「印刷」を クリックさせないようにするマクロがあります。 ---------------------------------------------------------------------------------- VBAでExcelファイルを印刷できないようにする方法 ---------------------------------------------------------------------------------- 「一太郎2017」および「Excel」でできるので、「Word」のVBAでも同様にWord 文書を印刷できないようにメニューの「印刷」をクリックさせないようにするマ クロが組めるのではと思っておりますが、どのようなマクロを組んでいいかわか りません。 Visual Studio Tools for Officeのアドインをインストールすれば、行えるよう ですが、インストールできない環境のため、VBAだけで行う方法はありませんで しょうか。 --------------------------------------------------------------------- 印刷不可にする(Word編) ---------------------------------------------------------------------- VBAに詳しい方がいらっしゃいましたらご教示を頂けませんでしょうか。
回答: こんにちは。 ご期待に副える内容ではなさそうですが、 次のステップに進めるよう参考になることがあれば幸いです。 まず論点を明確にする為に少し脇に逸れたお話。 例として挙げられている、 Excelの_BeforePrintイベントのCancel引数の使い途については、 印刷を実行するまでに済ませておくべきユーザー側のタスクが 完了しているか確認するダイアログを表示するとか、 ページレイアウトをアシストするマクロ実行するような 使い方に限られる、つまり"印刷禁止"が目的ではない、 と、これまでも私は考えてきました。 何故、ExcelにはあってWordにないか、というと、 アプリケーションとしての主目的の違いに関わることなのかな、と。 Excelは主にデータの集計作業をメインにしますから、 編集の段階から印刷することを前提にしていませんので、 ページ設定を含めた印刷設定を別の作業として後に残すことになりますが、 Wordの場合は紙で印刷することを前提に始った面が強いですから、 例えば最初からページ単位で編集できますし、ページレイアウトを 前提にした入力/編集が同時並行的に作業し易く構成されていますので、 書き終わったらそのまま印刷しても困ることが少ないですよね。 なので、Excelにだけは、"印刷の前に"というトリガーがある ということなのでしょう。 ご承知のように、デザインモードの存在や、マクロを無効で開けること、 等、至って一般的な操作で、 _BeforePrintを通らずに印刷実行出来てしまいます。 対して、タイトルにもある"禁止"というコトバは、 質問者さんが思っているよりも、狭義で、或いは強い意味で、 受け止められることが多いのではないでしょうか。 先月にも同じ質問を掲げて後に削除されたこと、存じて居りますが、 その時私は、タイトルを見ただけで無理、と断じていましたし、 中にはExcelでは"禁止"可能と信じている方もいらっしゃるようで、 ここOKWAVEでもそういう回答も時々見かけますから、 誤解を解くだけのレスを書くのも気が進まないので、 中身を見ないままでいました。 今回改めてご質問を拝見して、色々と考えてはみたのですが、 どこまで許容されて、 どこら辺で注意喚起または性善的な抑制をしたいのか、 もう少し目的が具体的であれば、或いは識者の知恵を借りることも できるのか、と。 私からすれば、印刷を最終目的にするソフト(?)で 印刷禁止と聴けば、第一印象は???だった訳です。 Documentを編集することは認めるのに、印刷を禁止する、 という状況も、容易に想像出来るものではないような気がしますし、 そこら辺の状況や目的がクリアでないと、応えられる人も答え難いのかなと。 結構色々試したりはしてみました。 ・Wordの印刷ボタンのxmlタグに細工してOnActionマクロを捻じ込む × ・Wordの印刷ボタンをフック(常時監視)する ×出来る人は居そう ・印刷可否を認証によって制限し、権限を持たない場合は、 Word以外のApplicationでWordオブジェクト(印刷不可にできる) で編集させる △ などなのですが、何れの方法も、 各バージョン(2007以降)ごとに細かく手当てするべきポイントが 変わってしまっていたりして、 限られた仕様書で汎用を意識しながら着手できるようなものには ならないようです。 また、環境(Office以外の常駐ソフト含む)を限って動かせるもの が出来たとしても、配布後も開発を継続する必要があるようなもの にしかならない、(一発で配布レベルのものを作るには相当に 時間等のコスト必要)という直感を持ちました。 それでいて、コピペやPrtScr等あって"印刷禁止"としては片手で終って しまいますから、ボランティア的には士気が上がりませんね。 今回の件もクライアントからの問い合わせから由来しているのでしょうけれど、 その道に長けたProにPayのある開発依頼をする程の必要を感じない案件 であるのなら、手を出さない方が良さそうに思います。 Office2003以前であれば、ここでの回答ひとつで片付くほど簡単 だったのに、と悔しい気持ちになったりもするのですが、、、。 今は、出来ない、という返答で十分責任を果たせるのではないかと。 さしあたり 【vba リボン イベント】等で検索してみては如何でしょうか。 名だたる先人たちが重みのある資料を残してくれていますが、 必ずバージョン互換の壁に当たっていることが書かれていて、 責任のある態度に改めて感服した次第です。 今後の判断材料としては役に立つのかも知れません。 私からの対案の一例として、結構時間掛かりましたが、 ExcelでWordオブジェクトを挿入して、 編集はできるけれど、印刷できない、という状況を 作れることは確認出来ました。 Wordの印刷ボタンは表示されませんし、 ショートカットやアクセスキーも無効化されています。 Excelの(一見Wordに見える)印刷ボタンはありますが、 Wordオブジェクトを印刷対象から外すのじは簡単ですし、 これなら、Excelの_BeforePrintイベントのCancel引数 を利かせて、必要な処理を加えることも出来ます。 原本Documentを開く時に印刷権限の認証を経なければ、 Excel上のWordオブジェクトを表示する仕組みも確認できました。 でも、そこでの編集内容を原本Documentに戻す時、 変更履歴なのか最終版なのか、とか考える内に、 案外、汎用的なものは出来ないなぁ、と諦めることにしました。 ご興味あれば【Excel Word オブジェクト】で検索すれば 概要はつかめます。 時間があれば私も再度掘り下げることもあるかもです。 いづれにしても、今は、一筋縄ではいかない感じです。 お求めに副った返答ではないでしょうけれど、 少しでも、ご判断の材料になれば、と。 追伸。 私事ですが遠征の予定が再延期になり、また回答できました。 q9333062"EXCELバイナリブックとは?"のお礼コメント > ... 数式の文字数を調べる関数があれば ... への返信として、回答へのコメント欄(OKWAVEから閲覧可能)に、 UDFs(ワークシート上で使う目的の関数)を 字数制限ピッタリ納まるよう(:D)にageましたので宜しければ。