powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка 13.
18 сообщений из 18, страница 1 из 1
Ошибка 13.
    #35095027
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в программе тип переменной задан Single или Integer, а во время выполнения программы данные, например в TextBox не введены, программа определяет тип переменной String и выдает ошибку 13. Можно ли как-то обмануть прогу, не присваивая переменной тип Variant и не прибегая к обработчику ошибок?

Аналогично с плавающей точкой. Хотя эти типы и так называются, но у меня Single и Double определяются, когда число с запятой. Как быть с типом переменных в этом случае. Либо еще лучше, как сделать, чтобы введенные в этом случае точка, превращалась в запятую.
Константин
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095056
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Val
При введении текста, который нельзя преобразовать в число, возвращает 0.
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095058
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ипользуеть преобразование типов (CInt, CSng и т.д.).

Преобразовывайте в KeyPress точку в запятую. Но учтите, что здесь важны региональные настройки на каждом ПК. Соответстветно у вас может быть запятая, а у соседа точка.

Заодно подумайте, что делать если в TextBox действительно введут текст.
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095076
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAndrewПреобразовывайте в KeyPress точку в запятую.

А если Copy/Paste?
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095080
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyVal
При введении текста, который нельзя преобразовать в число, возвращает 0. Мне 0 не нужен, мне нужна (в этом случае) пустая ячейка таблицы.
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095085
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FAndrewИпользуеть преобразование типов (CInt, CSng и т.д.).

Преобразовывайте в KeyPress точку в запятую. Но учтите, что здесь важны региональные настройки на каждом ПК. Соответстветно у вас может быть запятая, а у соседа точка.

Заодно подумайте, что делать если в TextBox действительно введут текст..
Спасибо, буду думать и пробовать
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095100
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Private Sub Command1_Click()
    MsgBox BetterIsNumeric(pstrValue:=Text1.Text, pblnLetNegative:=True, pblnLetDecimals:=True)
End Sub

Public Function BetterIsNumeric(ByVal pstrValue As String, ByVal pblnLetNegative As Boolean, ByVal pblnLetDecimals As Boolean) As Boolean
    Dim blnReturn As Boolean

    If pblnLetNegative Then
            If Left$(pstrValue,  1 ) = "-" Then
                pstrValue = Right$(pstrValue, Len(pstrValue) -  1 )
            End If
    End If

    blnReturn = Not pstrValue Like IIf(pblnLetDecimals, "*[!0-9.]*", "*[!0-9]*")
    
    If blnReturn Then
        blnReturn = IsNumeric(pstrValue)
    End If
    
    BetterIsNumeric = blnReturn
    
End Function
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095111
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConn А если Copy/Paste?. Я об этом думал. Но оно только после вставки числа. Наверно, так лучше, чтобы не получилось, как сказал FAndrew авторесли в TextBox действительно введут текст
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095143
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConn Спасибо!
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095701
Фотография Resident
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я много пива выпил, но невижу проблемы. Тем более использование API.
Во первых если тип переменной задан как Single или Integer(кароче число), а значение присваевается из TextBox то как я понял у Вас происходит не явное преобразование типов данных что ни есть гуд хотя и можно.
Второе что мешает проверить TextBox на пустую строку, а если строка не пустая проверить функц. IsNumeric не является ли текст числом а дальше все ограничевается только Вашей фантазией

По поводу точки и запятой если данные получины из TextBox то лучше ипользовать функц. Replace для замены точки на запятую и плевать что ввел пользователь. Точку VB воспринимает только в коде.
...
Рейтинг: 0 / 0
Ошибка 13.
    #35095871
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn
а в vba нет val ?
...
Рейтинг: 0 / 0
Ошибка 13.
    #35096026
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, господа! Буду все пробовать. Константин
...
Рейтинг: 0 / 0
Ошибка 13.
    #35096052
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResidentМожет я много пива выпил, но невижу проблемы. Тем более использование API.
Во первых если тип переменной задан как Single или Integer(кароче число), а значение присваевается из TextBox то как я понял у Вас происходит не явное преобразование типов данных что ни есть гуд хотя и можно.
Второе что мешает проверить TextBox на пустую строку, а если строка не пустая проверить функц. IsNumeric не является ли текст числом а дальше все ограничевается только Вашей фантазией

По поводу точки и запятой если данные получины из TextBox то лучше ипользовать функц. Replace для замены точки на запятую и плевать что ввел пользователь. Точку VB воспринимает только в коде. Заменять после вставки числа в таблицу?
...
Рейтинг: 0 / 0
Ошибка 13.
    #35096068
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin VladConn
а в vba нет val ?

Aklin, есть, конечно.
Она съедает даже текст, строго говоря, числом не являющийся:
Val(" 1615 198th Street N.E.")

Успехов
...
Рейтинг: 0 / 0
Ошибка 13.
    #35105552
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResidentМожет я много пива выпил, но невижу проблемы. Тем более использование API.
Во первых если тип переменной задан как Single или Integer(кароче число), а значение присваевается из TextBox то как я понял у Вас происходит не явное преобразование типов данных что ни есть гуд хотя и можно.
Второе что мешает проверить TextBox на пустую строку, а если строка не пустая проверить функц. IsNumeric не является ли текст числом а дальше все ограничевается только Вашей фантазией

По поводу точки и запятой если данные получины из TextBox то лучше ипользовать функц. Replace для замены точки на запятую и плевать что ввел пользователь. Точку VB воспринимает только в коде.

Спасибо всем!
На одном из форумов мне предложили вариант, который, с небольшой поправкой хорошо выполнил задачу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    If Len(txt1.Text) =  0  Then
     a =  0 
   Else
   If InStr( 1 , txt1.Text, ".") >  0  Then
     a = Replace(txt1.Text, ".", ",",  1 ,  1 )
   Else
     a = txt1.Text
   End If
   End If
...
Рейтинг: 0 / 0
Ошибка 13.
    #35108686
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос этой темы решен но, FAndrewчто делать если в TextBox действительно введут текст.
Что-то не могу придумать, если в TextBox введут текст
...
Рейтинг: 0 / 0
Ошибка 13.
    #35109890
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое не давайте вводить текст. И плюс проверка на чилсо при выходе. Не число - месадж и обратно в поле. Пока не введет число или очистит.
...
Рейтинг: 0 / 0
Ошибка 13.
    #35115925
kminas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все нашел! Константин
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка 13.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]