Excel 2013 ribbonx xml:CustomUI工作正常,但生成的按钮拒绝运行我的宏

Excel 2013 ribbonx xml:CustomUI工作正常,但生成的按钮拒绝运行我的宏,xml,excel,ribbonx,vba,Xml,Excel,Ribbonx,Vba,使用customUI工具向Excel 2013 xlsm工作簿添加选项卡。我正在运行Windows7。CustomUI给了我绿灯(“CustomUIXML格式良好!”),并生成回调代码。打开工作簿时,会出现“新建”选项卡、“新建组”和“新建”按钮。我在VBA中将回调代码添加到module1中。但是当我点击“新建”按钮时,我收到了消息 “无法运行宏'AddNodeNew'。该宏可能在此工作簿中不可用,或者所有宏都被禁用。” 嗯,宏AddNodeNew是可用的,并且宏没有被禁用。那么到底发生了什么?

使用customUI工具向Excel 2013 xlsm工作簿添加选项卡。我正在运行Windows7。CustomUI给了我绿灯(“CustomUIXML格式良好!”),并生成回调代码。打开工作簿时,会出现“新建”选项卡、“新建组”和“新建”按钮。我在VBA中将回调代码添加到module1中。但是当我点击“新建”按钮时,我收到了消息

“无法运行宏'AddNodeNew'。该宏可能在此工作簿中不可用,或者所有宏都被禁用。”

嗯,宏AddNodeNew是可用的,并且宏没有被禁用。那么到底发生了什么? 注意:xlsm工作簿已经包含许多其他宏(没有一个宏名为AddNodeNew)


我想在这里包含代码,但您的系统不允许我-一直告诉我我没有将其正确格式化为代码。但我确实按要求的4个空格缩进了所有内容,但仍然没有骰子。关于这个主题的帮助是不够的。

显然RibbonX自定义UI元素可以调用VBA项目的ThisWorkbook部分中存储的宏,但我还没有弄清楚如何从模块中调用宏,然后我知道我甚至不想这样做,因为当模块重命名时,我需要调整自定义UI中的引用

因此,您可以做的是在ThisWorkbook中创建一个调用者,然后该调用者将调用该函数。我的解决方案是将被调用的函数名放入xml元素id属性中,然后在此工作簿中有一个调用方函数,该函数由所有自定义控件调用。调用时,调用方读取控件ID属性并调用具有该名称的另一个函数,而不管其物理位置如何

Public Sub Caller(ctrl As IRibbonControl)
    Dim sFunction As String: sFunction = ctrl.ID
    Application.Run sFunction
End Sub