Добрый вечер!
Подскажите решение, у меня на форме имеются контролы TextBox1...TextBox24 и для каждого из них свой Label1...Label24 (описание), также для каждого контроля добавлен код, отслеживающий его изменение. Код отличается только номером TextBox и номером Label. Подскажите как можно сократить код (код ограничивает ввод только цифрами с двумя знаками после точки и меняет цвет своего Label при заполнении соответствующего TextBox.
Private Sub Dannye1_Change()
If Dannye1.Value = "" Then Label1.ForeColor = RGB(255, 0, 0) Else Label1.ForeColor = RGB(0, 120, 0)
Const DECSEP = "." ' <== дес. разделитель: запятая или точка
Const DECPLACES = 2 ' <== количество дес. разрядов
Dim i As Double, j As Integer, ds As String, s As String
Static old As String
If DECSEP = "." Then ds = "," Else ds = "."
On Error Resume Next
s = Dannye1
If Len(s) = 0 Then old = "": Exit Sub
s = Replace(Replace(s, " ", ""), ds, DECSEP)
Dannye1 = s
i = CDbl(Replace(s, DECSEP, Mid$(CStr(1.2), 2, 1)))
j = InStr(s, DECSEP)
If j > 0 Then j = Len(s) - j
If Err <> 0 Or j > DECPLACES Then
Dannye1 = old
Else
old = Dannye1
End If
End Sub
Подскажите решение, у меня на форме имеются контролы TextBox1...TextBox24 и для каждого из них свой Label1...Label24 (описание), также для каждого контроля добавлен код, отслеживающий его изменение. Код отличается только номером TextBox и номером Label. Подскажите как можно сократить код (код ограничивает ввод только цифрами с двумя знаками после точки и меняет цвет своего Label при заполнении соответствующего TextBox.
Private Sub Dannye1_Change()
If Dannye1.Value = "" Then Label1.ForeColor = RGB(255, 0, 0) Else Label1.ForeColor = RGB(0, 120, 0)
Const DECSEP = "." ' <== дес. разделитель: запятая или точка
Const DECPLACES = 2 ' <== количество дес. разрядов
Dim i As Double, j As Integer, ds As String, s As String
Static old As String
If DECSEP = "." Then ds = "," Else ds = "."
On Error Resume Next
s = Dannye1
If Len(s) = 0 Then old = "": Exit Sub
s = Replace(Replace(s, " ", ""), ds, DECSEP)
Dannye1 = s
i = CDbl(Replace(s, DECSEP, Mid$(CStr(1.2), 2, 1)))
j = InStr(s, DECSEP)
If j > 0 Then j = Len(s) - j
If Err <> 0 Or j > DECPLACES Then
Dannye1 = old
Else
old = Dannye1
End If
End Sub