2014-10-17 2 views
4

Я искал всюду для этого, и это похоже на простое исправление, но я не могу найти решение. У меня есть несколько элементов управления Rectangle в моей форме Access 2013, и я создаю событие OnClick, которое обрабатывает их все. Я работал над несколькими различными методами, и я думаю, что нашел самый простой/чистый способ сделать это. Я поместил элементы управления в коллекцию и изменил событие OnClick для каждого элемента управления. Вот моя проблема: Access открывает форму и узнает, что я изменил событие для элемента управления, но как только я щелкнул элемент управления, он выдает ошибку и не будет выполнять событие.Access 2013 VBA - настройка нового события Click для элементов управления

Ошибка:

"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

В сообщении об ошибке сообщает, что вы не можете найти функцию с именем 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 был с традиционным настольным приложением. Если вы работаете с WebApp Access 2013, я не знаю, что произойдет.

+0

Вау! Это сработало! Я не думал попробовать это. Мой мозг взорвался. Спасибо за помощь! Кстати, я тоже на настольной версии. – JaredS

+2

Ahhhhh Я полагаю, что функция *** является *** выражением, не так ли? – RubberDuck

+0

Я полагаю, что иногда требуется небольшая работа в команде, чтобы увидеть, где все пошло не так. Спасибо вам обоим! – JaredS

5

Вы не можете указать, какая процедура выполняется в VBA. Процедура, которая будет выполняться, будет всегда be 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. Я оставлю это как упражнение для вас.

+1

Хорошо, это имеет смысл. Я думал, что может быть что-то не так в моем форматировании. Спасибо за вашу помощь! – JaredS

+0

Добро пожаловать! – RubberDuck

Смежные вопросы