您不能将字符串视为布尔值(您正在做什么)。一个字符串可以输出一个真/假结果,但不是你正在做的。试试这个代码:
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
如果(“修剪”)输入字符串的长度小于 1,则第一个条件为假(并且Sub
退出)。第二个条件,如果输入字符串不是数字。
注意:请记住,第二个条件不触发错误的原因是因为整数确实“支持布尔值”;虽然它在这里没有任何实际意义:如果你删除这个条件,什么都不会改变。我的条件检查你真正想要的(行大于或等于 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”(作为字符串),如果第二个 InputBox 被取消,则返回 0(因此原始条件可以处理)。