Vba access 2010自定义功能区

Vba access 2010自定义功能区,vba,ms-access,ribbon,Vba,Ms Access,Ribbon,我有一个调用vba命令的自定义功能区。当它出现时,我会收到错误消息 Microsoft Access cannot run the macro or callback function [FUNCTION OR SUB] 其中,[FUNCTION或SUB]是我正在调用的函数或子名称 生成上述消息的代码示例如下: Public Function OnButtonPress2(ctl As IRibbonControl) MsgBox "OnButtonPress2" End Func

我有一个调用vba命令的自定义功能区。当它出现时,我会收到错误消息

Microsoft Access cannot run the macro or callback function [FUNCTION OR SUB]
其中,
[FUNCTION或SUB]
是我正在调用的函数或子名称

生成上述消息的代码示例如下:

Public Function OnButtonPress2(ctl As IRibbonControl)

    MsgBox "OnButtonPress2"

End Function
其中,
OnButtonPress2
在功能区的XML文件中作为按钮调用

onAction=“OnButtonPress2

上述内容适用于宏,因此可能不是功能区的xml

=======第2版 我已经用XML和模块创建了一个新的简单测试数据库,如下所示:

每项研究的结果如下:

Macro1-工作正常(它有一条弹出消息)

CommandOnAction2-msgbox“编译此函数时出错”

OnButtonPress2-msgbox“Microsoft Access无法运行宏或回调函数'OnButtonPress2'

在“Public gobjRibn As IRibbonUI”一行中,IRibbonUI没有自动完成,这让我相信有一个参考需要添加

XML(功能区名称为NewRibbon,设置为启动时打开)


我能够在Access 2010中重新创建您的问题,并通过将
函数
更改为
子函数
使您的示例生效,如下所示:

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

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

Gord,谢谢,我仍然有同样的问题,我在上面的===Version2下添加了一个新的示例,结果如下。一个可能很关键的问题是,声明中的IRibbonUI在“Public gobjRibn As”之后不会自动完成-我可能缺少引用,但不知道它应该是什么。您需要引用MSO.DLL。例如,在具有32位Office 2010(=Office 14)的64位计算机上:C:\Program Files(x86)\Common Files\Microsoft Shared\OFFICE14\MSO.DLL
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
Public Sub OnButtonPress2(ByVal control_ As IRibbonControl)
    MsgBox "OnButtonPress2"
End Sub