Excelリボンにカスタムタブを追加して、いくつかのボタンを追加する方法を探しています。 Googleを介してそれに対処するいくつかのリソースを見つけましたが、すべてが危険で途方もなく複雑に見えます。
それを行うための迅速かつ簡単な方法は何ですか? VBAがExcelに読み込まれると、新しいタブが読み込まれるようにしたい。
UPDATE: here からこの例を試しましたが、最後の命令で「オブジェクトが必要です」というエラーが表示されました:
Public Sub AddHighlightRibbon()
Dim ribbonXml As String
ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.Microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + " <mso:ribbon>"
ribbonXml = ribbonXml + " <mso:qat/>"
ribbonXml = ribbonXml + " <mso:tabs>"
ribbonXml = ribbonXml + " <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + " <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + " <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + " </mso:group>"
ribbonXml = ribbonXml + " </mso:tab>"
ribbonXml = ribbonXml + " </mso:tabs>"
ribbonXml = ribbonXml + " </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"
ActiveProject.SetCustomUI (ribbonXml)
End Sub
私の知る限り、VBA Excelを使用してExcelリボンにカスタムタブを作成することはできません。ただし、VBAを使用してリボンコンポーネントを非表示/表示にすることができます。また、上記のリンクはMS Project用であり、MS Excel用ではありません。
カスタムUIエディター と呼ばれるこの無料のユーティリティを使用して、Excelアプリケーション/アドインのタブを作成します。
編集:OPによる新しいリクエストに対応するために
約束どおりの短いチュートリアルを次に示します。
カスタムUIエディター(CUIE)をインストールしたら、それを開いて、[ファイル]、[ファイル]の順にクリックします。関連するExcelファイルを開いて選択します。 CUIEで開く前に、Excelファイルが閉じていることを確認してください。例として、新しいワークシートを使用しています。
下の画像に示すように右クリックし、「Office 2007カスタムUIパーツ」をクリックします。 「customUI.xml」を挿入します
次に[挿入]メニューをクリックします|サンプルXML |カスタムタブ。基本的なコードが自動的に生成されることに気付くでしょう。これで、要件に従って編集する準備がすべて整いました。
コードを調べてみましょう
label="Custom Tab"
:「カスタムタブ」をタブに付ける名前に置き換えます。とりあえず「ジェローム」と呼びましょう。
以下の部分は、カスタムボタンを追加します。
<button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
imageMso
:これはボタンに表示される画像です。 「HappyFace」は、現在表示されているものです。 ここからさらにイメージIDをダウンロードできます 。
onAction="Callback"
:「コールバック」は、ボタンをクリックしたときに実行されるプロシージャの名前です。
それで、2つのボタンを作成し、それらを「JGボタン1」と「JGボタン2」と呼びましょう。最初の画像として幸せそうな顔を保ち、2番目の「太陽」を保ちましょう。修正されたコードは次のようになります。
<customUI xmlns="http://schemas.Microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
CUIEで生成されたすべてのコードを削除し、その代わりに上記のコードを貼り付けます。 CUIEを保存して閉じます。 Excelファイルを開くと、次のようになります。
これでコード部分です。 VBAエディターを開き、モジュールを挿入して、次のコードを貼り付けます。
Public Sub Callback1(control As IRibbonControl)
MsgBox "You pressed Happy Face"
End Sub
Public Sub Callback2(control As IRibbonControl)
MsgBox "You pressed the Sun"
End Sub
Excelファイルをマクロ対応ファイルとして保存します。スマイリーまたは太陽をクリックすると、関連するメッセージボックスが表示されます。
お役に立てれば!
Excel 2013のVBAでこれを達成できました。特別なエディターは必要ありませんでした。必要なのは、[開発]タブでアクセスできるVisual Basicコードエディターだけです。 [開発]タブはデフォルトでは表示されないため、[ファイル]> [オプション]> [リボンのカスタマイズ]で有効にする必要があります。 [開発]タブで、[Visual Basic]ボタンをクリックします。コードエディターが起動します。左側のプロジェクトエクスプローラーペインを右クリックします。挿入メニューをクリックして、モジュールを選択します。以下の両方のサブを新しいモジュールに追加します。
Sub LoadCustRibbon()
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso='http://schemas.Microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tab id='reportTab' label='Reports' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:button id='runReport' label='PTO' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3' onAction='GenReport'/>" & vbNewLine
ribbonXML = ribbonXML + " </mso:group>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"
ribbonXML = Replace(ribbonXML, """", "")
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub
Sub ClearCustRibbon()
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso=""http://schemas.Microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub
WookbookのLoadCustRibbonサブを開き、ThisWorkbookコードファイルのBefore_CloseイベントでClearCustRibbonサブを呼び出します。
私は怒って苦労しましたが、これは実際には正しい答えです。それが価値があるものとして、私が逃したのはこれでした:
ちなみに、Ronのサイトで説明しているページは http://www.rondebruin.nl/win/s2/win002.htm にあります。
そして、リボンのボタンを有効/無効にする方法についての彼の例があります http://www.rondebruin.nl/win/s2/win013.htm
リボンの他のxmlの例については、 http://msdn.Microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx も参照してください。
ここでの回答は、カスタムUIエディターの使用に固有のものです。私はその素晴らしいプログラムなしでインターフェースを作成するのにしばらく時間を費やしました。そこで、カスタムUIエディターが必要かどうかを他の誰かが決定できるように、ここでソリューションを文書化しています。
次のマイクロソフトヘルプWebページに遭遇しました- https://msdn.Microsoft.com/en-us/library/office/ff861787.aspx 。これは、インターフェイスを手動でセットアップする方法を示していますが、カスタムアドインコードを指すときに問題が発生しました。
ボタンをカスタムマクロで使用するには、このSO answer- リボンからExcelマクロを呼び出す の説明に従って、.xlamサブルーチン内のマクロを呼び出すようにセットアップします。基本的に、リボンxmlから指定されたモジュールに「control As IRibbonControl」パラメーターを追加する必要があります。また、アドインによってロードされたモジュールを適切に呼び出すために、リボンxmlにonAction = "myaddin!mymodule.mysub"構文が必要です。
これらの手順を使用して、VBAがアドインと共にExcelに読み込まれるときにカスタムタブが読み込まれるExcelアドイン(.xlamファイル)を作成できました。ボタンは、アドインからコードを実行し、アドインを削除します。
Roi-Kyi Bryantの回答に加えて、このコードはExcel 2010で完全に機能します。ALT+ F11を押すと、VBAエディターがポップアップ表示されます。左側のThisWorkbook
をダブルクリックして、次のコードを貼り付けます。
Private Sub Workbook_Activate()
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso='http://schemas.Microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tab id='reportTab' label='My Actions' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:button id='runReport' label='Trim' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3' onAction='TrimSelection'/>" & vbNewLine
ribbonXML = ribbonXML + " </mso:group>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"
ribbonXML = Replace(ribbonXML, """", "")
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub
Private Sub Workbook_Deactivate()
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso=""http://schemas.Microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub
ブックを保存して再度開くことを忘れないでください。お役に立てれば!
multipleアドインがリボンを変更しようとしたときに、Roi-Kyi Bryantのソリューションで問題が発生しました。また、職場のコンピューターに管理者アクセス権がないため、Custom UI Editor
をインストールできませんでした。したがって、あなたが私と同じ船に乗っている場合、Excelのみを使用してリボンをカスタマイズするための代替exampleがあります。注、私のソリューションは Microsoftガイド から派生しています。
.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>
.Zip
を付けます。私の場合、名前をChart Tools.xlam
からChart Tools.xlam.Zip
に、Privelged UDFs.xlam
をPriveleged UDFs.xlam.Zip
に変更しました。.Zip
ファイルを開き、_rels
フォルダーに移動します。 .rels
ファイルをステップ3で作成した_rels
フォルダーにコピーします。テキストエディターでeach.rels
ファイルを編集します。 Microsoftガイド から最後の
<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
ファイル/ファイルに置き換えます。.customUI
フォルダをコピーして、.Zip
ファイル/ファイルのホームディレクトリに貼り付けます。.Zip
ファイル拡張子を削除します。.xlam
ファイルを作成した場合は、Excelに戻って、Excelアドインに追加します。onAction
キーワードがあります。 onAction
キーワードは、含む要素がトリガーされると、ExcelアプリケーションがonAction
キーワードの直後に引用符で囲まれたサブルーチンをトリガーすることを示します。これはcallbackとして知られています。 .xlam
ファイルには、コールバックサブルーチンを含めたCallBacks
というモジュールがあります。Chart Tools.xlam
のCallBacks
モジュールは次のようになります
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
Priveleged UDFs.xlam
のCallBacks
モジュールは次のようになります
オプション明示
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ガイドのパート は、すべてのコールバック署名を定義します。
完成した例は次のようになります
最後のヒント
idQ
およびxlmns:
キーワードを使用します。私の例では、Chart Tools.xlam
とPriveleged UDFs.xlam
は両方とも、idQ
がx:chartToolsTab
とx:privelgedUDFsTab
に等しい要素にアクセスできます。これが機能するには、x:
が必要です。また、customUI.xml
ファイルの最初の行で<customUI xmlns="http://schemas.Microsoft.com/office/2006/01/customui" xmlns:x="sao">
という名前空間を定義しました。 Microsoftガイド のセクションFluent UIをカスタマイズする2つの方法に、詳細が記載されています。isMSO
キーワードを使用します。 Microsoftガイド のセクションFluent UIをカスタマイズする2つの方法に、詳細が記載されています。