リボン関連

外部のXMLファイルを読み込み、ユーザー名に応じてmenu内容を変更する

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ファイルに応じてリボン(の一部)を変更することができます。

関連記事

  1. リボン関連

    続・Office Ribbon Editorがダウンロード出来ない?

    「Office Ribbon Editorがダウンロード出来ない?」で…

  2. リボン関連

    menu内にあるbuttonの数を増やす

    「外部のXMLファイルを読み込み、ユーザー名に応じてmenu内容を変更…

  3. Office関連

    YouTube動画挿入アドイン for PowerPoint

    前回の記事でPowerPoint 2013でYouTubeの動画が挿入…

  4. Office関連

    [リボン・カスタマイズ]カスタムタブを共有する。

    ※ 2015/2/18 コードに一部誤りがあったので修正しました。…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP