VBA Excelinput框运行时错误13types不匹配

我有一个运行良好的macros。 但是我遇到的问题是InputBox。 当用户从input框中按下CANCEL或X时macros发生错误。 用户最多可以input15个值进行search,input0即可开始search。 我想让它更强大,所以我不会遇到这些错误。 请帮忙。

Sub FindValues() Dim LSearchRow As Integer Dim rw As Integer, cl As Range, LSearchValue As Long, LCopyToRow As Integer Dim iHowMany As Integer Dim aSearch(15) As Long Dim i As Integer ' clear the sheets before it runs so to accurate number of funds opend. Sheet2.Cells.ClearContents Sheets("tier 2").Cells.ClearContents Sheets("tier 3").Cells.ClearContents Sheets("tier 4").Cells.ClearContents Sheets("tier 5").Cells.ClearContents On Error GoTo Err_Execute FixC Sheet2.Cells.Clear Sheet1.Select iHowMany = 0 LSearchValue = 99 'this for the end user to input the required A/C to be searched Do While LSearchValue <> 0 LSearchValue = InputBox("Please enter a value to search for. Enter a zero to indicate finished" & _ "entry.", "Enter Search value") If LSearchValue <> 0 Then iHowMany = iHowMany + 1 If iHowMany > 15 Then MsgBox "You are limited to 15 search numbers.", vbOKOnly, "Limit reached" iHowMany = 15 Exit Do End If aSearch(iHowMany) = LSearchValue End If Loop If iHowMany = 0 Then MsgBox "No selections entered.", vbOKOnly + vbCritical, "No Search data" Exit Sub End If LCopyToRow = 2 For rw = 1 To 1555 For Each cl In Range("D" & rw & ":M" & rw) '------------------------------------------------ For i = 1 To iHowMany Debug.Print cl.Row & vbTab & cl.Column LSearchValue = aSearch(i) If cl = LSearchValue Then cl.EntireRow.Copy 'Destination:=Worksheets("Sheet2") '.Rows(LCopyToRow & ":" & LCopyToRow) Sheets("Sheet2").Select Rows(LCopyToRow & ":" & LCopyToRow).Select 'Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False 'Move counter to next row LCopyToRow = LCopyToRow + 1 'Go back to Sheet1 to continue searching Sheets("Sheet1").Select End If Next i 'LSearchRow = LSearchRow + 1 Next cl Next rw 'Position on cell A3 'Application.CutCopyMode = False 'Selection.Copy Sheets("Sheet2").Select Cells.Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Sheet2.Select MsgBox "All matching data has been copied." Exit Sub 

将stringvariablesDim LSearchString as String定义Dim LSearchString as String并为其分配InputBox的返回值: LSearchString = InputBox(...) 。 现在,您可以检查input是否为数字: If IsNumeric(LSearchString)并处理错误的input。 如果成功,您可以继续将其转换为整数: LSearchValue = CInt(LSearchString) 。 你必须知道,如果参数不是一个数字, CInt()总是返回0。

以下代码片段是您的代码修改后的摘录。 错误的input只是被忽略。

UPDATE

 Dim LSearchValue As Integer Dim LSearchString As String '.......... LSearchValue = 99 Do While True LSearchString = InputBox( _ "Please enter a value to search for. " & _ "Enter a zero to indicate finished entry", _ "Enter Search value") If IsNumeric(LSearchString) Then LSearchValue = CInt(LSearchString) If LSearchValue = 0 Then Exit Do iHowMany = iHowMany + 1 If iHowMany > 15 Then MsgBox "You are limited to 15 search numbers.", vbOKOnly, "Limit reached" iHowMany = 15 Exit Do End If aSearch(iHowMany) = LSearchValue End If Loop 

如果你想处理一个取消,使用一个中间变式

 Sub dural() Dim v As Variant, LSearchValue As Long v = InputBox("Please enter a value to search for. Enter a zero to indicate finished" & "entry.", "Enter Search value") If v = "" Then MsgBox "I guess you don't want to search" Else LSearchValue = CLng(v) MsgBox "I will search for " & LSearchValue End If End Sub