複数のアドインがリボンを変更しようとしたときに、Roi-KyiBryantのソリューションで問題が発生しました。また、仕事用のコンピューターに管理者アクセス権がないため、のインストールが除外されましたCustom UI Editor
。したがって、私と同じボートに乗っている場合は、Excelのみを使用してリボンをカスタマイズする別の例を次に示します。私のソリューションはMicrosoftガイドから派生していることに注意してください。
- リボンをカスタマイズするExcelファイルを作成します。私の場合、複数のアドインがリボンとどのように相互作用できるかを示すために、2つの
.xlam
ファイルとChart Tools.xlam
を作成しました。Priveleged UDFs.xlam
- 作成したファイルごとに、任意のフォルダー名でフォルダーを作成します。
- 作成した各フォルダー内に、フォルダーを追加し
customUI
ます_rels
。
- 各
customUI
フォルダ内にcustomUI.xml
ファイルを作成します。このcustomUI.xml
ファイルには、Excelファイルがリボンとどのように相互作用するかが詳しく説明されています。Microsoftガイドのパート2では、ファイル内の要素について説明していcustomUI.xml
ます。
私のcustomUI.xml
ファイルはChart Tools.xlam
次のようになります
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:chartToolsTab" label="Chart Tools">
<group id="relativeChartMovementGroup" label="Relative Chart Movement" >
<button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
<button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
</group >
<group id="chartDeletionGroup" label="Chart Deletion">
<button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
私のcustomUI.xml
ファイルはPriveleged UDFs.xlam
次のようになります
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
<group id="privelgedUDFsGroup" label="Toggle" >
<button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
<button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
</group >
</tab>
</tabs>
</ribbon>
</customUI>
- 手順1で作成したファイルごとに、
.zip
ファイル名の末尾にaを付けます。私の場合、名前を、、に変更しChart Tools.xlam
ました。Chart Tools.xlam.zip
Privelged UDFs.xlam
Priveleged UDFs.xlam.zip
- 各
.zip
ファイルを開き、_rels
フォルダーに移動します。手順3で作成し.rels
たフォルダにファイルをコピーします。テキストエディタで各ファイルを編集します。Microsoftガイドから_rels
.rels
最後の<Relationship>
要素と終了
<Relationships>
要素の間に、ドキュメントファイルとカスタマイズファイルの間に関係を作成する行を追加します。フォルダ名とファイル名を正しく指定してください。
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
私の.rels
ファイルはChart Tools.xlam
次のようになります
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
</Relationships>
私の.rels
ファイルはPriveleged UDFs
次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
</Relationships>
.rels
各.zip
ファイルのファイルを.rels
、前の手順で変更した1つまたは複数のファイルに置き換えます。
- 作成したフォルダをコピーして、ファイル
.customUI
のホームディレクトリに貼り付けます。.zip
.zip
作成したExcelファイルからファイル拡張子を削除します。
- ファイルを作成した場合
.xlam
は、Excelに戻って、Excelアドインにファイルを追加します。
- 該当する場合は、各アドインでコールバックを作成します。ステップ4では
onAction
、ボタンにキーワードがあります。キーワードは、包含要素がトリガーされると、ExcelアプリケーションがキーワードonAction
の直後に引用符で囲まれたサブルーチンをトリガーすることを示します。onAction
これはコールバックとして知られています。私の.xlam
ファイルにはCallBacks
、コールバックサブルーチンを含めたというモジュールがあります。

私のCallBacks
モジュールはChart Tools.xlam
次のようになります
Option Explicit
Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartWithRelativeLinks
End Sub
Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartToManySheetsWithRelativeLinks
End Sub
Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
DeleteAllChartsInWorkbookSharingAnAddress
End Sub
私のCallBacks
モジュールはPriveleged UDFs.xlam
次のようになります
オプション明示
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
要素が異なれば、コールバックサブルーチンのシグネチャも異なります。ボタンの場合、必要なサブルーチンパラメータはByRef control As IRibbonControl
です。必要なコールバック署名に準拠していない場合、VBAプロジェクトのコンパイル中にエラーが発生します。Microsoftガイドのパート3では、すべてのコールバック署名を定義しています。
完成した例は次のようになります

いくつかの締めくくりのヒント
- アドインでリボン要素を共有する場合は、
idQ
andxlmns:
キーワードを使用します。私の例では、Chart Tools.xlam
とのPriveleged UDFs.xlam
両方が、とに等しい'sを持つ要素にアクセスできidQ
ます。これを機能させるには、が必要です。ファイルの最初の行で名前空間を定義しました。Microsoftガイドの「FluentUIをカスタマイズする2つの方法」セクションに詳細が記載されています。x:chartToolsTab
x:privelgedUDFsTab
x:
customUI.xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
- アドインでExcelに付属のリボン要素にアクセスする場合は、
isMSO
キーワードを使用します。Microsoftガイドの「FluentUIをカスタマイズする2つの方法」セクションに詳細が記載されています。