Office関連

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

Excelで、選択しているシートによって表示するグループを切り替えたいという質問をいただきましたので処理を考えてみました。

リボンXML:

<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="ThisWorkbook.Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="tabSample" label="Sample Tab">
        <group id="grpSample1" label="Sample Group1" getVisible="ThisWorkbook.group_getVisible" tag="1">
          <button id="btnSample1" label="Sample Button1" size="large" imageMso="HappyFace" />
          <button id="btnSample2" label="Sample Button2" size="large" imageMso="HappyFace" />
          <button id="btnSample3" label="Sample Button3" size="large" imageMso="HappyFace" />
        </group>
      <group id="grpSample2" label="Sample Group2" getVisible="ThisWorkbook.group_getVisible" tag="2">
          <button id="btnSample4" label="Sample Button4" size="large" imageMso="SadFace" />
          <button id="btnSample5" label="Sample Button5" size="large" imageMso="SadFace" />
          <button id="btnSample6" label="Sample Button6" size="large" imageMso="SadFace" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

VBAコード(ThisWorkbook):

Option Explicit

Private myRibbon As Office.IRibbonUI
Private flg(1 To 2) As Boolean

Public Sub Ribbon_onLoad(ribbon As IRibbonUI)
  Set myRibbon = ribbon
  Select Case LCase$(ActiveWorkbook.ActiveSheet.Name)
    Case "sheet1"
      flg(1) = True
      flg(2) = False
    Case "sheet2"
      flg(1) = False
      flg(2) = True
    Case Else
      flg(1) = True
      flg(2) = True
  End Select
End Sub

Public Sub group_getVisible(control As IRibbonControl, ByRef returnedVal)
  returnedVal = flg(CLng(control.Tag))
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  Select Case LCase$(Sh.Name)
    Case "sheet1"
      flg(1) = True
      flg(2) = False
    Case "sheet2"
      flg(1) = False
      flg(2) = True
    Case Else
      flg(1) = True
      flg(2) = True
  End Select
  myRibbon.Invalidate
End Sub

上記コードでは、Sheet1が選択されているときは”grpSample1“が、Sheet2が選択されているときは”grpSample2“、それ以外のシートの時は”grpSample1“と”grpSample2“の両方が表示されるよう、getVisible属性のコールバックを設定しています。
アクティブシートに限らず、何らかの条件でリボンのコントロールを切り替えたい場合には便利な処理だと思います。

関連記事

  1. Office関連

    受信メールに対して自動的に返信するOutlookマクロ

    「Outlook VBA 自動返信」といったキーワード検索でのアクセス…

  2. Office アドイン

    [Office用アプリ]Office ストアが新しくなりました。

    Office 用アプリやSharePoint 用アプリを配信しているO…

  3. Office関連

    クイックアクセスツールバーから履歴を表示するWordテンプレート

    Word MVPの新田さんのブログで「【Word 2013】クイックア…

コメント

    • あくしず
    • 2013年 4月 12日

    GetVisibleではアイコンがノーマル/モノクロの制御に成るのですか?ボタン動作としては有効になるのでしょうね。この様な情報は何処で手に入るのでしょうか?私の場合はきぬあささんだけが頼りです!

    Excel-PowerPoint連携のシステムを作った時にはブログ1ページだけが頼りでしたので、大変でした。

  1. > あくしず様

    getEnabled属性はコントロールの有効・無効を動的に設定するもので、falseにした場合でもグレー表示にはなりますが、画面上表示はされます。
    それに対してgetVisible属性は文字通りコントロールの表示・非表示を動的に設定するもので、falseにした場合は表示そのものがされなくなります。
    これらの属性は状況に応じて使い分けるのが良いだろうと思います。

    > この様な情報は何処で手に入るのでしょうか?私の場合はきぬあささんだけが頼りです!

    基本的には下記Webページで紹介しているようなMicrosoftのページを参考にしています。

    ・リボン関連のリンク
    http://www.ka-net.org/ribbon/link.html

    おおまかなところは下記からダウンロードできる「[MS-CUSTOMUI].pdf」と「[MS-CUSTOMUI2].pdf」で把握できます。

    ・[MS-CUSTOMUI]: Custom UI XML Markup Specification
    http://msdn.microsoft.com/en-us/library/cc313070%28office.12%29.aspx
    ・[MS-CUSTOMUI2]: Custom UI XML Markup Version 2 Specification
    http://msdn.microsoft.com/en-us/library/dd909370%28office.12%29.aspx

    XML編集にあたっては下記からダウンロードできるXML Schemaも利用しています。

    ・Download details: 2007 Office System: XML Schema Reference
    http://www.microsoft.com/en-us/download/details.aspx?id=4463
    ・Download details: Office 2010 Reference: Office Fluent User Interface XML Schema
    http://www.microsoft.com/en-us/download/details.aspx?id=1574

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP