我有一个调用vba命令的自定义功能区。当它发生时,我收到错误消息
Microsoft Access cannot run the macro or callback function [FUNCTION OR SUB]
其中[FUNCTION OR SUB]
是我正在调用的函数或子名称。
生成上述消息的代码示例如下:
Public Function OnButtonPress2(ctl As IRibbonControl)
MsgBox "OnButtonPress2"
End Function
在功能区的XML文件中为按钮调用OnButtonPress2
onAction="OnButtonPress2
以上适用于宏,因此很可能不是功能区的xml
========版本2 我已经创建了一个新的简单测试数据库,其XML和模块如下所示:
每个的结果是:
Macro1 - 工作正常(它有弹出消息)
CommandOnAction2 - msgbox“编译此函数时出错”
OnButtonPress2 - msgbox“Microsoft Access无法运行宏或回调函数'OnButtonPress2'
在“Public gobjRibn As IRibbonUI”行上,IRibbonUI没有自动完成,导致我相信有一个需要添加的引用
XML(功能区名称为NewRibbon,设置为在启动时打开)
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="tab1" label="Your Custom Tab">
<group id="group1" label="Your Custom Group">
<button id="SampleButton" label="Macro1" onAction="Macro1" />
<button id="SampleButton2" label="CommandOnAction2" onAction="=CommandOnAction2()" />
<button id="SampleButton3" label="OnButtonPress2" onAction="OnButtonPress2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
模块(名称为modRibbon)
Option Compare Database
Public gobjRibn As IRibbonUI
Public Function CommandOnAction2(ByVal ctl As IRibbonControl)
MsgBox "Function CommandOnAction2"
End Function
Public Sub OnButtonPress2(ByVal ctl As IRibbonControl)
MsgBox " Sub OnButtonPress2"
End Sub
答案 0 :(得分:0)
我能够在Access 2010中重新创建您的问题,我将您的示例更改为Function
更改为Sub
,如下所示:
Public Sub OnButtonPress2(ByVal control_ As IRibbonControl)
MsgBox "OnButtonPress2"
End Sub
顺便说一句,在搜索有关此问题的信息时,我偶然发现了另一个论坛here的帖子。在其中,Albert D. Kallal讨论使用onAction="=MyPublicFunctionName()"
作为回调的替代方案;也许你会发现在某些情况下有用。