リボン関連

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

bitlyで短縮URLを取得するブックマークレット前のページ

menu内にあるbuttonの数を増やす次のページ

関連記事

  1. Office関連

    [リボン・カスタマイズ]ユーザー名により表示するメニューを切り替える。

    今回はリボンをカスタマイズして、ファイルを開いたユーザー名によって表示…

  2. Office関連

    [VBA]CommandBars(“○○”).Controls.Addでメニ…

    Officeのユーザインタフェースがリボンに変わってから、下記のように…

  3. Office関連

    OfficeのコマンドID(コントロールID)リストがGitHubで公開されました。

    前回の記事でも触れていますが、メインストリームサポート期間内のOffi…

  4. Office関連

    Office XP Developer Toolsでリボン対応のCOMアドインを作成する。

    「Visual Basic 6でリボン対応のアドインを作成する」ではV…

  5. Office関連

    [Office]「タッチ」タブの正体!?

    最近下記のようにOfficeのリボンにある「タッチ」タブについての質問…

  6. リボン関連

    [リボン・カスタマイズ]splitButton要素の内容を動的に変更する。

    3年ほど前に書いた記事「menu内にあるbuttonの数を増やす」にコ…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP