かなりの試行を経て&エラーが発生しましたが、私は機能的な解決策があると思いますが、私が以下で説明することについては不明な点がいくつかあります。
パブリックTrapFlag
変数を制御するサブルーチンを使用してPPTMファイルでこれをテストしました。この変数は、特定のコントロールを非表示にするか無効にするかを決定します。私はまた、アプリケーションが起動したときにこのフラグが設定されているPPAMでこれをテストしました。ではなく、アドインがロードされたときにがロードされます。
これにより、実行時にRibbonUIを操作することができます。ここで
はXMLである:ここでは
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`
<customUI onLoad="RibbonOnLoad" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<commands>
<command idMso="ViewSlideSorterView" getEnabled="EnableControl"/>
<command idMso="ViewNotesPageView" getEnabled="EnableControl"/>
<command idMso="ViewSlideShowReadingView" getEnabled="EnableControl"/>
<command idMso="ViewSlideMasterView" getEnabled="EnableControl"/>
<command idMso="ViewHandoutMasterView" getEnabled="EnableControl"/>
<command idMso="ViewNotesMasterView" getEnabled="EnableControl"/>
<command idMso="WindowNew" getEnabled="EnableControl"/>
</commands>
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabView">
<group idMso="GroupMasterViews" getVisible="VisibleGroup"/>
<group idMso="GroupPresentationViews" getVisible="VisibleGroup"/>
</tab>
</tabs>
</ribbon>
は私の要件に応じて変更さCustomUI Editorアプリケーションから生成され、VBAのコールバックです。
Option Explicit
Public TrapFlag As Boolean
Public Rib As IRibbonUI
Public xmlID As String
Public Sub SetFlag()
Dim mbResult As Integer
mbResult = MsgBox("Do you want to disable some controls on the Ribbon?", vbYesNo)
If mbResult = vbYes Then
TrapFlag = True
Else:
TrapFlag = False
End If
End Sub
'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
'MsgBox "onLoad"
Set Rib = ribbon
End Sub
'I use this Callback for disabling some Controls:
' ViewSlideSorterView
' ViewNotesPageView
' ViewSlideShowReadingView
' ViewSlideMasterView
' ViewHandoutMasterView
' ViewNotesMasterView
' WindowNew
Sub EnableControl(control As IRibbonControl, ByRef returnedVal)
returnedVal = Not TrapFlag 'TrapFlag = True indicates the Application is running.
'MsgBox ("GetEnabled for " & control.Id)
'Debug.Print control.Id & " enabled = " & CStr(returnedVal)
Call RefreshRibbon(control.Id)
End Sub
'I use this Callback for disabling/hiding some tab groups:
' GroupMasterViews
' GroupPresentationViews
Sub VisibleGroup(control As IRibbonControl, ByRef returnedVal)
returnedVal = Not TrapFlag 'TrapFlag = True indicates the Application is running.
'MsgBox "GetVisible for " & control.Id
'Debug.Print control.Id & " enabled = " & CStr(returnedVal)
Call RefreshRibbon(control.Id)
End Sub
Sub RefreshRibbon(Id As String)
xmlID = Id
'MsgBox "Refreshing ribbon for " & Id, vbInformation
If Rib Is Nothing Then
MsgBox "Error, Save/Restart your Presentation"
Else
Rib.Invalidate
End If
End Sub
いくつかの不確実性が
- 私はまだいくつかのロンdeBruinのコードは、(hereを)何をするか全くわからない、またはそれが必要であるかどうか。私はいくつかのテストを行いましたが、この場合はpublic変数
xmlID
が必要であることは確かではありません。彼は何とか私が理解できないものを使用します。
- はまた、私はXMLで
command
に使用 としてタブgroup
に同じコールバックを使用することはできませんよ、私は コマンドのタグgetEnabled
を使用しますが、私はグループのためにgetVisible
を使用する必要があります。これらの は、コールバック関数EnableControl
と VisibleGroup
にそれぞれ関連付けられています。いずれにしても、VisibleGroup
は と思われるので、機能的には同じです。
getEnabled
タグは、無効にしたコマンドへのホットキーやプログラムによるアクセスを防止するとも考えています。