из диалога значения в ячейку вносятся, хотя в поле textbox они отображаются с точкой
как - так? Еще раз посмотрите скрин из №16. Там запятые в боксах. А теперь еще перечитайте топик - какое отношение имеет Ваш пост №19 к обсуждаемому вопросу?
Как правильно задать формат для TextBox, чтобы значение воспринималось, как число и формула на листе работала? И как правильно установить ограничения, что бы нельзя было ввести ничего, кроме числа с десятичными значениями в поле TextBox?
Во все остальное я не вникал и не собираюсь, это за рамками темы. Ищите ошибки в своем коде. Или еще проще для Вас(ну сложновато Вам пока такие проекты), может стоит обратиться в раздел Фриланс?
Т.е. я отключил Ваше творчество, вызывающее ошибку, но Вы утверждали что
из диалога значения в ячейку вносятся, хотя в поле textbox они отображаются с точкой
как - так? Еще раз посмотрите скрин из №16. Там запятые в боксах. А теперь еще перечитайте топик - какое отношение имеет Ваш пост №19 к обсуждаемому вопросу?
Как правильно задать формат для TextBox, чтобы значение воспринималось, как число и формула на листе работала? И как правильно установить ограничения, что бы нельзя было ввести ничего, кроме числа с десятичными значениями в поле TextBox?
Во все остальное я не вникал и не собираюсь, это за рамками темы. Ищите ошибки в своем коде. Или еще проще для Вас(ну сложновато Вам пока такие проекты), может стоит обратиться в раздел Фриланс?KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Все считает, главное мышку подвести к текстбоксу справа
Ваш вариант тоже работает не корректно. Формула считает, но: в диалоговом окне не дает установить разделитель десятичных дробей при наборе числа. Вставить число без запятой можно, и потом в середину числа вставить разделитель можно. Но вот сразу набрать число с разделителем не получается. Кроме того в качестве разделителя отображается точка, а не запятая. Но можно заменить на запятую, тогда в диалоговом окне будет отображаться запятая и формула тоже будет считаться. Но если закрыть и открыть диалог, то снова будет точка.
Все считает, главное мышку подвести к текстбоксу справа
Ваш вариант тоже работает не корректно. Формула считает, но: в диалоговом окне не дает установить разделитель десятичных дробей при наборе числа. Вставить число без запятой можно, и потом в середину числа вставить разделитель можно. Но вот сразу набрать число с разделителем не получается. Кроме того в качестве разделителя отображается точка, а не запятая. Но можно заменить на запятую, тогда в диалоговом окне будет отображаться запятая и формула тоже будет считаться. Но если закрыть и открыть диалог, то снова будет точка.Stork4ever
Function EnterNumbersOnly(intKeyAscii As MSForms.ReturnInteger, MyTextBox As Object) As Integer
' ВВОД ТОЛЬКО ЦИФР, ЗНАК "-", ","
On Error Resume Next Select Case intKeyAscii Case 48 To 57, 8 ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены) EnterNumbersOnly = intKeyAscii If Not (IsNumeric(Left(MyTextBox.Value, MyTextBox.SelStart) & Chr(EnterNumbersOnly) _ & Right(MyTextBox.Value, Len(MyTextBox) - MyTextBox.SelStart))) Then EnterNumbersOnly = 0 ' проверка на предмет типо- 12%3 или 1-23 Shell "Cmd.exe /c echo " & Chr(7), vbHide End If Case 44, 46 ' обработка десятичного разделителя (44 - код запятой, 46 - код точки) EnterNumbersOnly = Asc(Application.DecimalSeparator) 'Меняем разделитель на системный If InStr(1, MyTextBox.Text, Application.DecimalSeparator) Then EnterNumbersOnly = 0 ' вторую запятую нельзя Shell "Cmd.exe /c echo " & Chr(7) & Chr(7), vbHide End If Case 45 ' дефис (минус перед числом) If InStr(1, MyTextBox.Text, "-") Then EnterNumbersOnly = 0 ' второй минус нельзя Shell "Cmd.exe /c echo " & Chr(7), vbHide Else MyTextBox.Text = "-" & MyTextBox.Text EnterNumbersOnly = 0 End If Case Else EnterNumbersOnly = 0 ' остальные символы запрещены Shell "Cmd.exe /c echo " & Chr(7), vbHide End Select End Function
[/vba]
Stork4ever, попробуйте так[vba]
Код
Function EnterNumbersOnly(intKeyAscii As MSForms.ReturnInteger, MyTextBox As Object) As Integer
' ВВОД ТОЛЬКО ЦИФР, ЗНАК "-", ","
On Error Resume Next Select Case intKeyAscii Case 48 To 57, 8 ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены) EnterNumbersOnly = intKeyAscii If Not (IsNumeric(Left(MyTextBox.Value, MyTextBox.SelStart) & Chr(EnterNumbersOnly) _ & Right(MyTextBox.Value, Len(MyTextBox) - MyTextBox.SelStart))) Then EnterNumbersOnly = 0 ' проверка на предмет типо- 12%3 или 1-23 Shell "Cmd.exe /c echo " & Chr(7), vbHide End If Case 44, 46 ' обработка десятичного разделителя (44 - код запятой, 46 - код точки) EnterNumbersOnly = Asc(Application.DecimalSeparator) 'Меняем разделитель на системный If InStr(1, MyTextBox.Text, Application.DecimalSeparator) Then EnterNumbersOnly = 0 ' вторую запятую нельзя Shell "Cmd.exe /c echo " & Chr(7) & Chr(7), vbHide End If Case 45 ' дефис (минус перед числом) If InStr(1, MyTextBox.Text, "-") Then EnterNumbersOnly = 0 ' второй минус нельзя Shell "Cmd.exe /c echo " & Chr(7), vbHide Else MyTextBox.Text = "-" & MyTextBox.Text EnterNumbersOnly = 0 End If Case Else EnterNumbersOnly = 0 ' остальные символы запрещены Shell "Cmd.exe /c echo " & Chr(7), vbHide End Select End Function
Private Sub TextBox1_Change() If IsNumeric(Me.TextBox1.Text) Then Sheets("Лист1").Range("A1") = TextBox1 Else Me.TextBox1.Text = Val(Me.TextBox1.Text) End If End Sub
Private Sub TextBox2_Change() If IsNumeric(Me.TextBox1.Text) Then Sheets("Лист1").Range("A2") = TextBox2 Else Me.TextBox2.Text = Val(Me.TextBox2.Text) End If End Sub
[/vba]
еще вариант [vba]
Код
Private Sub TextBox1_Change() If IsNumeric(Me.TextBox1.Text) Then Sheets("Лист1").Range("A1") = TextBox1 Else Me.TextBox1.Text = Val(Me.TextBox1.Text) End If End Sub
Private Sub TextBox2_Change() If IsNumeric(Me.TextBox1.Text) Then Sheets("Лист1").Range("A2") = TextBox2 Else Me.TextBox2.Text = Val(Me.TextBox2.Text) End If End Sub
Не дает с первого раза ввести десятичное число. Потом можно подставить запятую в целое число, а сразу набрать - не реагирует на разделитель. В какой-то момент посыпались ошибки.
Не дает с первого раза ввести десятичное число. Потом можно подставить запятую в целое число, а сразу набрать - не реагирует на разделитель. В какой-то момент посыпались ошибки.Stork4ever
диалоговое окно отрабатывает отлично. Дробные числа вводятся сразу с запятой, все хорошо, но формула в ячейке A3 при этом не считает. Если вручную ввести те же цифры но в ячейки A1 и A2? то в A3 автосумма считает.
диалоговое окно отрабатывает отлично. Дробные числа вводятся сразу с запятой, все хорошо, но формула в ячейке A3 при этом не считает. Если вручную ввести те же цифры но в ячейки A1 и A2? то в A3 автосумма считает.Stork4ever
Уважаемые форумчане, обратите, пожалуйста, внимание на тот факт, что у диалогового окна есть обратная связь в виде: [vba]
Код
Sub UserForm_Initialize() With Sheets("Лист1") Me.TextBox1.Value = .Range("A1").Value Me.TextBox2.Value = .Range("A2").Value Me.Label3.Caption = "СУММ(A1:A2) = " & Format(.Range("A3"), "0.00") Me.Label4.Caption = "A1 + A2 = " & Format(.Range("A4"), "0.00") End With End Sub
[/vba]
Которая запускается, как при запуске диалога, так и при изменениях значений. И тут, видимо, нужно сделать тоже конвертацию в правильный формат. Посмотрите по шагово, как работает макрос. Получается, что после внесения изменения в текстбокс идет запись в ячейку, а потом снова инициализация и запись из ячейки в текстбокс. Возможно именно здесь основная проблема?!.
обратная связь организована в ЭтаКнига: [vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) UFI 'Запускаем проверку изменений в таблицах для получения актуальных данных в диалоговом окне. End Sub
[/vba]
где в модуле прописано: [vba]
Код
Sub UFI() UserForm1.UserForm_Initialize End Sub
[/vba]
ВАЖНО!!! Данные могут вноситься как в ячейки A1 и A2, так и через диалоговое окно. При этом происходит синхронизация между данными в таблице и диалоговым окном.
Уважаемые форумчане, обратите, пожалуйста, внимание на тот факт, что у диалогового окна есть обратная связь в виде: [vba]
Код
Sub UserForm_Initialize() With Sheets("Лист1") Me.TextBox1.Value = .Range("A1").Value Me.TextBox2.Value = .Range("A2").Value Me.Label3.Caption = "СУММ(A1:A2) = " & Format(.Range("A3"), "0.00") Me.Label4.Caption = "A1 + A2 = " & Format(.Range("A4"), "0.00") End With End Sub
[/vba]
Которая запускается, как при запуске диалога, так и при изменениях значений. И тут, видимо, нужно сделать тоже конвертацию в правильный формат. Посмотрите по шагово, как работает макрос. Получается, что после внесения изменения в текстбокс идет запись в ячейку, а потом снова инициализация и запись из ячейки в текстбокс. Возможно именно здесь основная проблема?!.
обратная связь организована в ЭтаКнига: [vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) UFI 'Запускаем проверку изменений в таблицах для получения актуальных данных в диалоговом окне. End Sub
[/vba]
где в модуле прописано: [vba]
Код
Sub UFI() UserForm1.UserForm_Initialize End Sub
[/vba]
ВАЖНО!!! Данные могут вноситься как в ячейки A1 и A2, так и через диалоговое окно. При этом происходит синхронизация между данными в таблице и диалоговым окном.Stork4ever
Сообщение отредактировал Stork4ever - Понедельник, 11.09.2017, 15:18
Я Вам еще в № 21 написал, что ошибки вызывает Ваш код. Не хотите его менять - дело Ваше, но перестаньте тогда впустую тратить время форумчан. Вам дали с десяток работоспособных кодов обработки текстбоксов. Все остальное(еще раз повторяю!) ЗА рамками этой темы.
Я Вам еще в № 21 написал, что ошибки вызывает Ваш код. Не хотите его менять - дело Ваше, но перестаньте тогда впустую тратить время форумчан. Вам дали с десяток работоспособных кодов обработки текстбоксов. Все остальное(еще раз повторяю!) ЗА рамками этой темы.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728