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関連

    jQuery UIのDatepickerをVBAから使用するサンプル

    2014/1/31 追記:Internet Explorerのオー…

  2. Office アドイン

    Office 用アプリはソースコードが丸見え!?

    サーバーサイドの処理はともかくとして、Officeドキュメントにアクセ…

  3. Office関連

    選択している行の高さを増やすExcelマクロ

    Excelの表を印刷しようとしたとき、ビミョーに文字が切れていてイラッ…

  4. Office関連

    Word 2013では簡単にウィンドウ ハンドルを取得できるようになりました。

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

コメント

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