VBA InputBox运行错误(错误的变量类型)重新运行InputBox

问题描述:

嘿,伙计们我要写我的第一个基本步骤在VBA中,我遇到了以下问题。VBA InputBox运行错误(错误的变量类型)重新运行InputBox

Test1: 
qm = InputBox("Wie viele Quadrat Meter hat die Wohnung?" & vbLf & "Bitte geben sie die QM Zahl an.", Angabe) 
If IsError(qm) Then GoTo Test1 

qm被定义为Integer,= O,和下面有一个Select Case mutilple替代从1-600变化qm为数字。

当InputBox运行时,我输入一个像“嗨伙计”一样的Word,Excel给了我错误13(运行时错误13':类型错配)。

我的目标是在崩溃时重新运行InputBox,并为用户提供一个给Number输入正确输入的新机会。 (就像它崩溃,你会得到一个msgbox它说“对不起你的输入不可用,请重试”,它会跳回msg框)

我试图找到一个适合的解释堆栈溢出和谷歌搜索但它却无法找到与解决方案相同的问题。

如果你能帮我解决方案或链接我一个合适的现有解释我会非常感激。

+0

您可以使用** ** VBA的'Application.InputBox'版本,请参阅我的回答下面 –

这就是为什么在VBA你可以用一个第四个参数Type使用Application.InputBox。如果您使用Type:=1那么只允许数字值。

代码

Dim qm As Integer 

qm = Application.InputBox("Wie viele Quadrat Meter hat die Wohnung?" _ 
      & vbLf & "Bitte geben sie die QM Zahl an.", "Angabe", Type:=1) 
+0

非常感谢编辑我的问题,使它更具可读性。 Allpication.Inputbox工作得很好,我会尝试将您的编辑作为未来发布和答案的示例。 – Lutscha

您可以将If IsError(qm) Then GoTo Test1替换为On Error GoTo Test1On Error GoTo 0以重置错误处理程序。

详细信息可以看到https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/on-error-statement

尝试像下面

Sub Demo() 
    Dim qm As String 
    qm = 0 
Test1: 
    qm = InputBox("Enter value") 
    If Not IsNumeric(qm) Then GoTo Test1 
End Sub 

声明qmString,并检查其是否数字或没有。然后,您必须使用CInt()String转换为Integer

+0

谢谢。 IsNumeric()解决方案是为我的任务提供的技巧,但我很高兴你向我展示了如何正确使用它。 – Lutscha

有多种方法可以解决这个问题。我建议定义一个变量variant(可以保存任何数据类型),并检查它是否是数字:

dim answer as variant, qm as integer 
do while true 
    answer = InputBox(...) 
    if isNumeric(answer) then 
     qm = cInt(answer) 
     exit do 
    endif 
loop 
+0

对我来说,这是一个聪明的解决方案。非常感谢。 – Lutscha

您可以设置一个事件每次改变时间来验证文本框的内容去。我检查了这是一个数字,但你可以验证你需要的任何其他条件。

Private Sub TextBox1_Change() 
    validator = IsNumeric(TextBox1.Value) 
    If validator = False Then 
    MsgBox "WARNING! You must enter a number!" 
    TextBox1.BackColor = &HFF8& 
    End If 
End Sub