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框)
我试图找到一个适合的解释堆栈溢出和谷歌搜索但它却无法找到与解决方案相同的问题。
如果你能帮我解决方案或链接我一个合适的现有解释我会非常感激。
这就是为什么在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)
非常感谢编辑我的问题,使它更具可读性。 Allpication.Inputbox工作得很好,我会尝试将您的编辑作为未来发布和答案的示例。 – Lutscha
您可以将If IsError(qm) Then GoTo Test1
替换为On Error GoTo Test1
和On Error GoTo 0
以重置错误处理程序。
尝试像下面
Sub Demo()
Dim qm As String
qm = 0
Test1:
qm = InputBox("Enter value")
If Not IsNumeric(qm) Then GoTo Test1
End Sub
声明qm
为String
,并检查其是否数字或没有。然后,您必须使用CInt()
将String
转换为Integer
。
谢谢。 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
对我来说,这是一个聪明的解决方案。非常感谢。 – 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
您可以使用** ** VBA的'Application.InputBox'版本,请参阅我的回答下面 –