dynamicMenu要素のgetContent属性のコールバックを利用することで、外部からXMLファイルを読み込んで、ユーザー名に応じてmenu内容を変更する方法を紹介します。
[リボンXML]
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="tabSample" label="Sample Tab">
<group id="grpSample" label="Sample Group">
<dynamicMenu id="dmuSample" label="Sample Menu" size="large" imageMso="HappyFace" getContent="dmuSample_getContent" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
[標準モジュール]
Option Explicit
Private Sub dmuSample_getContent(control As IRibbonControl, ByRef returnedVal)
Dim MenuXML As String
Dim MenuFilePath As String
'ユーザー名で読み込むXMLファイル分岐
Select Case VBA.Environ$("USERNAME")
Case "Admin"
MenuFilePath = ThisWorkbook.Path & "\MenuXML01.xml"
Case Else
MenuFilePath = ThisWorkbook.Path & "\MenuXML02.xml"
End Select
MenuXML = LoadMenuFile(MenuFilePath)
If Len(Trim$(MenuXML)) < 1 Then Exit Sub
returnedVal = MenuXML
End Sub
Private Function LoadMenuFile(ByVal FilePath As String) As String
Dim ret As String
ret = "" '初期化
On Error Resume Next
With CreateObject("Msxml2.DOMDocument")
.async = False
If .Load(FilePath) Then ret = .XML
End With
On Error GoTo 0
LoadMenuFile = ret
End Function
上記コードを設定したファイルと同じ場所に、下記2つのXMLファイルを保存します。
[MenuXML01.xml]
<menu xmlns="http://schemas.microsoft.com/office/2006/01/customui" itemSize="large">
<button id="btnSample1" label="Sample Button1" imageMso="HappyFace" />
<button id="btnSample2" label="Sample Button2" imageMso="HappyFace" />
<button id="btnSample3" label="Sample Button3" imageMso="HappyFace" />
<menu id="mnuSample" label="Sample Menu" itemSize="large" imageMso="FileOpen">
<button id="btnSample4" label="Sample Button4" imageMso="HappyFace" />
<button id="btnSample5" label="Sample Button5" imageMso="HappyFace" />
<button id="btnSample6" label="Sample Button6" imageMso="HappyFace" />
</menu>
</menu>
[MenuXML02.xml]
<menu xmlns="http://schemas.microsoft.com/office/2006/01/customui" itemSize="large">
<menu id="mnuSample" label="Sample Menu" itemSize="large" imageMso="FileOpen">
<button id="btnSample1" label="Sample Button1" imageMso="SadFace" />
<button id="btnSample2" label="Sample Button2" imageMso="SadFace" />
<button id="btnSample3" label="Sample Button3" imageMso="SadFace" />
</menu>
<button id="btnSample4" label="Sample Button4" imageMso="SadFace" />
<button id="btnSample5" label="Sample Button5" imageMso="SadFace" />
<button id="btnSample6" label="Sample Button6" imageMso="SadFace" />
</menu>
XMLファイル保存後、リボン・カスタマイズしたファイルを開くと、ユーザー名が「Admin」の場合はMenuXML01.xmlファイルが読み込まれ、「Sample Tab」タブが下図のように表示されます。

ユーザー名が「Admin」以外の場合には、MenuXML02.xmlファイルが読み込まれ、下図のように表示されます。

上記のように、dynamicMenu要素のgetContent属性のコールバックを利用することで、外部のXMLファイルに応じてリボン(の一部)を変更することができます。















この記事へのコメントはありません。