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 アドイン

    JavaScriptで作成した作業ウィンドウアプリを検証してみる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  2. Office関連

    Excelのアイデア機能でグラフやピボットグラフを一発作成

    Insider版のExcelに「アイデア」機能が追加されました。…

  3. Office関連

    ClosedXMLやEPPlusでExcelファイルを読み書きしてみた。

    今回の記事の発端は下記のQiita投稿。・Excelファイ…

  4. Office関連

    ディスプレイのサイズを取得するVBAマクロ

    「VBA ディスプレイ 幅 高さ」といったキーワード検索でのアクセスが…

  5. Office関連

    オフィス祭り 2018 in 東京に参加しました。

    先日書いた下記記事の通り、9月15日(土)に品川にある日本マイクロソフ…

コメント

    • あくしず
    • 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