Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 自定义选项卡按钮赢得';无法连接到宏_Excel_Vba_Custom Controls - Fatal编程技术网

Excel 自定义选项卡按钮赢得';无法连接到宏

Excel 自定义选项卡按钮赢得';无法连接到宏,excel,vba,custom-controls,Excel,Vba,Custom Controls,我正在尝试创建一个自定义选项卡,以便按照来自的指示运行宏。我已经按照步骤进行了操作,但在尝试单击按钮时遇到了问题。我收到消息:无法运行宏“hello”。宏可能在此工作簿中不可用,或者可能已禁用所有宏。对.rels文件的修改如下:文件夹和文件名匹配目标。XML文件如下所示: <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon>

我正在尝试创建一个自定义选项卡,以便按照来自的指示运行宏。我已经按照步骤进行了操作,但在尝试单击按钮时遇到了问题。我收到消息:
无法运行宏“hello”。宏可能在此工作簿中不可用,或者可能已禁用所有宏。
对.rels文件的修改如下:
文件夹和文件名匹配
目标
。XML文件如下所示:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon> 
        <tabs> 
            <tab id="CustomTab" label="My Tab"> 
                <group id = "hello" label = "Hello">
                    <button id = "hi" label =  "Hello" imageMso = "ShapeSmileyFace" size = "large" onAction = "hello"/>
                </group>
            </tab> 
        </tabs> 
    </ribbon> 
</customUI> 
Option Explicit

Public MyRibbon As IRibbonUI

Public Sub ControlRibbon(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub
Option Explicit

Public Sub Hello(control As IRibbonControl)
    MsgBox "Hello"
End Sub
宏看起来像:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon> 
        <tabs> 
            <tab id="CustomTab" label="My Tab"> 
                <group id = "hello" label = "Hello">
                    <button id = "hi" label =  "Hello" imageMso = "ShapeSmileyFace" size = "large" onAction = "hello"/>
                </group>
            </tab> 
        </tabs> 
    </ribbon> 
</customUI> 
Option Explicit

Public MyRibbon As IRibbonUI

Public Sub ControlRibbon(Ribbon As IRibbonUI)
    Set MyRibbon = Ribbon
End Sub
Option Explicit

Public Sub Hello(control As IRibbonControl)
    MsgBox "Hello"
End Sub
我遇到的所有答案都与修改对VBA项目对象模型的
信任访问有关。任何帮助都将不胜感激

编辑:@Peyter的回答有助于我得出答案。但是,我确实需要做一些小的语法更改才能使其正常工作:

  • 而不是
    Macro()
    VBA默认为
    Macro
  • 我使用了
    OnAction=“Workbookname.xlsm!Control\u Macroname”而不是
    OnAction=“Workbookname.xlsm!Control\u Macroname.Control\u Macroname”

  • 通过这些修改,我可以让功能区上的按钮正常工作。

    是的,这是一个艰难的过程,你就快到了

    这是你需要对你的三个部分做的

    假设您的wb命名为:workbookname.xlsm

    第1部分wb xml引用示例控制宏(函数)名称:

    第2部分功能区控制宏(功能):

    第3部分实际运行的宏:

    Sub Macro()
       'do stuff
    End Sub
    

    有什么我可以澄清的,以帮助您实现这一点吗?如果我已经充分回答了你的问题。请在回答的帖子上做标记并投票:)我很抱歉没有早点回顾这篇文章。一旦我有机会让它工作,我肯定会把它标记为接受。别担心,伙计,如果还有什么东西不工作,请告诉我。在VSTO使选项卡/功能区变得非常简单之前,我经常使用这种设置。在Excel中用自定义宏制作一个很酷的功能区仍然很有趣。谢谢@Peyter。我仍然无法使用Ribbon控件宏。按下功能区上的按钮将返回消息
    无法运行'Workbookname.xlsm!控制_宏名'。该宏可能在此工作簿中不可用,或者所有宏都可能被禁用。
    经过几次尝试后,我能够通过一些较小的语法更改使其正常工作。我会修改我的答案来突出这些,但仍然会给你的答案,因为如果没有你的帮助,我将无法得出解决方案。干得好,我的兄弟!