2013-08-22 2 views
3

과 같은 글자를 쓸 수 있습니까?? 더 많은 개체 (TextBox, CheckBox, OptionButton, Label, ...)에 대한 수신기를 갖고 싶습니다. 수업 시간에 청취자를 불러주세요. 나는 몇 가지 일반적인 이벤트를, 그래서 내 생각은 다음과 같습니다 리스너를 설정 내가 서브를 호출하고있어 내 실행 방법에서여러 유형의 글로벌 이벤트

Public WithEvents eventGlobLst As <DontKnowWhat>SomeType</DontKnowWhat> 

Sub setListener(controlObj As SomeType) 
    Set eventGlobList = controlObj 
End Sub 

For Each pages In csDialgog.MultiPage.Pages 
    For Each objectControl In pages.Controls 

     Set eventClass = New ControlsClass 
     eventClass.setListener objectControl 
     universalObjectCollection.Add eventClass 
    Next 
Next 

고전 이벤트와 함께 잘 작동 . 마지막으로 이벤트 처리기가 있습니다.

Private Sub EventGlobLstnr_AfterUpdate() 
    Functions.GlobalChange 
End Sub 

제가 사용할 수있는 모든 개체의 조상이 있는지 알고 싶습니다. 또는 모든 유형별로 리스너를 별도로 작성하고 동일하게 설정해야합니다 (GlobalChange).

답변

0

대답은 아니오입니다. 자필 코드를 사용하는 것이 좋습니다.
이벤트 프로 시저

이 코드는 Workbook_Open 이벤트 프로 시저를 만듭니다 만들기 : 다음은 VBA 편집기이 코드는 칩 피어슨에서 찍은

Programming the VBA editor - Chip Pearson

에 쓸 수있는 좋은 링크입니다. 이벤트 프로 시저를 만들 때 올바른 프로 시저 선언 및 매개 변수 목록이 사용되도록 CreateEventProc 메서드를 사용해야합니다. CreateEventProc은 선언 라인과 프로 시저 라인의 끝을 생성합니다. 이벤트 프로 시저가 시작되는 행 번호를 리턴합니다.

Sub CreateEventProcedure() 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim CodeMod As VBIDE.CodeModule 
    Dim LineNum As Long 
    Const DQUOTE = """" ' one " character 

    Set VBProj = ActiveWorkbook.VBProject 
    Set VBComp = VBProj.VBComponents("ThisWorkbook") 
    Set CodeMod = VBComp.CodeModule 

    With CodeMod 
     LineNum = .CreateEventProc("Open", "Workbook") 
     LineNum = LineNum + 1 
     .InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE 
    End With 
End Sub 

.CreateEventProc 사용하면 "캐치"
에 나는 이것이 당신이 원하는 목표를 달성하는 유일한 방법이라고 생각 당신이 원하는 각 요소에 대한 이벤트를 만들 수 있습니다.

건배,
kpark