Application.Match公式错误

时间:2017-01-12 08:18:59

标签: excel vba excel-vba

我使用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":

2 个答案:

答案 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