VB(A)

여러 개의 텍스트박스를 클릭하여 이름 알아내기

당근쨈 2019. 6. 17. 20:54

텍스트박스를 더블클릭하면 레이블에 텍스트박스 이름이 출력됩니다

https://cafe.naver.com/excelmaster/165632 질문입니다.

 

유저폼에 여러 개의 텍스트박스가 있고

그 중 하나를 클릭하면 해당 텍스트박스의 이름이 출력되는 코드입니다.

 

텍스트박스가 몇개 없을 땐 텍스트박스마다 클릭 이벤트를 지정하면 되는데

개수가 많을 땐 그럴 순 없지요

클래스모듈의 WithEvents 를 이용하여 간결하게 코드를 만들 수 있습니다.

먼저 클래스모듈 하나를 삽입하여 모듈 이름을 clsTextBox 로 변경한 후 아래 코드를 삽입합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Private WithEvents MyTextBox As MSForms.TextBox
 
Public Property Set Control(tb As MSForms.TextBox)
 
    Set MyTextBox = tb
    
End Property
 
 
 
Private Sub MyTextBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 
    Call UserForm1.PersistentUpdate_ItemNumber(MyTextBox.Name)
    
End Sub
 
cs

 

그 다음 UserForm1 에 아래의 코드를 삽입합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Dim tbCollection As Collection
 
Private Sub UserForm_Initialize()
     
    Dim ctrl As MSForms.Control
    Dim obj As clsTextBox
 
    Set tbCollection = New Collection
    
    For Each ctrl In Me.Controls
    
        If TypeOf ctrl Is MSForms.TextBox Then
 
            Set obj = New clsTextBox
            Set obj.Control = ctrl
            tbCollection.Add obj
            
        End If
        
    Next ctrl
    
    Set obj = Nothing
     
End Sub
 
Sub PersistentUpdate_ItemNumber(MyName As String)
     
    Label2.Caption = Me(MyName).Name
     
End Sub
 
cs

통합 문서1.xlsm
0.02MB