Office関連

[リボン・カスタマイズ]グループの表示・非表示をトグルボタンで切り替える。

数年前に書いた記事に下記コメントをいただきました。

Excelにて、リボン、ボタンではなく、リボン内の特定の「グループ」について表示/非表示をトグルボタンのクリック操作で行う場合のXMLコードを教えて下さい。

グループに限らず、リボン上の各要素の表示・非表示を動的に切り替えたい場合はgetVisible属性を使います。

また、表示状態をトグルボタンで設定したいとのことなので、toggleButton要素のgetPressed属性でボタンの押下状態を設定し、onAction属性でボタンをクリックした際の処理を設定します。

リボンXML

<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="rbnSample_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="tabSample" label="Sample Tab">
        <group id="grpSample1" label="Group 1" getVisible="grpSample_getVisible">
          <button id="btnDummy1" label="Button 1" imageMso="HappyFace" size="large" />
          <button id="btnDummy2" label="Button 2" imageMso="HappyFace" size="large" />
          <button id="btnDummy3" label="Button 3" imageMso="HappyFace" size="large" />
          <button id="btnDummy4" label="Button 4" imageMso="HappyFace" size="large" />
        </group>
        <group id="grpSample2" label="Group 2">
          <toggleButton id="tglSample" label="表示・非表示切替" imageMso="HappyFace" size="large" supertip="グループの表示・非表示を切り替えます。" onAction="tglSample_onAction" getPressed="tglSample_getPressed" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

VBAコード(標準モジュール)

Option Explicit

Private myRibbon As Office.IRibbonUI
Private flg As Boolean

Public Sub rbnSample_onLoad(ribbon As IRibbonUI)
  Set myRibbon = ribbon
  flg = True
End Sub

Public Sub grpSample_getVisible(control As IRibbonControl, ByRef returnedVal)
  returnedVal = flg
End Sub

Public Sub tglSample_onAction(control As IRibbonControl, pressed As Boolean)
  flg = pressed
  myRibbon.InvalidateControl "grpSample1"
End Sub

Public Sub tglSample_getPressed(control As IRibbonControl, ByRef returnedVal)
  returnedVal = flg
End Sub

上記コードでは、トグルボタンが押下されている状態の時にはグループが表示され、解除されている状態のときは非表示になります。

関連記事

  1. Office関連

    ExcelとPowerPointに自動保存機能が追加されました。

    Excel 2016を使っていて、ふと気が付いたのが画面左上にある「自…

  2. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  3. Office関連

    Officeファイルから作成者などのプロパティを取得するVBScript

    下記記事でも書いていますが、xlsxやdocxといった、OOXML形式…

  4. Office関連

    PowerShellからNetOfficeを使ってWordやPowerPointを操作する方法

    前回の記事関連で、WordやPowerPointもドンとこいで…

  5. Office関連

    未読アイテムの件数を取得するOutlookマクロ

    「Outlook 未読 件数 マクロ」といったキーワード検索でのアクセ…

  6. Office関連

    PDFのしおり数を取得するVBAマクロ

    「VBA Acrobat しおり数」といったキーワード検索でのアクセス…

コメント

  • コメント (5)

  • トラックバックは利用できません。

  1. きぬあさ様
    早速ご対応下さりありがとうございます!!

    これから実際にやってみます。
    また不明点が発生しましたら質問させて頂きます。
    そのせつはどうぞよろしくお願い致します。

  2. きぬあさ様

    無事にやりたいことができました。
    ありがとうございます♪

    さて、追加の質問をさせて下さい。
    複数の「グループ」の表示/非表示をリボンからではなく、
    アドインのユーザフォームのコントロール(チェックボックス等)から行う方法を
    ご教示下さい。これによりExcelクローズ時の状態をファイル等に保存しておいて
    次回のExcel起動時のデフォルトにしたいと思っています。

    どうぞよろしくお願い致します。

    • > spacedragon さん

      初心者備忘録管理人のきぬあさです。
      myRibbonをPublicにしておけば、ユーザフォームからでもInvalidateControlメソッドを呼び出せますので、問題は“設定をどのタイミングでどこに保存し、どこから読み込むか?”になるかと思います。

      シート、レジストリ、外部ファイル、ブック内のカスタムXML、ファイルのプロパティ、様々な保存場所が考えられますが、一例としてシートに設定値を保存するthom氏のブログ記事をご紹介します。

      ・VBA マクロの設定をどこに保存するか
      https://thom.hateblo.jp/entry/2015/06/19/052753
      ・VBA マクロで利用する設定値をシートに保存し、文字列でアクセスするテクニック
      https://thom.hateblo.jp/entry/2018/06/16/035609
      ・VBA マクロの設定をシートに保存する場合のテクニック
      https://thom.hateblo.jp/entry/2015/06/21/021207

  3. きぬあさ様

    ありがとうございます♪
    シートに設定値を保存するのは現在のアプリに実装ずみなのでOKです。
    問題はユーザフォーム上のチェックボックスによってトグルで
    特定のグループの表示/非表示を動的に切り替えたいです。
    そのときのInvalidateControl周りの記述方法が分かりません。

    UIのonLoadでPublic変数のリボンをセットしたあとに、
    チェックボックスの記述はどうなるのでしょうか?
    お手数ですがご教示頂けますと幸いです

    どうぞよろしくお願い致します。

    • > spacedragon さん

      初心者備忘録管理人のきぬあさです。
      簡単なサンプルを書いてみましたので、ご参考にしていただければ幸いです。

      ・[リボン・カスタマイズ]グループの表示・非表示をユーザーフォームのチェックボックスで切り替える。
      https://www.ka-net.org/blog/?p=11294

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP