我使用Application.Match
函数开发了以下代码。
我希望在我的第一个Application.Match
(使用IsError(x)
进行测试)中收到错误时执行的声明似乎没有执行。
我的意图是,如果第一个Application.Match
返回错误,我希望我的代码执行相同的匹配,但搜索项目的日期比原始匹配提前一天。
我的代码:
Sub macro1()
i = 8
Dim xx As Date
For a = 1 To 3
x = Application.Match(Sheets("Dump"). _
Cells(1, i), Sheets("sheet2").Range("A1:C1"), 0)
Set aa = Sheets("Dump").Cells(1, i)
xx = aa - 1
If IsError(x) Then x = Application.Match(xx, Sheets("sheet2").Range("A1:C1"), 0)
Sheets("Dump").Cells(2, i) = x
i = i + 1
Next
End Sub
Sheet" Dump":
Sheet" Sheet2":
答案 0 :(得分:3)
您的IsError
正在运行,而您的第二个Application.Match
正在执行中。问题是它也会返回一个错误,所以你只是认为它还没有被执行。
您需要将Date
转换为Double
,以便Match
能够使用变量:
If IsError(x) Then x = Application.Match(CDbl(xx), Sheets("sheet2").Range("A1:C1"), 0)
答案 1 :(得分:0)
如果x
返回错误,请在Application.Match
上捕获错误,请使用以下代码。
而不是你的行:
x = Application.Match(Sheets("Dump"). _
Cells(1, i), Sheets("sheet2").Range("A1:C1"), 0)
使用下面的IsError
:
If IsError(Application.Match(Sheets("Dump").Cells(1, i), Sheets("sheet2").Range("A1:C1"), 0)) Then
' do something if error (maybe MsgBox, maybe use Exit Sub)
Else '<-- Match was successful
x = Application.Match(Sheets("Dump").Cells(1, i), Sheets("sheet2").Range("A1:C1"), 0)
End If