2014-10-17 61 views
4

我到处搜索这个,它似乎是一个简单的修复,但我似乎无法找到解决方案。我在Access 2013表单中有几个Rectangle控件,我创建了一个处理它们的OnClick事件。我已经尝试了几种不同的方法,并且我认为我找到了最简单/最干净的方法。我把控件放在一个集合中,并为每个控件改变OnClick事件。这是我的问题:访问打开窗体,并认识到我改变了控件的事件,但一旦我点击控件,它会引发错误,并不会执行该事件。访问2013 VBA - 设置新的点击事件控件

的错误:

"The expression On Click entered as the event property setting produced the following error: The expression you entered has a function name that Microsoft Access can't find."

的代码:

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()",和由此产生的相同的错误。有人有主意吗?

回答

5

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

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

+0

哇!有效!我没有想过这样做。我的心被炸毁了。谢谢您的帮助!顺便说一下,我也在桌面版本上。 – JaredS 2014-10-17 17:50:59

+2

Ahhhhh我想***是一个表达式不是吗? – RubberDuck 2014-10-17 17:51:12

+0

我想它有时只是需要一点团队合作来查看它出错的地方。感谢你们两位! – JaredS 2014-10-17 17:52:56

5

您无法指定在VBA中运行哪个过程。运行的程序将始终为ControlName_Click。您尝试设置的OnClick属性仅允许您在Access宏和[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。我会留下那样的锻炼。

+1

好的,这是有道理的。我认为我的格式可能有问题。谢谢你的帮助! – JaredS 2014-10-17 16:10:10

+0

不客气! – RubberDuck 2014-10-17 16:14:35