2016-06-07 3 views
0

다음 코드를 사용하여 클릭 할 때마다 userform의 텍스트 상자 안의 텍스트를 선택했지만 거의 40 개의 텍스트 상자가 있고 이 코드 조각을 40 번 복사하여 붙여 넣는 대신 모든 코드를 하나의 코드로 작성하는 것이 좋습니다.VBA 사용자 정의 폼의 텍스트 상자 안의 텍스트 선택

Private Sub textbox1_MouseDown(ByVal Button As Integer, _ 
ByVal Shift As Integer,ByVal X As Single, ByVal y As Single) 

With Me.textbox1 
    .SelStart = 0 
    .SelLength = Len(.Text) 
End With 

End Sub 
+0

-

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) SelectText End Sub 

그런 다음 ActiveControl에서 작동하는 프로 시저를 만들 수 있습니다. 그런 다음 주 코드는 텍스트 상자를 만들고 필요에 따라 텍스트를 선택할 개체 (새 클래스)를 만듭니다. – PeterT

+0

감사합니다. 나는 꽤 vba/userforms에 익숙하지 않고 사용자 클래스를 만드는 방법을 모르겠다. – pmv

+0

이 게시물은 당신을 도울 수있다 : [assign-code-to-a-button-created-dynamically] (http : // stackoverflow. com/questions/10224511/assign-code-to-a-button-created-dynamically) – Kellsens

답변

0

모두 실행되는 단일 인스턴스를 작성하는 방법이 있습니다.

코드의 단일 인스턴스를 호출 할 각 텍스트 상자에 MouseDown 이벤트에 대한 코드 줄을 추가해야합니다. 예를 들어

: - : 텍스트 상자를 캡슐화하는 사용자 클래스를 작성

Private Sub SelectText() 
With ActiveControl 
    .SelStart = 0 
    .SelLength = Len(.Text) 
End With 
End Sub 
+0

게리, 고맙지 만 텍스트 상자에 공통 이름이 없으면 어떻게 될까요? 스프레드 시트의 열과 동일하게 호출되므로 코드의 다른 부분에이 논리를 사용하기 때문에이 점을 변경할 수 없습니다. – pmv

+0

@pmv 답을 변경했습니다. 일반적인 프로 시저 (예제에서 'SelectText')를 호출하는 것은 텍스트 상자 일 뿐이므로 컨트롤 유형을 검사하는 방법에 대해 걱정할 필요가 없습니다. –

관련 문제