Помогите! Ошибка, если текстовое поле пустое!

Программирование на Visual Basic for Applications
khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Помогите! Ошибка, если текстовое поле пустое!

Сообщение khall » 03.03.2006 (Пт) 17:08

Есть форма UserForm3, на ней два текстовых поля txt3 и txt4 и кнопка CommandButton4 (Ввод). Если в полях ввода есть значения, тогда при нажатии на кнопку CommandButton4 данные из полей переносятся в ячейки рабочего листа D5 и D8. Но как только какое-либо поле оказывается пустым, при нажтии на кнопку CommandButton4 выскакивает сообщение об ошибке. Но иногда мне нужно, чтобы данные выводились только из какого-нибудь одного поля. Как исправить эту проблему?
Код: Выделить всё
Private Sub CommandButton4_Click()

' Ввод данных в текстовые поля Осталось и/или Долг
    Range("D5").Value = TransD(txt3.Value)
    Range("D5").NumberFormat = "#,##0.00 [$грн.-422]"
    Range("D8").Value = TransD(txt4.Value)
    Range("D8").NumberFormat = "#,##0.00 [$грн.-422]"
End Sub
'Данная функция решает проблему запятой
Private Function TransD(txtS As String)
    Dim A As String
    Dim X As Single
    Dim F As Integer
    A = txtS
    F = InStr(A, ".") 'Поиск символа "." в строковой переменной А
        If F <> 0 Then    ' Если точка найдена то преобразование выполняется функцией Val()
            X = Val(A)
        Else              ' Иначе преобразование выполняется функцией CDbl()
            X = CDbl(A)
        End If
    TransD = X
End Function
Вложения
Primer3.rar
(16.91 Кб) Скачиваний: 44

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 03.03.2006 (Пт) 17:20

IsNull :?:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

QUICK
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 26.12.2005 (Пн) 10:33

Сообщение QUICK » 03.03.2006 (Пт) 18:52

мне представляется, все-таки =""

IF NOT txt3.Value="" THEN Range("D5").Value = TransD(txt3.Value)

khall
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 23.02.2006 (Чт) 9:47

Сообщение khall » 03.03.2006 (Пт) 23:47

Кому интересно, я решил задачу с появлением ошибки процедурой обработки ошибки. Может быть, у

меня получилось не совсем корректно это сделать, но это работает! Может быть, у кого-нибудь

есть еще мысли на эту тему?! Спасибо всем, кто отозвался. Советы мне помогли!

Теперь код имеет такой вид:
Код: Выделить всё
Private Sub CommandButton4_Click()

' Ввод данных в текстовые поля Осталось и/или Долг

    If txt3.Value = "" And txt4.Value = "" Then
        MsgBox "Введи хоть что-нибудь!", vbExclamation, "ОБЯЗАТЕЛЬНО!"
        Exit Sub
    End If
    On Error GoTo Сообщение
        Range("D5").Value = TransD(txt3.Value)
        Range("D5").NumberFormat = "#,##0.00 [$грн.-422]"
        Range("D8").Value = TransD(txt4.Value)
        Range("D8").NumberFormat = "#,##0.00 [$грн.-422]"
    txt3.SetFocus
    Exit Sub
Сообщение:
    MsgBox "Данные внесены частично!", vbExclamation, "К СВЕДЕНИЮ!"
    Resume Next
End Sub
'Данная функция решает проблему запятой
Private Function TransD(txtS As String)
    Dim A As String * 6
    Dim X As Double
    Dim F As Integer
    A = txtS
    F = InStr(A, ".") 'Поиск символа "." в строковой переменной А
        If F <> 0 Then    ' Если точка найдена то преобразование выполняется функцией Val()
            X = Val(A)
        Else              ' Иначе преобразование выполняется функцией CDbl()
            X = CDbl(A)
        End If
    TransD = X
End Function
Вложения
Primer3_2.rar
(7.82 Кб) Скачиваний: 50


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList