2014-06-25 3 views
-1

많은 텍스트 상자가있는 사용자 정의가 있으며 각각의 변경 사항을 감지해야합니다. 그래서 나는 폼에있는 모든 텍스트 박스를위한 서브 루틴을 작성했고 그것은 많은 코드를 만들어냅니다. 모든 텍스트 상자의 코드가 동일하므로이를 최적화하고 싶습니다. 따라서 폼의 텍스트 상자에 변경 사항을 감지하는 서브 루틴을 하나만 작성할 수 있습니까?VBA : 사용자 폼의 텍스트 상자에서 변경 내용을 감지합니다.

Private WithEvents txtbox As MSForms.TextBox 


Public Property Set TextBox(ByVal t As MSForms.TextBox) 
    Set txtbox = t 
End Property 


Private Sub txtbox_Change() 
    ' code for handling the event 
End Sub 

그리고 내부 코드 : mytextbox라는 이름의 클래스 모듈에 대한

코드 :

+0

예, 클래스 및 WithEvent가 있습니다. [VBA : 사용자 정의 폼에서 WithEvents 사용하기] (0120-998-003)를 참조하십시오. –

+0

컨트롤 배열을 참조하십시오. 도움말. 컨트롤 배열은 같은 이름과 형식을 공유하는 컨트롤 그룹입니다. 또한 동일한 이벤트 절차를 공유합니다. 컨트롤 배열에는 적어도 하나의 요소가 있으며 시스템 리소스와 메모리가 허용하는만큼 많은 요소로 확장 될 수 있습니다. 크기는 각 컨트롤에 필요한 메모리 및 Windows 리소스의 양에 따라 다릅니다. 컨트롤 배열에서 사용할 수있는 최대 인덱스는 32767입니다. 동일한 컨트롤 배열의 요소에는 고유 한 속성 설정이 있습니다. 컨트롤 배열의 일반적인 용도로는 메뉴 컨트롤과 옵션 단추 그룹이 있습니다. – phd443322

+0

감사합니다. z̫͋. 그것은 위대한 작품! – Millik

답변

0

것을 달성 할 수있는 유일한 방법은 WithEvents

가 여기에 최소한의 예제와 함께 클래스를 사용하는 것입니다 모든 텍스트 상자의 이벤트를 처리하기를 원한다고 가정하는 사용자 정의 폼

Private myEventHandlers As Collection 

Private Sub UserForm_Initialize() 
    Dim txtbox As mytextbox 

    Set myEventHandlers = New Collection 

    Dim c As Control 
    For Each c In Me.Controls 
     If TypeName(c) = "TextBox" Then 
      Set txtbox = New mytextbox 

      Set txtbox.TextBox = c 

      myEventHandlers.Add txtbox 
     End If 
    Next c 
End Sub 
관련 문제