Подкажите пожалуйста как вставить в текст бокс число (а не ТЕКСТ (!)) с плавающей запятой, которое получается при вычислении, как показано ниже? Нужно получитьс в тествомо поле именно число с запятой, чтобы потом его можно было использовать для дальнейших вычислений...
[vba]
Код
Private Sub TextBox1_Change()
Dim a As Long, b As Long, loan As Long
a = 10 ' параметр кредита 1 b = 1000 ' параметр кредита 2 loan = 1000 ' размер кредита TextBox1.Value = CDbl(a / b) ' в текстовом поле параметр кредита 1 делится на парметр кредита 2
If TextBox1.Value = "" Then Exit Sub If Not IsNumeric(TextBox1.Value) Then MsgBox "Что-то пошло не так"
Else: MsgBox "Возможный кредит = " & TextBox1.Value * loan End If
End Sub
[/vba]
Всем добрый день.
Подкажите пожалуйста как вставить в текст бокс число (а не ТЕКСТ (!)) с плавающей запятой, которое получается при вычислении, как показано ниже? Нужно получитьс в тествомо поле именно число с запятой, чтобы потом его можно было использовать для дальнейших вычислений...
[vba]
Код
Private Sub TextBox1_Change()
Dim a As Long, b As Long, loan As Long
a = 10 ' параметр кредита 1 b = 1000 ' параметр кредита 2 loan = 1000 ' размер кредита TextBox1.Value = CDbl(a / b) ' в текстовом поле параметр кредита 1 делится на парметр кредита 2
If TextBox1.Value = "" Then Exit Sub If Not IsNumeric(TextBox1.Value) Then MsgBox "Что-то пошло не так"
Else: MsgBox "Возможный кредит = " & TextBox1.Value * loan End If
Добрый день. Нельзя такие примеры выкладывать! Там же зацикленный код. В текстбоксе всегда текст, но то он и ТЕКСТбокс. Перед вычислением используйте Val() для типа Double
Добрый день. Нельзя такие примеры выкладывать! Там же зацикленный код. В текстбоксе всегда текст, но то он и ТЕКСТбокс. Перед вычислением используйте Val() для типа Doublesboy
Вы вонвь пытаетесь встать на те же грабли. Событие TextBox1_Change весьма мало подходит для этой хотелки. В вашем же файле все идет не так, начиная с отсутствия возможности сделать хоть что-нибудь.
Вы вонвь пытаетесь встать на те же грабли. Событие TextBox1_Change весьма мало подходит для этой хотелки. В вашем же файле все идет не так, начиная с отсутствия возможности сделать хоть что-нибудь.RAN
Сори., но там же работает ctrl+break без проблем для выхода из цикла. Если бы Val помогал ,то это было бы очень просто:) Cобытие KeyPress по совету RAN тут не подходит, тк данные из TextBox1 используются мгновенно для расчета значения в другом Textbox2 на этой же UserForm и без нажатия каких-то кнопок типа Enter Tab, ОК и тд
Сори., но там же работает ctrl+break без проблем для выхода из цикла. Если бы Val помогал ,то это было бы очень просто:) Cобытие KeyPress по совету RAN тут не подходит, тк данные из TextBox1 используются мгновенно для расчета значения в другом Textbox2 на этой же UserForm и без нажатия каких-то кнопок типа Enter Tab, ОК и тдt330
Сообщение отредактировал t330 - Понедельник, 29.04.2019, 17:02
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.
Полный файл вот такой (он не зациклен)
Проблемное место вот это:
Тут tbInitialFeeM (text box initial fee MONEY) - это текстовое поле куда вводится сумма первоначального взноса в РУБЛЯХ а tbInitialFeeP ( text box initial fee Percentage)- это текстовое поле куда вводится сумма первоначального взноса в процентах от полной суммы кредита , которая указана в текствовом поле tbLoan (text box Loan)
Поля tbInitialFeeM и tbInitialFeeP взаимосвязаны по формуле:
tbInitialFeeP = tbInitialFeeM / tbLoan.Value *100
или
tbInitialFeeM= tbInitialFeeP/ 100 * tbLoan
Если в форме при начальной загрузке ввести в поле "Сумма первоначального взноса в руб " ввести цифру 1 , то tbInitialFeeP будет равно 1/10000 *100 = 0.01
Это значение далее передается в процедуру Private Sub tbinitialfeeP_change() где идет проверка [vba]
Код
If IsNumeric(tbInitialFeeP.Value) = False Then MsgBox "Введите процент цифрами в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus
[/vba]
И получается , что как только пользователь вводит сумму первоначального взноса меньше 1 % от суммы Кредита, то форма всегда ругается, что введено не цифровое значение.
Вот эту проблему хотелось бы победить...
[vba]
Код
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в % Private Sub tbinitialfeeP_change() If tbInitialFeeP.Text = "" Then Exit Sub If IsNumeric(tbInitialFeeP.Value) = False Then MsgBox "Введите процент цифрами в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus ElseIf Val(tbInitialFeeP.Value) > 100 Or Val(tbInitialFeeP.Value) < 0 Then MsgBox "Введите процент в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus Else tbInitialFeeM.Value = Val(tbInitialFeeP.Value) / 100 * tbLoan.Value sbInitialFeeP.Value = Val(tbInitialFeeP.Value) * 10 End If
End Sub
'...............................................
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в РУБЛЯХ
Private Sub tbinitialfeeM_change() If tbInitialFeeM.Text = "" Then Exit Sub If IsNumeric(tbInitialFeeM.Value) = False Then MsgBox "Введите сумму первоначального взноса цифрами" tbInitialFeeM.SetFocus ' ElseIf tbInitialFeeM.Value > tbLoan.Value Then ' MsgBox "Введите сумму первоначального взноса менее суммы займа" ' tbInitialFeeM.SetFocus Else tbInitialFeeP.Value = Val(tbInitialFeeM.Value) / Val(tbLoan.Value) * 100 'Debug.Print tbInitialFeeP.Value sbInitialFeeM.Value = tbInitialFeeM.Value End If
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.
Полный файл вот такой (он не зациклен)
Проблемное место вот это:
Тут tbInitialFeeM (text box initial fee MONEY) - это текстовое поле куда вводится сумма первоначального взноса в РУБЛЯХ а tbInitialFeeP ( text box initial fee Percentage)- это текстовое поле куда вводится сумма первоначального взноса в процентах от полной суммы кредита , которая указана в текствовом поле tbLoan (text box Loan)
Поля tbInitialFeeM и tbInitialFeeP взаимосвязаны по формуле:
tbInitialFeeP = tbInitialFeeM / tbLoan.Value *100
или
tbInitialFeeM= tbInitialFeeP/ 100 * tbLoan
Если в форме при начальной загрузке ввести в поле "Сумма первоначального взноса в руб " ввести цифру 1 , то tbInitialFeeP будет равно 1/10000 *100 = 0.01
Это значение далее передается в процедуру Private Sub tbinitialfeeP_change() где идет проверка [vba]
Код
If IsNumeric(tbInitialFeeP.Value) = False Then MsgBox "Введите процент цифрами в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus
[/vba]
И получается , что как только пользователь вводит сумму первоначального взноса меньше 1 % от суммы Кредита, то форма всегда ругается, что введено не цифровое значение.
Вот эту проблему хотелось бы победить...
[vba]
Код
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в % Private Sub tbinitialfeeP_change() If tbInitialFeeP.Text = "" Then Exit Sub If IsNumeric(tbInitialFeeP.Value) = False Then MsgBox "Введите процент цифрами в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus ElseIf Val(tbInitialFeeP.Value) > 100 Or Val(tbInitialFeeP.Value) < 0 Then MsgBox "Введите процент в диаппазоне от 0 до 100%" tbInitialFeeP.SetFocus Else tbInitialFeeM.Value = Val(tbInitialFeeP.Value) / 100 * tbLoan.Value sbInitialFeeP.Value = Val(tbInitialFeeP.Value) * 10 End If
End Sub
'...............................................
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в РУБЛЯХ
Private Sub tbinitialfeeM_change() If tbInitialFeeM.Text = "" Then Exit Sub If IsNumeric(tbInitialFeeM.Value) = False Then MsgBox "Введите сумму первоначального взноса цифрами" tbInitialFeeM.SetFocus ' ElseIf tbInitialFeeM.Value > tbLoan.Value Then ' MsgBox "Введите сумму первоначального взноса менее суммы займа" ' tbInitialFeeM.SetFocus Else tbInitialFeeP.Value = Val(tbInitialFeeM.Value) / Val(tbLoan.Value) * 100 'Debug.Print tbInitialFeeP.Value sbInitialFeeM.Value = tbInitialFeeM.Value End If
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в % Private Sub tbinitialfeeP_change() tbInitialFeeM.Text = CDbl(tbInitialFeeP.Text) / 100 * CDbl(tbLoan.Text) End Sub 'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в РУБЛЯХ Private Sub tbinitialfeeM_change() tbInitialFeeP.Text = CDbl(tbInitialFeeM.Text) / CDbl(tbLoan.Text) * 100 End Sub
[/vba] А далее возникают проблемы, типа деление на 0, отслеживание взаимосвязей спинов и textbox, и ...... В общем, отладка всего кода. Что далеко выходит за рамки одной темы.
Требуемые базовые процедуры элементарны [vba]
Код
'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в % Private Sub tbinitialfeeP_change() tbInitialFeeM.Text = CDbl(tbInitialFeeP.Text) / 100 * CDbl(tbLoan.Text) End Sub 'Описываем событие изменения в поле Текст Бокс для суммы первоначального взноса, указанной в РУБЛЯХ Private Sub tbinitialfeeM_change() tbInitialFeeP.Text = CDbl(tbInitialFeeM.Text) / CDbl(tbLoan.Text) * 100 End Sub
[/vba] А далее возникают проблемы, типа деление на 0, отслеживание взаимосвязей спинов и textbox, и ...... В общем, отладка всего кода. Что далеко выходит за рамки одной темы.RAN
Спасибо за классный вариант решения по вводу цифровых значений в ТексБоксы на форме через функцию с KeyAscii!
Есть кстати еще один вариант для ввода только цифр в ТексБокс:
[vba]
Код
Private Function RemoveNonNumeric(str) ' Функция удаляет не числовые значения из строки Dim i As Long ' счетчик цикла Dim StrLen As Long ' сюда длинна строки Dim c As String * 1 ' переменная для строки состоящей из 1 символа
StrLen = Len(str) ' находим длину строки RemoveNonNumeric = "" ' начальное значение функции -пустая строка For i = 1 To StrLen ' в цикле перебираем данную строку по символам и если символ = цифра, то добавляем эту цифру к значениею функции RemoveNonNumeric c = Mid(str, i, 1) If c Like "#" Then RemoveNonNumeric = RemoveNonNumeric & c Next i End Function
'Используем функцию RemoveNonNumeric при вводе текста в нашем ТекстБоксе Private Sub TextBox1_Change() TextBox1.Text = RemoveNonNumeric(TextBox1.Text) End Sub
Спасибо за классный вариант решения по вводу цифровых значений в ТексБоксы на форме через функцию с KeyAscii!
Есть кстати еще один вариант для ввода только цифр в ТексБокс:
[vba]
Код
Private Function RemoveNonNumeric(str) ' Функция удаляет не числовые значения из строки Dim i As Long ' счетчик цикла Dim StrLen As Long ' сюда длинна строки Dim c As String * 1 ' переменная для строки состоящей из 1 символа
StrLen = Len(str) ' находим длину строки RemoveNonNumeric = "" ' начальное значение функции -пустая строка For i = 1 To StrLen ' в цикле перебираем данную строку по символам и если символ = цифра, то добавляем эту цифру к значениею функции RemoveNonNumeric c = Mid(str, i, 1) If c Like "#" Then RemoveNonNumeric = RemoveNonNumeric & c Next i End Function
'Используем функцию RemoveNonNumeric при вводе текста в нашем ТекстБоксе Private Sub TextBox1_Change() TextBox1.Text = RemoveNonNumeric(TextBox1.Text) End Sub