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事件中尝试了一个简单的操作,这产生了同样的错误.有人有主意吗?
您无法指定在VBA中运行的过程.运行该程序将永远是ControlName_Click.OnClick您尝试设置的属性只允许您在Access宏和[Event Procedure]vba代码之间切换.它不像.Net平台中的事件委托那样工作.
请参阅MSDN上的OnClick属性文档.
这里的解决方案是使用Microsoft Visual Basic for Applications Extensibilty Library将代码片段写入模块.我会把它作为锻炼给你.
该错误消息告诉您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,我不知道会发生什么.