0

在我的宏中,我有以下代码:

i = Application.WorksheetFunction.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0)

其中 'str_accrual' 是该行之前捕获的字符串,选择的范围在单行中,例如从“A1”到“BH1”,结果将是一个数字,该数字是该字符串在所选范围内的位置。

当我运行宏时,我收到错误:

运行时错误“1004”无法获取 WorksheetFunction 类的 Match 属性

但是当我使用 (F8) 键逐行运行宏时,我没有收到此错误,但是当我连续运行宏时,我收到了错误。同样,如果中止宏并再次运行,则不会出现错误。

4

8 回答 8

1

我试了几次。好像没有匹配的话,表达式会提示这个错误

如果要捕获错误,请Application.Match改用

然后你可以用isError

于 2013-09-26T14:41:44.250 回答
1

我使用程序从中提取的第三方生成的 xls 文件遇到了这个问题。当我将导出从第三方程序更改为 xls(仅限数据)时,它解决了我的问题。因此,对于你们中的一些人来说,从单元格中提取数据可能存在问题,而不仅仅是一个干净的值。

如果我的命名法不是很好,我很抱歉,这只是一个新手。

于 2021-10-27T16:13:26.760 回答
1

关于这个错误的帖子很多,但就我阅读帖子而言没有解决方案。 似乎要使各种工作表功能起作用,工作表必须是 active/visible。(这至少是我的 Match() 出于虚假原因随机工作后的最新发现。)

我希望这个谜团得到了解决,尽管为这种查找操作激活工作表很痛苦并且需要几个 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))

最后,我为这个谜团的更多认识而烦恼,又花了很多时间。

干杯

于 2016-07-14T20:34:12.313 回答
1

我间歇性地收到此错误。事实证明,它发生在我有一个不同的工作表处于活动状态时。

正如 Range 的文档所说,

如果在没有对象限定符(句点左侧的对象)的情况下使用它,Range 属性将返回活动工作表上的范围。

因此,要修复错误,请添加限定符:

Sheet1.Range
于 2018-07-09T15:29:02.913 回答
0

That is what you get if MATCH fails to find the value.

于 2013-09-26T14:44:35.577 回答
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
于 2013-09-26T14:49:40.573 回答
0

我使用了“If Not IsError”并且错误一直显示。为防止出现该错误,请同时添加以下行:

On Local Error Resume Next

于 2016-09-20T01:05:14.543 回答
0

当没有找到任何内容时,Match 返回数据类型 Error,它不同于数字。你可能想试试这个。

dim result variant
result = Application.Match(....)
if Iserror(result)
    then not found
    else do your normal thing
于 2021-11-05T12:17:18.887 回答