运行时错误13当Application.Inputbox取消时键入不匹配〜

时间:2013-08-02 10:29:56

标签: excel vba inputbox

我读了几个问题&关于这个问题的文章,虽然因为我是一个初学者,但我无法弄清楚我的个人解决方案。

当用户点击InputBox表单上的取消时,我需要退出sub。另外,我需要InputBox来接受输入值。

    Dim UserCol As String
    Dim FirstRow As Integer

    UserCol = Application.InputBox(Prompt:="In what Column do we search? (E.g. enter: A)", Type:=2)
    If UserCol = False Then Exit Sub
' On cancel works OK. But if you type "A" (no quotes) u get a run-time ERROR 13!    

    FirstRow = Application.InputBox(Prompt:="What is your data-table's first row? (E.g. enter: 2)", Type:=1)
    If FirstRow = False Then Exit Sub
' On both cancel & input works flawlessly.

我尝试删除Type := 2,但没有任何变化。

1 个答案:

答案 0 :(得分:3)

你不能将字符串视为布尔值(你正在做什么)。字符串可以输出真/假结果,但不会像您一样输出。试试这段代码:

  Dim UserCol As String
  Dim FirstRow As Integer

  UserCol = Application.InputBox(Prompt:="In what Column do we search? (E.g. enter: A)", Type:=2)
  If Len(Trim(UserCol)) < 1 Then Exit Sub
' On cancel works OK. But if you type "A" (no quotes) u get a run-time ERROR 13!

  FirstRow = Application.InputBox(Prompt:="What is your data-table's first row? (E.g. enter: 2)", Type:=1)
  If FirstRow < 1 Then Exit Sub

如果(“trimmed”)输入字符串的长度小于1,则第一个条件为false(并且Sub退出)。第二个条件,如果输入字符串不是数字。< / p>

注意:请记住,第二个条件不会触发错误的原因是因为整数“支持布尔”;虽然它在这里没有任何实际意义:如果你删除这个条件,什么都不会改变。我的条件检查你真正想要的是什么(行大于或等于1)。还要记住InputBox支持整数,但通常不是这种情况(对于这种类型的大多数控件,你必须将输入作为字符串并将它们转换为整数;明确地或隐含地)。

更新 -

Coude来说明取消按钮点击次数:

   Dim UserCol As String
   Dim FirstRow As Integer

   UserCol = Application.InputBox(Prompt:="In what Column do we search? (E.g. enter: A)", Type:=2)

   If (LCase(UserCol) <> "false") Then

     If Len(Trim(UserCol)) < 1 Then Exit Sub
     ' On cancel works OK. But if you type "A" (no quotes) u get a run-time ERROR 13!

     FirstRow = Application.InputBox(Prompt:="What is your data-table's first row? (E.g. enter: 2)", Type:=1)
     If (FirstRow < 1) Then Exit Sub
  End If

如果取消第一个InputBox,则返回“False”(作为字符串),如果取消第二个,则返回0(因此原始条件可以处理)。