Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вставить к текст бокс число с плавающей запятой - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить к текст бокс число с плавающей запятой (Макросы/Sub)
Вставить к текст бокс число с плавающей запятой
t330 Дата: Понедельник, 29.04.2019, 15:04 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем добрый день.

Подкажите пожалуйста как вставить в текст бокс число (а не ТЕКСТ (!)) с плавающей запятой, которое получается при вычислении, как показано ниже?
Нужно получитьс в тествомо поле именно число с запятой, чтобы потом его можно было использовать для дальнейших вычислений...

[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]
К сообщению приложен файл: 6450693.xlsm (19.9 Kb)
 
Ответить
СообщениеВсем добрый день.

Подкажите пожалуйста как вставить в текст бокс число (а не ТЕКСТ (!)) с плавающей запятой, которое получается при вычислении, как показано ниже?
Нужно получитьс в тествомо поле именно число с запятой, чтобы потом его можно было использовать для дальнейших вычислений...

[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]

Автор - t330
Дата добавления - 29.04.2019 в 15:04
sboy Дата: Понедельник, 29.04.2019, 15:18 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Нельзя такие примеры выкладывать! Там же зацикленный код.
В текстбоксе всегда текст, но то он и ТЕКСТбокс. Перед вычислением используйте Val() для типа Double


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Нельзя такие примеры выкладывать! Там же зацикленный код.
В текстбоксе всегда текст, но то он и ТЕКСТбокс. Перед вычислением используйте Val() для типа Double

Автор - sboy
Дата добавления - 29.04.2019 в 15:18
RAN Дата: Понедельник, 29.04.2019, 15:23 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вы вонвь пытаетесь встать на те же грабли.
Событие TextBox1_Change весьма мало подходит для этой хотелки.
В вашем же файле все идет не так, начиная с отсутствия возможности сделать хоть что-нибудь.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВы вонвь пытаетесь встать на те же грабли.
Событие TextBox1_Change весьма мало подходит для этой хотелки.
В вашем же файле все идет не так, начиная с отсутствия возможности сделать хоть что-нибудь.

Автор - RAN
Дата добавления - 29.04.2019 в 15:23
t330 Дата: Понедельник, 29.04.2019, 16:29 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Там же зацикленный код.


Сори., но там же работает ctrl+break без проблем для выхода из цикла.
Если бы Val помогал ,то это было бы очень просто:)
Cобытие KeyPress по совету RAN тут не подходит, тк данные из TextBox1 используются мгновенно для расчета значения в другом Textbox2 на этой же UserForm и без нажатия каких-то кнопок типа Enter Tab, ОК и тд


Сообщение отредактировал t330 - Понедельник, 29.04.2019, 17:02
 
Ответить
Сообщение
Там же зацикленный код.


Сори., но там же работает ctrl+break без проблем для выхода из цикла.
Если бы Val помогал ,то это было бы очень просто:)
Cобытие KeyPress по совету RAN тут не подходит, тк данные из TextBox1 используются мгновенно для расчета значения в другом Textbox2 на этой же UserForm и без нажатия каких-то кнопок типа Enter Tab, ОК и тд

Автор - t330
Дата добавления - 29.04.2019 в 16:29
RAN Дата: Понедельник, 29.04.2019, 18:02 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А кто говорит про KeyPress?
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА кто говорит про KeyPress?
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.

Автор - RAN
Дата добавления - 29.04.2019 в 18:02
t330 Дата: Понедельник, 29.04.2019, 22:09 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.


Полный файл вот такой (он не зациклен)

Проблемное место вот это:

Тут 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
      
End Sub

[/vba]
К сообщению приложен файл: 1665162.xlsm (71.1 Kb)
 
Ответить
Сообщение
Для решения нужно видеть задачу в целом, а не отдельный, весьма надуманный, фрагмент.


Полный файл вот такой (он не зациклен)

Проблемное место вот это:

Тут 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
      
End Sub

[/vba]

Автор - t330
Дата добавления - 29.04.2019 в 22:09
RAN Дата: Понедельник, 29.04.2019, 23:14 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Требуемые базовые процедуры элементарны
[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, и ......
В общем, отладка всего кода. Что далеко выходит за рамки одной темы.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТребуемые базовые процедуры элементарны
[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
Дата добавления - 29.04.2019 в 23:14
RAN Дата: Вторник, 30.04.2019, 12:15 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Немного поигрался с формой.
Сделал для цветных полей.
Но, даже для них, вопросов осталась масса.
К сообщению приложен файл: 9963488.xlsm (30.6 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНемного поигрался с формой.
Сделал для цветных полей.
Но, даже для них, вопросов осталась масса.

Автор - RAN
Дата добавления - 30.04.2019 в 12:15
t330 Дата: Воскресенье, 05.05.2019, 16:17 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Немного поигрался с формой.


Спасибо за классный вариант решения по вводу цифровых значений в ТексБоксы на форме через функцию с 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

[/vba]
 
Ответить
Сообщение
Немного поигрался с формой.


Спасибо за классный вариант решения по вводу цифровых значений в ТексБоксы на форме через функцию с 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

[/vba]

Автор - t330
Дата добавления - 05.05.2019 в 16:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить к текст бокс число с плавающей запятой (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!