ошибка application.inputbox после нажатия OK с пустым вводом

Я действительно искал часы и часы, но не могу найти никаких решений.

Вы должны вводить только числа в поле ввода, и окно msgbox должно появляться, когда вы просто нажимаете «ОК» без какого-либо числа или строки...

Первая часть была легкой, но я всегда получаю сообщение об ошибке, просто нажимая OK!

Public Sub test()
Dim vntReturn As Variant
vntReturn = Application.InputBox("Bitte Wert eingeben", "Eingabe", , , , , , 1)
If StrPtr(vntReturn) = 0 Then
    MsgBox "Abbrechen gedrückt"
Else
    If vntReturn = False Then
        MsgBox "Nix eingegeben"
    Else
        MsgBox vntReturn
    End If
End If
End Sub

person Community    schedule 23.01.2014    source источник


Ответы (2)


Это происходит потому, что вы объявляете Type для этого InputBox числом. Поэтому Excel автоматически попытается исправить это. Вы можете использовать InputBox без Type и запрограммировать собственную проверку для проверки, является ли оно целым числом или нет.

В противном случае вы также можете добавить это перед своим кодом:

Application.DisplayAlerts = False

А затем установите его в True после. Теперь, когда вы нажмете «ОК», вам не будет предложено сообщение об ошибке, но поле ввода не исчезнет. Вы можете добавить дополнительные инструкции в InputBox, чтобы было ясно, что ему нужен номер.

person Alex D    schedule 23.01.2014
comment
Хотя первая часть вашего ответа на самом деле решит проблему, я чувствую, что вы не полностью объяснили, почему возникает ошибка. Когда вы используете Application.InputBox с параметром Type 1, он работает как функция. Он пытается оценить все, что находится в коробке. Выдает ошибку, если это не число. Итак, взгляните на код в моем ответе, чтобы лучше понять, как справиться с такой ситуацией. - person ; 24.01.2014
comment
ну, теперь я использовал ваш код, и это именно то, что я хочу. Если я просто нажму «ОК», ничего не произойдет, не будет сообщения об ошибке и т. д. НО теперь, если я введу букву, сообщение об ошибке не появится, и, по крайней мере, должно быть сообщение об ошибке для строк.... Как это возможно? - person ; 24.01.2014
comment
@Tommy, какой ответ ты используешь, потому что ты принял Alex'es, но я думаю, что на самом деле ты используешь код из моего ответа, хе-хе - person ; 25.01.2014
comment
Томми, я бы просто указал в InputBox, что вы не разрешаете использовать строки. К сожалению, вы не всегда можете получить лучшее из обоих миров, поскольку он вообще не примет ввод, если это тоже строка. И у @mehow у нас есть почти одинаковые решения, о которых я писал ранее, с объяснением, почему это происходит. Я думаю, что это спорный вопрос, но я проголосовал за ваш пост ранее, если вы просто делаете это для очков. - person Alex D; 25.01.2014
comment
@mehow Ничего не обвиняю, ха-ха, просто говорю ;). И пока наслаждаюсь StackOverflow. Это приятно отвлечься и отвлечься от работы. - person Alex D; 25.01.2014
comment
@mehow: как только что сказал Alex D: ваши ответы похожи ;-) - person ; 27.01.2014

@mehow: как только что сказал Alex D: ваши ответы похожи ;-) Сначала я использовал код mehow, но теперь я просто создаю пользовательскую форму только с «кнопкой OK».

Private Sub Rechnen_Click()
Dim i As Integer            ' Variable deklarieren
Dim Sum As Integer
Dim counter As Variant
i = 0                       ' deklariert, löst beim Kompilieren keinen Fehler aus
Sum = 0                     ' nicht deklarierte Variable löst beim Kompilieren einen Fehler aus
counter = TextBox1.Value
Application.DisplayAlerts = False
If Not IsNumeric(counter) Then
Exit Sub
Else
Unload Userform1
    On Error Resume Next
    Do Until i >= counter

    Zahl = InputBox("Pls enter a number:", i + 1 & ". Versuch")
    Sum = Sum + Zahl
    i = i + 1

    If Not IsNumeric(Zahl) Then
    MsgBox "calculation premature cancelled!"
    Exit Do
    End If

    Loop
    Ausgabe = MsgBox("Die Summe lautet: " & Sum, vbInformation, "Ergebnis")
    Question = MsgBox("is it enough?", vbYesNo + vbQuestion, "repeat")
        If Question = vbNo Then
        Userform1.Show
        Else
        Unload Userform1
        Exit Sub
        End If
End If
End Sub

и поэтому пользовательская форма выглядит так:

введите здесь описание изображения

Теперь программа работает нормально ;) Спасибо, ребята!

person Community    schedule 27.01.2014
comment
хотя ваш вопрос изменился с момента первого сообщения, я не буду комментировать полученные вами ответы. Рад, что все в порядке - person ; 28.01.2014