Access 2013 VBA - 为控件设置新的Click事件

Jar*_*edS 5 ms-access vba access-vba ms-access-2013

我到处寻找这个,这似乎是一个简单的修复,但我似乎无法找到解决方案.我在Access 2013表单中有几个Rectangle控件,我正在创建一个OnClick事件来处理它们.我已经研究了几种不同的方法,我认为我找到了最简单/最干净的方法.我将控件放在一个集合中,并为每个控件更改OnClick事件.这是我的问题:Access打开表单并识别我更改了控件的事件,但是一旦我单击该控件,它就会抛出错误并且不会执行该事件.

错误:

"作为事件属性设置输入的单击On Click会产生以下错误:您输入的表达式具有Microsoft Access无法找到的函数名称."

代码:

Private Sub Form_Load()
Dim m_colRectangle As Collection
Dim ctl As Access.CONTROL

Set m_colRectangle = New Collection
For Each ctl In Me.Controls
    If ctl.ControlType = acRectangle Then
        If ctl.Name = "shpTest" Then
            m_colRectangle.Add ctl, ctl.Name

            ctl.OnClick = "=TestClick()" ' <--- Error on this line

        End If
    End If
Next ctl
End Sub

Private Sub TestClick()
    MsgBox "Test"
End Sub
Run Code Online (Sandbox Code Playgroud)

或者,我shpTest.OnClick = "=TestClick()"在Form_Load事件中尝试了一个简单的操作,这产生了同样的错误.有人有主意吗?

Rub*_*uck 6

您无法指定在VBA中运行的过程.运行该程序将永远ControlName_Click.OnClick您尝试设置的属性只允许您在Access宏和[Event Procedure]vba代码之间切换.它不像.Net平台中的事件委托那样工作.

请参阅MSDN上OnClick属性文档.

这里的解决方案是使用Microsoft Visual Basic for Applications Extensibilty Library将代码片段写入模块.我会把它作为锻炼给你.


Han*_*sUp 6

该错误消息告诉您Access无法找到名为TestClick函数.您的TestClick是一个子程序,而不是一个函数.

这是一个更简单的示例,在Access 2010和2013中进行了测试,它演示了使用控件.OnClick属性的函数可以工作......但是您需要一个函数.:-)

Private Sub Form_Load()
    Dim ctl As Control
    Set ctl = Me.Controls("txtMathExpresson")
    ctl.OnClick = "=TestClick()"
    Set ctl = Nothing
End Sub

Private Function TestClick()
    MsgBox "Test"
End Function
Run Code Online (Sandbox Code Playgroud)

请注意我的Access 2013测试是使用传统的桌面应用程序.如果您正在使用Access 2013 WebApp,我不知道会发生什么.

  • 啊,我想一个函数***是***表达不是吗? (2认同)