Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 当存在错误的变量类型输入错误时,重新运行InputBox_Excel_Vba_Inputbox - Fatal编程技术网

Excel 当存在错误的变量类型输入错误时,重新运行InputBox

Excel 当存在错误的变量类型输入错误时,重新运行InputBox,excel,vba,inputbox,Excel,Vba,Inputbox,我的目标是在InputBox崩溃时重新运行它,并为用户提供另一个提供正确输入类型的机会。(就像它崩溃一样,你会得到一个msgbox,上面写着“对不起,你的条目不可用,请重试”,它会跳回输入框。) qm被定义为一个Integer,=0,下面有一个Select Casemultiplealternative,它将qm更改为1-600之间的数字 当我输入类似“嘿,伙计们”的文本时,Excel会给我错误13(运行时错误13):类型不匹配)。如果IsError(qm)的话,您可以用替换,然后转到Test1

我的目标是在InputBox崩溃时重新运行它,并为用户提供另一个提供正确输入类型的机会。(就像它崩溃一样,你会得到一个msgbox,上面写着“对不起,你的条目不可用,请重试”,它会跳回输入框。)

qm
被定义为一个
Integer
,=0,下面有一个
Select Case
multiplealternative,它将
qm
更改为1-600之间的数字


当我输入类似“嘿,伙计们”的文本时,Excel会给我错误13(运行时错误13):类型不匹配)。

如果IsError(qm)的话,您可以用
替换
,然后转到Test1
,然后用
替换错误转到Test1
,并用
替换错误转到0
重置错误处理程序


详细信息请参见

如果iSeries错误(qm),您可以将
替换为,然后将替换为错误上的,将替换为错误上的,以重置错误处理程序


有关详细信息,请参见下面的内容

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

尝试以下方法

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()
字符串
转换为
整数

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

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

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

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

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

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

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

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中,您可以将
应用程序.InputBox
与第四个参数
Type
一起使用。如果使用
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)

这就是为什么在VBA中,您可以将
应用程序.InputBox
与第四个参数
Type
一起使用。如果使用
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)

您可以使用
应用程序。InputBox
版本的VBA,请参见下面的我的答案。您可以使用
应用程序。InputBox
版本的VBA,请参见下面的我的答案。非常感谢您编辑我的问题,使其更具可读性。Allpication.Inputbox工作得很好,我将尝试以您的编辑为例,在以后的帖子和答案中使用。非常感谢您编辑我的问题,使其更具可读性。Allpication.Inputbox工作得很好,我将尝试以您的编辑为例,为以后的帖子和答案提供参考。谢谢。IsNumeric()解决方案是为我的任务提供的提示,但我很高兴您向我展示了如何正确使用它。谢谢。IsNumeric()解决方案是为我的任务提供的提示,但我很高兴你向我展示了如何正确使用它。伙计,对我来说,这是一个聪明的解决方案。非常感谢。对我来说,这是一个聪明的解决方案。谢谢。