VBA - 功能区自定义 - 添加附加组件时
VBA - Ribbon customization - When adding an add-on
我做了一个程序,希望分发给我的同事,他们不是 VBA 导向的。所以我想方便地分发它。
我创建了一个插件,安装插件时需要创建自定义功能区。我尽力了,但找不到易于理解的文档。
我的代码如下:
Private Sub Workbook_AddinInstall()
On Error Resume Next 'Just in case
Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Open SCF workbook"
.Style = msoButtonIconAndCaptionBelow
.OnAction = "OpenTheCorrectFile"
.FaceId = 7720
.DescriptionText = "Open the SCF workbook"
End With
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Are they onboard"
.Style = msoButtonIconAndCaptionBelow
.FaceId = 5817
.OnAction = "Check_Suppliers_Already_On_Board"
.DescriptionText = "Check if suppliers have already been on boarded"
End With
End Sub
现在,如果您使用我的代码,您会注意到:
- 按钮很小
- 图标很小
- 吸尘时没有描述
- 新功能区没有特别的名字,就是call Add-ins
- 这个组没有特别的名字,叫做“菜单命令”
有谁知道如何解决这个问题。
每当我寻找那些答案时,人们都在使用特殊应用程序来创建丝带,我不想这样做。我也是VBA的初学者,所以欢迎一切容易消化的东西。
非常感谢。
这是一个示例,说明如何在不使用任何外部应用程序(仅使用文本编辑器)的情况下执行此操作。但是你必须要注意正确编写 XML 代码,否则 excel 文件可能无法正确打开(制作备份副本)。
您将创建一个名为“customUI”的文件夹,并在该文件夹中创建一个名为“customUI.xml”的文件
您将在“customUI.xml”中写下您所有的功能区详细信息。我写了这个例子,涵盖了你列出的问题:大按钮和图标(https://bert-toolkit.com/imagemso-list.html 中的图像列表)/工具提示描述(屏幕提示和超级提示)/功能区名称(选项卡标签)/组名称(组标签)
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="Add-ins">
<group id="Group1" label="Menu Commands">
<button id="Button1" label="Happy" size="large" screentip="Test1" supertip="Test1 description" imageMso="HappyFace" onAction="Macro1" />
<button id="Button2" label="Save" size="large" imageMso="FileSave" onAction="Macro2" />
<button id="Button3" label="{a}" size="large" imageMso="FieldCodes" onAction="Macro3" />
</group >
<group id="Group2" label="Other Commands">
<button id="Button4" label="Reply" size="large" imageMso="Reply" onAction="Macro4" />
</group >
</tab>
</tabs>
</ribbon>
</customUI>
将您的 .XLSM 文件重命名为 .ZIP,然后您将能够 edit/add 文件。将自定义UI 文件夹添加到 zip 文件。
从 ZIP 文件中,提取 _rels 文件夹中的 .rels 文件,您将在最后一个 Relationships 标签和 Relationships 结束标签之间添加这一行,然后将其放回 ZIP 中文件覆盖那里的 .rels 文件
<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />
将文件重命名回.XLSM并打开它,如果一切正常,新的功能区就会出现。重要的是按钮将调用的宏具有控制参数,如下所示:
Sub Macro3(ByVal control As IRibbonControl)
就是这样,关于 UI 的所有内容都在 customUI.xml 文件中,VBA 中没有更多的添加按钮。如果必须更改 UI 中的某些内容,则必须再次将其重命名为 ZIP,覆盖 customUI.xml 文件并再次重命名为 XLSM。这是我在这个例子中得到的功能区:
我做了一个程序,希望分发给我的同事,他们不是 VBA 导向的。所以我想方便地分发它。
我创建了一个插件,安装插件时需要创建自定义功能区。我尽力了,但找不到易于理解的文档。
我的代码如下:
Private Sub Workbook_AddinInstall()
On Error Resume Next 'Just in case
Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Open SCF workbook"
.Style = msoButtonIconAndCaptionBelow
.OnAction = "OpenTheCorrectFile"
.FaceId = 7720
.DescriptionText = "Open the SCF workbook"
End With
Set cControl = Application.CommandBars("Worksheet Menu Bar").Controls.Add
With cControl
.Caption = "Are they onboard"
.Style = msoButtonIconAndCaptionBelow
.FaceId = 5817
.OnAction = "Check_Suppliers_Already_On_Board"
.DescriptionText = "Check if suppliers have already been on boarded"
End With
End Sub
现在,如果您使用我的代码,您会注意到:
- 按钮很小
- 图标很小
- 吸尘时没有描述
- 新功能区没有特别的名字,就是call Add-ins
- 这个组没有特别的名字,叫做“菜单命令”
有谁知道如何解决这个问题。 每当我寻找那些答案时,人们都在使用特殊应用程序来创建丝带,我不想这样做。我也是VBA的初学者,所以欢迎一切容易消化的东西。
非常感谢。
这是一个示例,说明如何在不使用任何外部应用程序(仅使用文本编辑器)的情况下执行此操作。但是你必须要注意正确编写 XML 代码,否则 excel 文件可能无法正确打开(制作备份副本)。
您将创建一个名为“customUI”的文件夹,并在该文件夹中创建一个名为“customUI.xml”的文件
您将在“customUI.xml”中写下您所有的功能区详细信息。我写了这个例子,涵盖了你列出的问题:大按钮和图标(https://bert-toolkit.com/imagemso-list.html 中的图像列表)/工具提示描述(屏幕提示和超级提示)/功能区名称(选项卡标签)/组名称(组标签)
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="CustomTab" label="Add-ins"> <group id="Group1" label="Menu Commands"> <button id="Button1" label="Happy" size="large" screentip="Test1" supertip="Test1 description" imageMso="HappyFace" onAction="Macro1" /> <button id="Button2" label="Save" size="large" imageMso="FileSave" onAction="Macro2" /> <button id="Button3" label="{a}" size="large" imageMso="FieldCodes" onAction="Macro3" /> </group > <group id="Group2" label="Other Commands"> <button id="Button4" label="Reply" size="large" imageMso="Reply" onAction="Macro4" /> </group > </tab> </tabs> </ribbon> </customUI>
将您的 .XLSM 文件重命名为 .ZIP,然后您将能够 edit/add 文件。将自定义UI 文件夹添加到 zip 文件。
从 ZIP 文件中,提取 _rels 文件夹中的 .rels 文件,您将在最后一个 Relationships 标签和 Relationships 结束标签之间添加这一行,然后将其放回 ZIP 中文件覆盖那里的 .rels 文件
<Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />
将文件重命名回.XLSM并打开它,如果一切正常,新的功能区就会出现。重要的是按钮将调用的宏具有控制参数,如下所示:
Sub Macro3(ByVal control As IRibbonControl)
就是这样,关于 UI 的所有内容都在 customUI.xml 文件中,VBA 中没有更多的添加按钮。如果必须更改 UI 中的某些内容,则必须再次将其重命名为 ZIP,覆盖 customUI.xml 文件并再次重命名为 XLSM。这是我在这个例子中得到的功能区: