2016-09-04 4 views
0

У меня есть пользовательская форма в VBE с 12 текстовыми полями (по 1 для каждого месяца в году). Существует дополнительное текстовое поле, которое должно отображать сумму значений в каждом из первых 12 ящиков, обновлять и пересчитывать себя по мере изменения значений в других текстовых блоках.Использование класса и WithEvents для обнаружения изменений в текстовых окнах

Некоторая помощь в реализации решения этой проблемы очень ценится.

Код я пытаюсь осуществить взят из поста на:

VBA: Detect changes in any textbox of the userform

Однако я не уверен, что положить в разделе событий ниже класса.

NB: Это моя первая попытка использовать классы, поэтому я просто изучаю.

+0

с чем? не предоставили никакой полезной информации? загрузите свою последнюю попытку кода, ваш пользователь-то, что-то, что мы можем вам помочь –

+0

Спасибо Shai Rado. Я отредактировал сообщение и добавил немного больше информации. Надеюсь, вы сможете помочь получить эту дополнительную информацию. – Albert

ответ

0

Если Class1 это имя вашего класса модуля, Userform1 имя вашего UserForm, и если вы хотите, чтобы сумма всех значений TextBox быть в TextBox13 тогда,

в вашем Class1 модуль вставки

Private WithEvents txtbox As MSForms.TextBox 
Dim ctlr As Control 
Public sum As Integer 

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

Private Sub txtbox_Change() 
    sum = 0 
    For Each ctlr In UserForm1.Controls 
     sum = sum + Val(ctlr) 
    Next ctlr 
    UserForm1.TextBox13 = sum - Val(UserForm1.TextBox13) 
End Sub 

и в UserForm1 модуля вставки

Private myEventHandlers As Collection 

Private Sub UserForm_Initialize() 
    Dim txtbox As Class1 

    Set myEventHandlers = New Collection 

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

      Set txtbox.TextBox = c 

      myEventHandlers.Add txtbox 
     End If 
    Next c 
End Sub 
+0

Спасибо @ArunThomas. Я ищу, чтобы одна процедура события обнаруживала изменения в любом из текстовых полей, а не отдельных, как предлагает ваша публикация. Я отредактировал сообщение и добавил некоторую релевантную информацию. – Albert

+0

см. Мой обновленный ответ, код проверен и работает для меня –

+0

Идеальное решение @ArunThomas. Очень признателен. – Albert