Application.Match公式错误

我使用Application.Match函数开发了下面的代码。

在我的第一个Application.Match (通过使用IsError(x)进行testing)中出现错误时,我希望执行的语句似乎不会被执行。

我的意图是,如果第一个Application.Match返回一个错误,我希望我的代码执行相同的匹配,但search项目比原始匹配早一天的date。

我的代码:

 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 

工作表“转储”:

工作表“Sheet2”:

您的IsError正在工作,并且您的第二个Application.Match正在执行。 问题是,它也是返回一个错误,所以你只是觉得它没有被执行。

您需要将Date转换为Double Match以使Match使用variables工作:

 If IsError(x) Then x = Application.Match(CDbl(xx), Sheets("sheet2").Range("A1:C1"), 0) 

要捕获x上的错误,如果Application.Match返回一个错误使用下面的代码。

而不是你的路线:

 x = Application.Match(Sheets("Dump"). _ Cells(1, i), Sheets("sheet2").Range("A1:C1"), 0) 

使用下面的If 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