2014-10-17 30 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