在我的宏中,我有以下代码:
i = Application.WorksheetFunction.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0)
其中'str_accrual'是此行前面捕获的字符串,所选范围是单行,例如从“A1”到“BH1”,结果将是一个数字,即该字符串在该范围内的位置选择。
当我运行宏时,我收到错误:
运行时错误'1004'无法获取WorksheetFunction类的Match属性
但是当我使用(F8)键逐行运行宏时,我没有得到这个错误,但是当我连续运行宏时,我得到了错误。同样,如果中止宏并再次运行它,则不会出现错误。
答案 0 :(得分:1)
我试了好几次。似乎如果没有匹配,表达式将提示此错误
如果您想捕获错误,请使用Application.Match
代替
然后你可以用isError
答案 1 :(得分:1)
我希望这个谜团得到解决,虽然为这种查找操作激活工作表是一件痛苦的事情并且花费了几个CPU周期。
所以我玩弄了语法变化,结果发现代码在我删除下划线换行符后开始工作,无论工作表是否显示。 < - 好吧,由于某种原因,我仍然需要激活工作表: - (
'无效
'Set oCllHeader = ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, _
Application.Match( _
strValue, _
ActiveWorkbook.Worksheets("Auswertung").Range( _
oCllSpielID, _
ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, lastUsedCellInRow(oCllSpielID).Column)), _
0))
'确实有效(删除带有下划线的换行符以获取可读性)< - 此语法稍后停止工作,无法激活工作表: - (
Set oCllHeader = ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, Application.Match(strValue, ActiveWorkbook.Worksheets("Auswertung").Range(oCllSpielID, ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, lastUsedCellInRow(oCllSpielID).Column)), 0))
最后,我正在为这个谜团的更多实现而烦恼,并且花了很多时间。
欢呼声
答案 2 :(得分:1)
我间歇性地收到此错误。原来,这是在我有一个不同的工作表时发生的。
Range的文档说,
在不使用对象限定符(句点左侧的对象)的情况下使用时,Range属性将返回活动工作表上的范围。
因此,要纠正该错误,请添加一个限定符:
Sheet1.Range
答案 3 :(得分:0)
如果MATCH找不到值,那就是你得到的。
答案 4 :(得分:0)
请改为尝试:
If Not IsError(Application.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0)) Then
i = Application.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0)
Else
'do something if no match is found
End If
<强>更新强>
以下是不依赖于Selection
的更好的代码,除非作为用户输入的方式来定义要搜索的范围。
Sub Test()
Dim str_accrual As String
Dim rngToSearch As Range
str_accrual = InputBox("Search for?")
Set rngToSearch = Range(Selection, Selection.End(xlToRight))
If Not IsError(Application.Match(str_accrual, rngToSearch, 0)) Then
i = Application.Match(str_accrual, rngToSearch, 0)
MsgBox i
Else
MsgBox "no match is found in range(" & rngToSearch.Address & ")."
End If
End Sub
答案 5 :(得分:0)
我使用了“If Not IsError”并且错误一直显示。要防止出错,请添加以下行:
On Local Error Resume Next