リボン関連

外部の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関連

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

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

  2. Office関連

    Re: 【Wordマクロ】Word起動時に、前回終了時に開いていたファイルを表示

    Word MVPの新田さんがブログで面白い記事を書かれていました。…

  3. Office関連

    [リボン・カスタマイズ]dropDown要素の初期項目を指定する。

    MSDN フォーラムに「リボン:ドロップダウンリストにlabel初期値…

  4. Office関連

    [リボン・カスタマイズ]アクティブシートにより表示するグループを切り替える。

    Excelで、選択しているシートによって表示するグループを切り替えたい…

  5. リボン関連

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

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

  6. Office関連

    Office 2016で“ヤツ”を召喚してみた。

    4月1日にMicrosoft Office公式アカウント、MSOffi…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP