访问2010自定义功能区vba错误

时间:2013-05-13 15:05:44

标签: ms-access-2007 access-vba ms-access-2010 ribbon

我有一个调用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

1 个答案:

答案 0 :(得分:0)

我能够在Access 2010中重新创建您的问题,我将您的示例更改为Function更改为Sub,如下所示:

Public Sub OnButtonPress2(ByVal control_ As IRibbonControl)
    MsgBox "OnButtonPress2"
End Sub

顺便说一句,在搜索有关此问题的信息时,我偶然发现了另一个论坛here的帖子。在其中,Albert D. Kallal讨论使用onAction="=MyPublicFunctionName()"作为回调的替代方案;也许你会发现在某些情况下有用。