【问题标题】:Access 2013 VBA - Setting New Click Event for ControlsAccess 2013 VBA - 为控件设置新的点击事件
【发布时间】:2014-12-13 06:16:20
【问题描述】:

我到处都在寻找这个,这似乎是一个简单的修复,但我似乎无法找到解决方案。我的 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

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

【问题讨论】:

    标签: ms-access vba ms-access-2013


    【解决方案1】:

    错误消息告诉您 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
    

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

    【讨论】:

    • 哇!有效!我没想过要那样做。我的心都炸了。谢谢您的帮助!对了,我也是桌面版的。
    • Ahhhhh 我想函数 is 不是一个表达式吗?
    • 我想有时只需要一点团队合作就可以看出哪里出了问题。谢谢你们!
    【解决方案2】:

    您无需指定在 VBA 中运行的过程。运行的过程将始终ControlName_Click。您尝试设置的 OnClick 属性仅允许您在 Access Macro 和 [Event Procedure] vba 代码之间切换。它不像 .Net 平台中的事件委托那样工作。

    请查看OnClick Property documentation on MSDN

    这里的解决方案是use the Microsoft Visual Basic for Applications Extensibilty Library to write snippets of code into the modules。我会把它留给你作为练习。

    【讨论】:

    • 好的,有道理。我认为我的格式可能有问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多