Суммирование значений текстбоксов.

Автор Amator, 11 мая 2014, 13:54

Amator

Здравствуйте. Как подсчитать сумму значений текстбоксов (с 1 по 4) непосредственно во время ввода, и поместить в текстбокс 5? При изменении значений текстбоксов (с 1 по 4) сумма в текстбокс 5 должна менятся. Спасибо.

[вложение удалено администратором]

Администратор

Amator, когда на форме находится несколько элементов управления (полей, кнопок и т.д.), то становится неудобно писать код для каждого элемента управления.

В этом случае создают класс. Я сам плохо понимаю, как и что работает, поэтому плохо могу объяснить процессы.

[вложение удалено администратором]

Amator


Amator

Появилась проблема. Как на одну форму назначить два кода? Может как то в один?
Спойлер

Private Sub UserForm_Initialize()
Dim iLastRow As Long
   
    Me.TextBox72.Text = Cells(79, 16)
    With Sheets("БД")
       lngLastRow = .Cells(Rows.Count, "AE").End(xlUp).Row
        Me.ComboBox1.RowSource = .Range("AE4:AG48" & lngLastRow).Address(External:=True)
        iLastRow = .Cells(Rows.Count, "AF").End(xlUp).Row
        Me.ComboBox2.RowSource = .Range("AF4:AF48" & iLastRow).Address(External:=True)
        iLastRow = .Cells(Rows.Count, "AH").End(xlUp).Row
        Me.ComboBox3.RowSource = .Range("AH4:AH48" & iLastRow).Address(External:=True)
       End With
End Sub

и код

Private Sub UserForm_Initialize()
     Dim i As Long
     For i = 2 To 69 Step 1
      Set arrClass1(i).myTextBox = Me.Controls("TextBox" & i)
    Next i
End Sub
[свернуть]

Администратор

А в чём сложности?

Если просто объединить, то что-то не работает:?
Макрос
Private Sub UserForm_Initialize()

    Dim lngLastRow As Long
    Dim i As Long

   
    Me.TextBox72.Text = Cells(79, 16)
   
    With Sheets("БД")
        lngLastRow = .Cells(Rows.Count, "AE").End(xlUp).Row
        Me.ComboBox1.RowSource = .Range("AE4:AG48" & lngLastRow).Address(External:=True)
        lngLastRow = .Cells(Rows.Count, "AF").End(xlUp).Row
        Me.ComboBox2.RowSource = .Range("AF4:AF48" & lngLastRow).Address(External:=True)
        lngLastRow = .Cells(Rows.Count, "AH").End(xlUp).Row
        Me.ComboBox3.RowSource = .Range("AH4:AH48" & lngLastRow).Address(External:=True)
    End With
   
    For i = 2 To 69 Step 1
        Set arrClass1(i).myTextBox = Me.Controls("TextBox" & i)
    Next i
   
End Sub
[свернуть]

Amator

При объединении я сделал ошибку . Теперь код работает . Спасибо.

Amator

Здравствуйте. Опять проблемма. В одном файле код работает замечательно. В другом - ошибка. Проблемма с  arrClass2. Что это значит?

[вложение удалено администратором]

Администратор


Amator

Текст:

[вложение удалено администратором]

Администратор

Amator, я так понимаю, что Вы не создали массив "arrClass1". Этот массив создаётся вверху модуля.

Amator

Все верно, моя ошибка. Спасибо.