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

Вход

Регистрация

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

 

= Мир MS Excel/Не загружаются дробные значения - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Не загружаются дробные значения
Сергей13 Дата: Понедельник, 22.04.2019, 10:29 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.
Ребята в текстовом поле уставлен код ввода только числового значения.

[vba]
Код
Sub Ostatok() 'Ввод числового значения
    On Error Resume Next 'Обработчик ошибок
    Dim NumberSize As Double 'Double - Число дробное, с плавающей точкой
    NumberSize = FormReport.TxbResidue.Value 'Вод в поле объекта только числовые и дробные значения с плавающей точкой
    
    If Err Then 'Условие - Предупреждение об ошибки при вводе не числового значения
        FormReport.Label18.Caption = "Ошибка при записи числового значения"
        FormReport.TxbResidue.Value = "" 'Очистка объекта
    Else
    End If
End Sub
[/vba]
При вводе вручную, условие выполняется, а при загрузке в текстбокс (TxbResidue) с ячейки, на дробные значения срабатывает ошибка, в тоже время вручную дробные значения тоже вводятся.
В чем может быть причина, где что поправить?


Сообщение отредактировал Сергей13 - Понедельник, 22.04.2019, 11:00
 
Ответить
СообщениеЗдравствуйте.
Ребята в текстовом поле уставлен код ввода только числового значения.

[vba]
Код
Sub Ostatok() 'Ввод числового значения
    On Error Resume Next 'Обработчик ошибок
    Dim NumberSize As Double 'Double - Число дробное, с плавающей точкой
    NumberSize = FormReport.TxbResidue.Value 'Вод в поле объекта только числовые и дробные значения с плавающей точкой
    
    If Err Then 'Условие - Предупреждение об ошибки при вводе не числового значения
        FormReport.Label18.Caption = "Ошибка при записи числового значения"
        FormReport.TxbResidue.Value = "" 'Очистка объекта
    Else
    End If
End Sub
[/vba]
При вводе вручную, условие выполняется, а при загрузке в текстбокс (TxbResidue) с ячейки, на дробные значения срабатывает ошибка, в тоже время вручную дробные значения тоже вводятся.
В чем может быть причина, где что поправить?

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

2010
Лень разбираться.
[vba]
Код
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim dsep$: dsep = Me.ActiveControl.Value
    KeyAscii = DoubleBox_KeyPress(KeyAscii, dsep)
End Sub
Function DoubleBox_KeyPress(ByVal KeyAsci As Integer, dsep As String)
    Select Case KeyAsci
    Case 48 To 57: DoubleBox_KeyPress = KeyAsci
    Case 46, 44: If dsep Like ("*,*") Then DoubleBox_KeyPress = 0 Else DoubleBox_KeyPress = 44    '[","."]
    Case Else: DoubleBox_KeyPress = 0
    End Select
End Function
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЛень разбираться.
[vba]
Код
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim dsep$: dsep = Me.ActiveControl.Value
    KeyAscii = DoubleBox_KeyPress(KeyAscii, dsep)
End Sub
Function DoubleBox_KeyPress(ByVal KeyAsci As Integer, dsep As String)
    Select Case KeyAsci
    Case 48 To 57: DoubleBox_KeyPress = KeyAsci
    Case 46, 44: If dsep Like ("*,*") Then DoubleBox_KeyPress = 0 Else DoubleBox_KeyPress = 44    '[","."]
    Case Else: DoubleBox_KeyPress = 0
    End Select
End Function
[/vba]

Автор - RAN
Дата добавления - 22.04.2019 в 10:39
Сергей13 Дата: Понедельник, 22.04.2019, 23:07 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
RAN, В ниже предоставленном примере, тип данных Double вполне устраивает, дополнительные навороты могут усложнить взаимосвязи в рабочем файле.
Дело в том, что ручной ввод в текстбокс и ввод с текстбокса в ячейку осуществляется корректно как целых, так и дробных значений, а вот загрузка с ячейки в текстбокс (при открытии формы) корректна только для целых значений, на дробные выдает ошибку.
Для полного понимания о чем я, скидываю тестовый пример (для тестирования необходимо изменять значение в ячейке или в текстбоксе в пределах не более 8 знаков при этом открывать и закрывать форму).
К сообщению приложен файл: 3902362.xlsm (20.6 Kb)


Сообщение отредактировал Сергей13 - Вторник, 23.04.2019, 00:43
 
Ответить
СообщениеRAN, В ниже предоставленном примере, тип данных Double вполне устраивает, дополнительные навороты могут усложнить взаимосвязи в рабочем файле.
Дело в том, что ручной ввод в текстбокс и ввод с текстбокса в ячейку осуществляется корректно как целых, так и дробных значений, а вот загрузка с ячейки в текстбокс (при открытии формы) корректна только для целых значений, на дробные выдает ошибку.
Для полного понимания о чем я, скидываю тестовый пример (для тестирования необходимо изменять значение в ячейке или в текстбоксе в пределах не более 8 знаков при этом открывать и закрывать форму).

Автор - Сергей13
Дата добавления - 22.04.2019 в 23:07
krosav4ig Дата: Вторник, 23.04.2019, 03:03 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Сергей13, [vba]
Код
FormReport.TxbResidue.Value = Range("D2").FormulaLocal
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеСергей13, [vba]
Код
FormReport.TxbResidue.Value = Range("D2").FormulaLocal
[/vba]

Автор - krosav4ig
Дата добавления - 23.04.2019 в 03:03
RAN Дата: Вторник, 23.04.2019, 08:42 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата Сергей13, 22.04.2019 в 23:07, в сообщении № 3 ()
дополнительные навороты могут усложнить
lol
У вас их столько, что вам это уже давно не страшно.
По поводу ошибки.
Если textbox записывать textbox.Value, Excel ведет себя не совсем адекватно. Может неделю, или больше работать корректно, а после начать выдавать ошибку. С чем это связано, так и не понял.
Например, у меня, в данный момент, ваш код отрабатывает без проблем.
Поэтому, в textbox нужно писать не textbox.Value, а textbox.Text.
Вторая часть проблемы в том, что при преобразовании текста 10.25 в число ( а в textbox всегда text), нудно использовать функцию Val(), а при преобразовании 10,25 - функцию CDbl().
Чтобы с этим не париться, предложенный код просто не позволит ввести в textbox ничего, кроме цифр, и одной запятой. При этом, при попытке ввести точку, она будет преобразована в запятую.
И весь код будет выглядеть так
[vba]
Код
Private Sub CommandButton1_Click() 'Событие щелчок
        Range("D2").Value = CDbl(TxbResidue.Text) 'Ввод числового значения в ячейку
End Sub

Private Sub TxbResidue_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
    Case 48 To 57
    Case 46, 44: If TxbResidue Like ("*,*") Then KeyAscii = 0 Else KeyAscii = 44    '[","."]
    Case Else: KeyAscii = 0
    End Select
End Sub

Private Sub UserForm_Initialize() 'Событие открытия формы FormReport
    TxbResidue.Text = CDbl(Range("D2").Value) 'Загрузка числового значения из ячейки
End Sub
[/vba]
И, при этом, он не раскидан по всему проекту.

PS Мне прямо интересно смотреть, с каким мазохистским удовольствием вы, в своем проекте, вводите кучу не нужных Public переменных, вытаскиваете код из модуля формы в стандартный модуль, и т.д, и т.п... :o


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата Сергей13, 22.04.2019 в 23:07, в сообщении № 3 ()
дополнительные навороты могут усложнить
lol
У вас их столько, что вам это уже давно не страшно.
По поводу ошибки.
Если textbox записывать textbox.Value, Excel ведет себя не совсем адекватно. Может неделю, или больше работать корректно, а после начать выдавать ошибку. С чем это связано, так и не понял.
Например, у меня, в данный момент, ваш код отрабатывает без проблем.
Поэтому, в textbox нужно писать не textbox.Value, а textbox.Text.
Вторая часть проблемы в том, что при преобразовании текста 10.25 в число ( а в textbox всегда text), нудно использовать функцию Val(), а при преобразовании 10,25 - функцию CDbl().
Чтобы с этим не париться, предложенный код просто не позволит ввести в textbox ничего, кроме цифр, и одной запятой. При этом, при попытке ввести точку, она будет преобразована в запятую.
И весь код будет выглядеть так
[vba]
Код
Private Sub CommandButton1_Click() 'Событие щелчок
        Range("D2").Value = CDbl(TxbResidue.Text) 'Ввод числового значения в ячейку
End Sub

Private Sub TxbResidue_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
    Case 48 To 57
    Case 46, 44: If TxbResidue Like ("*,*") Then KeyAscii = 0 Else KeyAscii = 44    '[","."]
    Case Else: KeyAscii = 0
    End Select
End Sub

Private Sub UserForm_Initialize() 'Событие открытия формы FormReport
    TxbResidue.Text = CDbl(Range("D2").Value) 'Загрузка числового значения из ячейки
End Sub
[/vba]
И, при этом, он не раскидан по всему проекту.

PS Мне прямо интересно смотреть, с каким мазохистским удовольствием вы, в своем проекте, вводите кучу не нужных Public переменных, вытаскиваете код из модуля формы в стандартный модуль, и т.д, и т.п... :o

Автор - RAN
Дата добавления - 23.04.2019 в 08:42
Сергей13 Дата: Вторник, 23.04.2019, 20:22 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 344
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
RAN, Вы правы, начал гармонично а закончил хаотично, как говорил один из ярких представителей "слуг" народа, "хотели как лучше, а получилось как всегда"…
Понял что валуе не есть панацея, а текст не есть валуе.
Ребята, krosav4ig, RAN , спасибо за предоставленные варианты!
 
Ответить
СообщениеRAN, Вы правы, начал гармонично а закончил хаотично, как говорил один из ярких представителей "слуг" народа, "хотели как лучше, а получилось как всегда"…
Понял что валуе не есть панацея, а текст не есть валуе.
Ребята, krosav4ig, RAN , спасибо за предоставленные варианты!

Автор - Сергей13
Дата добавления - 23.04.2019 в 20:22
  • Страница 1 из 1
  • 1
Поиск:

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