2014-10-17 1 views
4

나는 이것을 위해 모든 곳을 검색했으며 간단한 수정으로 보이지만 해결책을 찾지 못하는 것 같습니다. 내 Access 2013 양식에 여러 개의 Rectangle 컨트롤이 있고 모두 처리하는 OnClick 이벤트가 생성됩니다. 나는 몇 가지 다른 방법으로 작업 해 왔으며, 가장 간단하고/깨끗한 방법을 찾았다 고 생각합니다. 컨트롤을 컬렉션에 넣고 각 컨트롤의 OnClick 이벤트를 변경합니다. 여기 내 문제는 : 액세스 폼을 열고 컨트롤에 대한 이벤트를 변경 한 인식하지만 컨트롤을 클릭하면 오류를 throw하고 이벤트를 실행하지 않습니다.액세스 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

기능TestClick을 찾을 수 없다는 오류 메시지가 표시됩니다. 귀하의 TestClick은 함수가 아닌 서브 루틴입니다.

다음은 컨트롤의 .OnClick 속성에 대한 함수 사용이 가능하지만 ... 함수이 필요하다는 것을 보여주는 Access 2010 및 2013에서 테스트 한 간단한 예입니다. :-)

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 웹 애플리케이션으로 작업하는 경우 어떤 일이 발생할지 모르겠습니다.

+0

와우! 그것은 효과가있다! 나는 그것을 시도하는 것을 생각하지 않았다. 내 마음이 날아 갔어. 도와 주셔서 감사합니다! 그건 그렇고, 나는 또한 데스크톱 버전입니다. – JaredS

+2

Ahhhhh 나는 *** 함수가 ***이 표현이라고 생각하지 않습니까? – RubberDuck

+0

가끔 어디서 잘못되었는지보기 위해 팀워크가 필요하다고 생각합니다. 둘 다 감사합니다! – JaredS

5

VBA에서 실행할 프로 시저를 지정하지 않아도됩니다. 실행되는 절차는 이고 항상ControlName_Click이됩니다. 설정하려고하는 OnClick 속성 만 사용하면 Access 매크로와 [Event Procedure] vba 코드간에 전환 할 수 있습니다. 닷넷 플랫폼에서 이벤트 델리게이트가하는 것처럼 작동하지 않습니다.

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

관련 문제