【问题标题】:VBA - Ribbon customization - When adding an add-onVBA - 功能区自定义 - 添加附加组件时
【发布时间】:2021-01-29 07:44:17
【问题描述】:

我做了一个程序,希望分发给我的同事,他们不是面向 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

现在,如果您使用我的代码,您会注意到:

  • 按钮很小
  • 图标很小
  • 悬停时没有描述
  • 新功能区没有特殊名称,称为加载项
  • 此组无特殊名称,称为“菜单命令”

有谁知道如何解决这个问题。 每当我在寻找人们使用特殊应用程序来创建功能区的答案时,我都不想这样做。我也是 VBA 的初学者,所以欢迎任何容易理解的东西。

非常感谢。

【问题讨论】:

  • 有一个 TooltipText 属性可用于设置悬停描述(可用属性列表:docs.microsoft.com/en-us/office/vba/api/overview/…)
  • 还有 Width 和 Height 属性,但我无法让它们工作(按钮大小没有改变)。显然,更好的自定义现在需要 XML、Microsoft Office 的自定义 UI 编辑器或类似的东西。我认为仅使用 VBA 是不可能的。
  • 这里有一个很好的例子来说明如何做到这一点,没有任何应用程序,但是您必须手动编辑 customUI.xml 文件和 xlsm 文件结构(重命名为 .zip,然后编辑 /添加一些文件,并再次重命名为 .xlsm):docs.microsoft.com/en-us/office/vba/library-reference/concepts/…
  • 非常感谢伊万。我会试试你在这里给我的建议。并感谢工具提示属性。

标签: vba excel-addins


【解决方案1】:

这是一个示例,说明如何在不使用任何外部应用程序(仅使用文本编辑器)的情况下完成此操作。但是您必须小心正确编写 XML 代码,否则 excel 文件可能无法正确打开(制作备份副本)。

  1. 您将创建一个名为“customUI”的文件夹,并在该文件夹内创建一个名为“customUI.xml”的文件

  2. 您将在“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> 
    
  1. 将您的 .XLSM 文件重命名为 .ZIP,然后您就可以编辑/添加文件了。将 customUI 文件夹添加到 zip 文件中。

  2. 从 ZIP 文件中,提取 _rels 文件夹中的 .rels 文件,您将在最后一个关系标记和关系结束标记之间添加这一行,然后将其放回 ZIP 文件中,覆盖那里的 .rels 文件

     <Relationship Id="someID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" /> 
    
  3. 将文件重命名为 .XLSM 并打开它,如果一切正常,新的 Ribbon 就会出现。将由按钮调用的宏具有控制参数很重要,如下所示:

     Sub Macro3(ByVal control As IRibbonControl)
    

就是这样,关于 UI 的一切都在 customUI.xml 文件中,VBA 中不再添加按钮。如果您必须更改 UI 中的某些内容,则必须再次将其重命名为 ZIP,覆盖 customUI.xml 文件并再次重命名为 XLSM。这是我在这个例子中得到的功能区:

【讨论】:

  • 我不知道如何在 XML 中编码,我想我必须学习它!非常感谢您的详细回答,非常有帮助
  • 不客气!还有一个细节:我在测试 XML 示例时注意到重复 ID 会导致错误,这就是为什么我将按钮称为“Button1”、“Button2”等。如果您创建了很多组和按钮,请务必避免重复 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
相关资源
最近更新 更多