выполнение одной и той же операции
Для первой строки я написал код, который вычисляет среднее в первых трех текстовых блоках и результат записывает в Label.(код ниже)
Вопрос: неужели для вычисления среднего во всех остальных 19 строках нужно ссылаться опять на свою процедуру и повторять эти процедуры 19 раз? Можно ли сделать проще для вычисления среднего по остальным строкам?
Private Sub TextBox1_Change()
sred_ball
End Sub
Private Sub TextBox2_Change()
sred_ball
End Sub
Private Sub TextBox3_Change()
sred_ball
End Sub
Public Sub sred_ball()
Label1.Caption = (Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text)) / 3
End Sub
Код:
'Считает среднее
'Параметр - число текстовых окон на форме
Public Sub sred_ball(ByVal textBoxCount As Long)
Dim ctl As Control 'от Control наследуют все элементы управления в ВБ, значит могут быть им представлены
Dim lngValue As Long 'считаем сумму в эту переменную
'перебираем все элементы управления на нашей форме
For Each ctl In Me.Controls
'если это текстовое поле и текст в нем можно представить как число
If TypeOf ctl Is TextBox Then _
If IsNumeric(ctl.Text) Then _
lngValue = lngValue + CLng(ctl.Text) 'прибавляем к переменной записанное в текстовом поле число
Next
'теперь среднее
lngValue = lngValue \ textBoxCount
'я люблю функцию Format$ - работает быстро и имеет кучу возможностей по форматированию вывода
Me.Label1.Caption = Format$(lngValue, "### ### ### ### ### ### ### ### ### ### ### ### ##0")
End Sub
'будет вызываться при каждом изменении текста в текстовых полях, которые входят в массив
Private Sub Text1_Change(Index As Integer)
'вызываем функцию подсчета, и передаем ей число текстовых полей
sred_ball Text1.Count
End Sub
'Параметр - число текстовых окон на форме
Public Sub sred_ball(ByVal textBoxCount As Long)
Dim ctl As Control 'от Control наследуют все элементы управления в ВБ, значит могут быть им представлены
Dim lngValue As Long 'считаем сумму в эту переменную
'перебираем все элементы управления на нашей форме
For Each ctl In Me.Controls
'если это текстовое поле и текст в нем можно представить как число
If TypeOf ctl Is TextBox Then _
If IsNumeric(ctl.Text) Then _
lngValue = lngValue + CLng(ctl.Text) 'прибавляем к переменной записанное в текстовом поле число
Next
'теперь среднее
lngValue = lngValue \ textBoxCount
'я люблю функцию Format$ - работает быстро и имеет кучу возможностей по форматированию вывода
Me.Label1.Caption = Format$(lngValue, "### ### ### ### ### ### ### ### ### ### ### ### ##0")
End Sub
'будет вызываться при каждом изменении текста в текстовых полях, которые входят в массив
Private Sub Text1_Change(Index As Integer)
'вызываем функцию подсчета, и передаем ей число текстовых полей
sred_ball Text1.Count
End Sub