リボン関連

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

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

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

  2. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

  3. リボン関連

    リボンのコールバック関数の構文集

    今回は、リボンの各要素のonAction属性やgetImage…

  4. Office関連

    右クリックから図形の配置 for Office 2013

    HPの掲示板に"右クリックから「配置」を実行できないか?"という質問が…

  5. Office関連

    Office 2013のコントロールIDリストが更新されました。

    「コントロールID 一覧(Office 2013)」でも紹介しているO…

  6. リボン関連

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

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

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP