我有一个运行良好的宏。但我遇到的问题是InputBox。当用户从InputBox中按CANCEL或X 时,宏会遇到错误。 用户最多可以输入15个值进行搜索,输入0表示搜索开始。我想让它更强大,所以我不会遇到这些错误。请帮忙。
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
答案 0 :(得分:1)
定义一个字符串变量Dim LSearchString as String
并为其指定InputBox的返回值:LSearchString = InputBox(...)
。现在您可以检查输入是否为数字:If IsNumeric(LSearchString)
并处理错误的输入。如果成功,您可以继续将其转换为整数:LSearchValue = CInt(LSearchString)
。您必须知道,如果参数不是数字,CInt()
总是返回0。
以下代码段是代码中的修改后的摘录。 错误的输入只是被忽略了。
<强>更新强>
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
答案 1 :(得分:1)
如果您要处理取消,,请使用中间变体
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