Здравствуйте. Помогите ,пожалуйста, задать числовой формат (0,000) для текстбоксов. По нажатию на деталь (А, В ,С ) увеличивается их количество на еденицу и соответственно увеличивается площадь деталей. Автоматически суммируется колличество всех деталей и их площадь. Если площадь детали целое число - все работает (деталь А и В), но если дробь (деталь С) , то ошибка.
Здравствуйте. Помогите ,пожалуйста, задать числовой формат (0,000) для текстбоксов. По нажатию на деталь (А, В ,С ) увеличивается их количество на еденицу и соответственно увеличивается площадь деталей. Автоматически суммируется колличество всех деталей и их площадь. Если площадь детали целое число - все работает (деталь А и В), но если дробь (деталь С) , то ошибка.Amator
Amator, проблема в том, что при изменении, у Вас возникает в какой-то момент запись аля: "2,", в данный момент отрабатывается событие Change и CDbl("2,") даёт ошибку... Поэтому, поставив обработчик ошибок (On Error Resume Next), мы это минуем. [vba]
Код
Private Sub myTextBox_Change() Dim dblSum As Double Dim i As Long Dim a As String For i = 1 To 3 Step 1 a = UserForm1.Controls("TextBox" & i).Text If a <> "" Then On Error Resume Next dblSum = dblSum + CDbl(a) End If Next i UserForm1.TextBox86.Text = dblSum End Sub
[/vba]
Amator, проблема в том, что при изменении, у Вас возникает в какой-то момент запись аля: "2,", в данный момент отрабатывается событие Change и CDbl("2,") даёт ошибку... Поэтому, поставив обработчик ошибок (On Error Resume Next), мы это минуем. [vba]
Код
Private Sub myTextBox_Change() Dim dblSum As Double Dim i As Long Dim a As String For i = 1 To 3 Step 1 a = UserForm1.Controls("TextBox" & i).Text If a <> "" Then On Error Resume Next dblSum = dblSum + CDbl(a) End If Next i UserForm1.TextBox86.Text = dblSum End Sub
Текстбокс - он на то и текстбокс, что бы в нем был текст Суммировать текст нельзя, можно только числа, значит текст текстбоксов надо переводить в числа. Как - написано выше:
Текстбокс - он на то и текстбокс, что бы в нем был текст Суммировать текст нельзя, можно только числа, значит текст текстбоксов надо переводить в числа. Как - написано выше:
Private Sub myTextBox_Change() Dim dblSum As Double, a$, s$ Dim i As Long Set RE = CreateObject("VBScript.RegExp") RE.Global = True RE.IgnoreCase = True RE.Pattern = "\d|\.|\," For i = 1 To 3 Step 1 a = UserForm1.Controls("TextBox" & i).Text Set oMatches = RE.Execute(a) For i1 = 0 To oMatches.Count - 1 s = s & oMatches.Item(i1) Next i1 s = Replace(s, ".", ",") If s <> "" Then dblSum = dblSum + CDbl(s) End If s = "" Next i UserForm1.TextBox86.Text = dblSum End Sub
[/vba] будет отсеивать нечисловые значения (всё что не цифра и всё что не ".", ",").
Amator, как вариант, можно попробовать так: [vba]
Код
Private Sub myTextBox_Change() Dim dblSum As Double, a$, s$ Dim i As Long Set RE = CreateObject("VBScript.RegExp") RE.Global = True RE.IgnoreCase = True RE.Pattern = "\d|\.|\," For i = 1 To 3 Step 1 a = UserForm1.Controls("TextBox" & i).Text Set oMatches = RE.Execute(a) For i1 = 0 To oMatches.Count - 1 s = s & oMatches.Item(i1) Next i1 s = Replace(s, ".", ",") If s <> "" Then dblSum = dblSum + CDbl(s) End If s = "" Next i UserForm1.TextBox86.Text = dblSum End Sub
[/vba] будет отсеивать нечисловые значения (всё что не цифра и всё что не ".", ",").Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Понедельник, 27.06.2016, 15:05