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属性のコールバックを設定しています。
アクティブシートに限らず、何らかの条件でリボンのコントロールを切り替えたい場合には便利な処理だと思います。
GetVisibleではアイコンがノーマル/モノクロの制御に成るのですか?ボタン動作としては有効になるのでしょうね。この様な情報は何処で手に入るのでしょうか?私の場合はきぬあささんだけが頼りです!
Excel-PowerPoint連携のシステムを作った時にはブログ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