2012-09-17 1 views
1

나는 실행 시간 동안 텍스트 상자를 생성하는 Excel UserForm을 가지고있다. 코드는 다음과 같다.Excel-VBA 동적으로 생성 된 UserForm TextBox가 변경된 것을 확인하는 방법은 무엇입니까?

Dim CompHandler() As New CCompHandler 
Dim tb As MSForms.TextBox 
Dim count As Integer 
For i in Range(something) 
    If i = anotherthing Then 
     Set tb = UserForm1.Controls.Add("Forms.TextBox.1", "tb" & count) 
     With tb 
      .Width = iTbWidth 
      .Top = count * distance 
      .Left = iTbLeft 
      .Height = iTbHeight 
      .Value = Cells(row, column) 
      ReDim Preserve CompHandler(0 To count) 
      Set CompHandler(count).TextBoxGroup = tb 
     End With 
    count = count + 1 
    End If 
Next i 

변경된 값을 해당 셀에 다시 기록하고 싶습니다. 나는 이미 상자가 변경되었을 때 얻을 수있어 새로운 class called CCompHandler에이 코드 값 :

Option Explicit 

Public WithEvents TextBoxGroup As MSForms.TextBox 

Private Sub TextBoxGroup_Change() 

    MsgBox TextBoxGroup 

End Sub 

그래서에 .. 어떤 아이디어가 어떻게 텍스트 상자 변경 내가받을 수 있나요? 아니면 더 나은 방법이 있을까요? 미리 감사드립니다.

+2

CompHandler는 어떻게 정의됩니까? 구성 요소는 사용자 양식입니까? 추측을 많이하지 않고서도 이것을 테스트하거나 바이올린을 할 수는 없습니다. 코드의 나머지 부분을 알려주시겠습니까? –

+0

@DanielCook : 나는 그것을 더 분명하게했다. – ramtoo

답변

3

Tag 속성은 일반적으로 이와 같은 용도로 사용됩니다.

Debug.Print tbWhoseValueHasChanged.Tag 

귀하의 코드가 i 포함 불분명/정의되지 않은 변수를 많이 가지고 같은 뭔가 그런 다음 태그 속성 나중에 액세스 할 수 있습니다

With tb 
    ... 
    .Tag = i.Address 
... 
End With 

: 창조에 같은 것을 추가 할 수 있습니다. 위의 범위 변수라고 가정했습니다.

+0

고마워요! 하지만 클래스 처리기에서 어떻게 사용할 수 있습니까? 아니면 그것을 사용하는 더 좋은 방법이 있습니까? – ramtoo

+0

당신은 TextBox가 변경되었을 때 얻을 수 있다고 말했으므로, 그 시점에서 Tag 속성에 액세스하십시오. 그것은 끈기 있습니다. 편집을 참조하십시오. –

+0

방금 ​​효과가있었습니다. 고맙습니다! 나는 어리석은 질문이었던 것처럼 느낀다. – ramtoo

관련 문제