Форум по VBA, Excel и Word

VBA, Excel => VBA, макросы в Excel => Тема начата: Amator от 11 мая 2014, 13:54

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

[вложение удалено администратором]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Администратор от 11 мая 2014, 14:33
Amator, когда на форме находится несколько элементов управления (полей, кнопок и т.д.), то становится неудобно писать код для каждого элемента управления.

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

[вложение удалено администратором]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 11 мая 2014, 14:41
Спасибо! Класс.
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 12 мая 2014, 15:23
Появилась проблема. Как на одну форму назначить два кода? Может как то в один?
Спойлер

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
[свернуть]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Администратор от 12 мая 2014, 15:38
А в чём сложности?

Если просто объединить, то что-то не работает:?
Макрос
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
[свернуть]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 12 мая 2014, 15:49
При объединении я сделал ошибку . Теперь код работает . Спасибо.
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 13 мая 2014, 20:24
Здравствуйте. Опять проблемма. В одном файле код работает замечательно. В другом - ошибка. Проблемма с  arrClass2. Что это значит?

[вложение удалено администратором]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Администратор от 13 мая 2014, 20:43
Amator, а какой текст ошибки?
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 13 мая 2014, 20:54
Текст:

[вложение удалено администратором]
Название: Re: Суммирование значений текстбоксов.
Отправлено: Администратор от 13 мая 2014, 20:58
Amator, я так понимаю, что Вы не создали массив "arrClass1". Этот массив создаётся вверху модуля.
Название: Re: Суммирование значений текстбоксов.
Отправлено: Amator от 13 мая 2014, 21:04
Все верно, моя ошибка. Спасибо.