【VBA】ボタンをリボンに設定する
記事更新日:2022-08-27
ボタンを
Excelシートに
置きたくない
Excelシートに
置きたくない
リボンは、これ
ボタンをリボンに置くメリット
- 間違えにくい
- ボタン or シート が消えちゃう心配がない
- どのシートからでも実行できる
シートにあると、消えちゃいそうで不安だから
リボンを設定する方法:zip方式
詳しい手順は、こちらの記事がわかりやすい
VBA 専用ツールを使わないカスタムリボン作成チュートリアル – t-hom’s diary (hateblo.jp)
ざっくり手順
- Excelファイルをzipにする
- 「.rels」を修正
- 一度作れば、次からは同じものでOK
- 「CustomUI.xml」を作成
- ボタンの見た目やIDなどの設定
- VBEにモジュール作成
- ボタンの詳細を設定
専用エディタを使う方法もあるけど、zip 方式のほうがやりやすいかも
CustomUI.xml
見た目は、xmlで作成
xmlのコードをクリックして表示
<?xml version="1.0" encoding="utf-8"?>
<customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="MyOriginalRibbon" label="ツール実行" insertBeforeMso="TabHome">
<group id="register" label="登録">
<button id="R_Button_a"
imageMso="ContactPictureMenu"
size="large"
label="ユーザ登録"
screentip="ユーザを登録します"
supertip="実行時の注意:〇〇"
onAction="RibbonMacros"
tag="tool"
/>
<toggleButton id="a01" label="最終実行日" onAction="aDate_onAction" />
<button id="a02" getLabel="aDate_getLabel" />
<separator id="separator1" />
<button id="R_Button_b"
imageMso="OpenStartPage"
size="large"
label="AA登録"
onAction="RibbonMacros"
screentip="Aを登録します"
supertip="実行時の注意:〇〇"
tag="tool"
/>
<toggleButton id="b01" label="最終実行日" onAction="bDate_onAction" />
<button id="b02" getLabel="bDate_getLabel" />
<separator id="separator2" />
<button id="R_Button_c"
imageMso="PictureBrightnessGallery"
size="large"
label="BB登録"
screentip="Bを登録します"
supertip="実行時の注意:〇〇"
onAction="RibbonMacros"
tag="tool"
/>
<toggleButton id="c01" label="最終実行日" onAction="cDate_onAction" />
<button id="c02" getLabel="cDate_getLabel" />
</group>
<group id="prepare" label="出力準備">
<button id="R_Button_d"
imageMso="Calculator"
size="large"
label="CC計算"
onAction="RibbonMacros"
screentip="〇〇を計算します"
supertip="実行時の注意:〇〇"
tag="tool"
/>
<toggleButton id="d01" label="最終実行日" onAction="dDate_onAction" />
<button id="d02" getLabel="dDate_getLabel" />
<separator id="separator3" />
<button id="R_Button_e"
imageMso="DistributionListAddNewMember"
size="large"
label="追加修正"
onAction="RibbonMacros"
screentip="追加修正します"
supertip="実行時の注意:〇〇"
tag="tool"
/>
<toggleButton id="e01" label="最終実行日" onAction="eDate_onAction" />
<button id="e02" getLabel="eDate_getLabel" />
<separator id="separator4" />
<button id="R_Button_f"
imageMso="MeetingsWorkspace"
size="large"
label="〇〇実行"
screentip="〇〇を実行します"
supertip="実行時の注意:〇〇"
onAction="RibbonMacros"
tag="tool"
/>
<toggleButton id="f01" label="最終実行日" onAction="fDate_onAction" />
<button id="f02" getLabel="fDate_getLabel" />
</group>
<group id="view" label=" 確認 ">
<button id="R_Button_g"
imageMso="WhatIfAnalysisMenu"
size="large"
label="Accessログ"
onAction="RibbonMacros"
screentip="Accessに登録済のデータを表示します"
supertip="実行時の注意:〇〇"
tag="tool"
/>
</group>
<group id="output" label="出力">
<button id="R_Button_h"
imageMso="UpgradeWorkbook"
size="large"
label="Excel出力"
onAction="RibbonMacros"
screentip="データをExcelに出力します"
supertip="実行時の注意:〇〇"
tag="tool"
/>
<toggleButton id="h01" label="最終実行日" onAction="hDate_onAction" />
<button id="h02" getLabel="hDate_getLabel" />
<separator id="separator5" />
<button id="R_Button_i"
imageMso="ChartPrimaryVerticalGridlines"
size="large"
label="グラフ出力"
screentip="〇〇のデータをグラフ化します"
supertip="実行時の注意:〇〇"
onAction="RibbonMacros"
tag="tool"
/>
<toggleButton id="i01" label="最終実行日" onAction="iDate_onAction" />
<button id="i02" getLabel="iDate_getLabel" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
HTMLみたいに書ける
【ドキュメント】MicrosoftDocs
【アイコン】Image Mso Gallery
VBA
挙動は、VBAで設定
標準モジュールに記述
VBAのコードはこちら
Option Explicit
Dim b As Boolean
Private rbLabel As String
Private rbText As String
Dim MyRibbon As IRibbonUI
Private Const RIBBON_TABNAME = "MyOriginalRibbon"
Private Enum row
aa = 2
bb
cc
dd
ee
ff
hh
ii
End Enum
'************************
' * エクセルファイル起動時
'************************
Sub Ribbon_onLoad(Ribbon As IRibbonUI)
Ribbon.ActivateTab RIBBON_TABNAME
Set MyRibbon = Ribbon 'リボンをセット
MyRibbon.Invalidate 'リボンを再描画する
End Sub
Sub RibbonMacros(control As IRibbonControl)
Application.Run control.Tag, control
End Sub
Private Sub tool(control As IRibbonControl)
Application.Run control.ID
End Sub
'************************
' * 実行ボタン
'************************
Private Sub R_Button_a()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_b()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_c()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_d()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_e()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_f()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_g()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_h()
Call 呼び出すマクロ
End Sub
Private Sub R_Button_i()
Call 呼び出すマクロ
End Sub
'************************
'最終実行日の取得
'************************
Private Sub aDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.aa, label)
End Sub
Private Sub aDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "a02"
End Sub
Private Sub bDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.bb, label)
End Sub
Private Sub bDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "b02"
End Sub
Private Sub cDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.cc, label)
End Sub
Private Sub cDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "c02"
End Sub
Private Sub dDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.dd, label)
End Sub
Private Sub dDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "d02"
End Sub
Private Sub eDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.ee, label)
End Sub
Private Sub eDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "e02"
End Sub
Private Sub fDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.ff, label)
End Sub
Private Sub fDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "f02"
End Sub
Private Sub hDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.hh, label)
End Sub
Private Sub hDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "h02"
End Sub
Private Sub iDate_getLabel(control As IRibbonControl, ByRef label)
Call GetSheetData(row.ii, label)
End Sub
Private Sub iDate_onAction(control As IRibbonControl, ByRef returnedVal)
MyRibbon.InvalidateControl "i02"
End Sub
'************************
'シートから最終実行日の取得
'************************
Private Function GetSheetData(ByVal row As Long, ByRef label)
With WS_LastDate
With .ListObjects("TblLastDate").Range
label = .Cells(row, 2).Value
label = Format(label, "yyyy/m/d(aaa)")
End With
End With
End Function
最終実行日をシートから取得
シートにテーブル準備
マクロ完了時に、日付が出力される設定をしておきます
なくてもいいけど、最終実行日がリボン上で確認できると安心かも
シートは見る必要がないので、普段は非表示にしておきます
最終形はこちら
実行ボタンを
リボンに設置すると
ラクになる
リボンに設置すると
ラクになる
2022-08-27
編集後記:
この記事の内容がベストではないかもしれません。