リボン関連

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

    Custom UI Editorの最新版がGitHubで公開されました。

    下記記事等で紹介している、リボンUIをカスタマイズするためのツール「C…

  2. Office関連

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

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

  3. Office関連

    シート見出しの右クリックメニューから「コードの表示」を消す方法

    いつもお世話になっている「インストラクターのネタ帳」の管理人である伊藤…

  4. Office関連

    既存の機能の代わりにマクロを実行する方法をまとめてみました。

    「既存の機能の代わりにマクロを実行する」の関連になりますが、Offic…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP