トップ回答者
word リボンのデザインタブの透かしボタンなどを押下した際のイベント取得

質問
回答
-
こんにちは。
> 若しくは、デザインタブの「透かし」ボタンを活性、非活性の制御ができれば良いのですが。。。
リボンにある各機能(コントロール)はXMLをカスタマイズすることで、ある程度制御可能です。
例えば、「透かし」ギャラリーの有効・無効を動的に切り替えたい場合は、command要素のgetEnabled属性のコールバックで処理することができます。
リボンのカスタマイズについては、ここでは深く説明しませんが、「Custom UI Editor」を使うと楽に設定可能です。
※下記コードはWord 2016環境で検証を行っています。
・リボンXML
<?xml version="1.0" encoding="utf-8"?> <customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <commands> <command idMso="WatermarkGallery" getEnabled="Watermark_getEnabled" /> </commands> <ribbon> <tabs> <tab idMso="TabWordDesign"> <group id="grpCtrlWatermark" label="透かし切替" insertAfterMso="GroupPageBackground"> <button id="btnCtrlWatermark" label="透かし切替" screentip="透かし切替" supertip="「透かし」の有効・無効を切り替えます。" size="large" imageMso="CustomWatermarkGallery" onAction="btnCtrlWatermark_onAction" /> </group> </tab> </tabs> </ribbon> </customUI>
・標準モジュール
Option Explicit Private myRibbon As Office.IRibbonUI Private flgWatermark As Boolean Public Sub Ribbon_onLoad(ribbon As IRibbonUI) Set myRibbon = ribbon flgWatermark = False End Sub Public Sub Watermark_getEnabled(control As IRibbonControl, ByRef returnedVal) returnedVal = flgWatermark End Sub Public Sub btnCtrlWatermark_onAction(control As IRibbonControl) If InputBox("「透かし」の有効・無効を切り替えるためのパスワードを入力してください。", "パスワード入力") = "pass" Then flgWatermark = Not flgWatermark myRibbon.InvalidateControlMso "WatermarkGallery" End If End Sub
また、上記のようにマクロで制限を掛けたとしても、完璧に機能の実行を防ぐことは難しいため、運用で何とかできるのであれば、そちらでカバーすることも考えてみてはいかがでしょうか。- 回答としてマーク しーぷ 2018年3月22日 9:49
すべての返信
-
こんにちは。
押下時のイベントで、具体的にどのような処理を実行されたいのでしょうか?
一部機能でしたら、下記記事で紹介している「コマンドバーのイベントを使用する方法」や「リボンをカスタマイズする方法」で対応できるかと思います。
・既存の機能の代わりにマクロを実行する方法をまとめてみました。 | 初心者備忘録
https://www.ka-net.org/blog/?p=3099
「透かし」等のgallery要素もイベントフックで無理やり検知できるとは思いますが、あまりオススメできるものではありません。 -
こんにちは。
> 若しくは、デザインタブの「透かし」ボタンを活性、非活性の制御ができれば良いのですが。。。
リボンにある各機能(コントロール)はXMLをカスタマイズすることで、ある程度制御可能です。
例えば、「透かし」ギャラリーの有効・無効を動的に切り替えたい場合は、command要素のgetEnabled属性のコールバックで処理することができます。
リボンのカスタマイズについては、ここでは深く説明しませんが、「Custom UI Editor」を使うと楽に設定可能です。
※下記コードはWord 2016環境で検証を行っています。
・リボンXML
<?xml version="1.0" encoding="utf-8"?> <customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <commands> <command idMso="WatermarkGallery" getEnabled="Watermark_getEnabled" /> </commands> <ribbon> <tabs> <tab idMso="TabWordDesign"> <group id="grpCtrlWatermark" label="透かし切替" insertAfterMso="GroupPageBackground"> <button id="btnCtrlWatermark" label="透かし切替" screentip="透かし切替" supertip="「透かし」の有効・無効を切り替えます。" size="large" imageMso="CustomWatermarkGallery" onAction="btnCtrlWatermark_onAction" /> </group> </tab> </tabs> </ribbon> </customUI>
・標準モジュール
Option Explicit Private myRibbon As Office.IRibbonUI Private flgWatermark As Boolean Public Sub Ribbon_onLoad(ribbon As IRibbonUI) Set myRibbon = ribbon flgWatermark = False End Sub Public Sub Watermark_getEnabled(control As IRibbonControl, ByRef returnedVal) returnedVal = flgWatermark End Sub Public Sub btnCtrlWatermark_onAction(control As IRibbonControl) If InputBox("「透かし」の有効・無効を切り替えるためのパスワードを入力してください。", "パスワード入力") = "pass" Then flgWatermark = Not flgWatermark myRibbon.InvalidateControlMso "WatermarkGallery" End If End Sub
また、上記のようにマクロで制限を掛けたとしても、完璧に機能の実行を防ぐことは難しいため、運用で何とかできるのであれば、そちらでカバーすることも考えてみてはいかがでしょうか。- 回答としてマーク しーぷ 2018年3月22日 9:49