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属性のコールバックを設定しています。
アクティブシートに限らず、何らかの条件でリボンのコントロールを切り替えたい場合には便利な処理だと思います。

Google Noseで表示される香りをまとめてみました。前のページ

マクロでリボンを最小化する。次のページ

関連記事

  1. Office関連

    Office 2016 Previewをインストールしてみました。

    「Microsoft、「Office 2016」と「Skype for…

  2. Office関連

    VBAで○○を禁止したい!・・・と思う前に。

    Office系Q&Aサイトを見ているとたまに出てくるのがこの質問。…

  3. Office関連

    「最速攻略 Wordマクロ/VBA徹底入門」レビュー

    いつもお世話になっているExcel MVPの伊藤さんに9月20日発売予…

  4. アイコン一覧

    Office 2013 アイコン一覧(B)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    「クラシックスタイルメニュー」の誤検知?

    2013/07/16 追記:cx20さんにコメントで"Google…

  6. Excel

    マクロでリボンを最小化する。

    mougの回答用に書いたコードです。忘れないうちにメモ。・…

コメント

    • あくしず
    • 2013年 4月 12日 3:03pm

    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.

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

Translate

最近の記事

アーカイブ

PAGE TOP