如果条件#1和Application.Match那么

时间:2018-03-27 14:47:09

标签: excel vba excel-vba match

我想检查两个条件:

  1. 如果Tabelle3.Cells(7 + i, 1) <> ""
  2. 如果可以在Tabelle3.Cells(7 + i, 1)
  3. 中找到Tabelle8.Range("A:A")

    如果其中一个未满足,我希望它跳转到下一个i

    因此,我使用Application.Match作为第二个条件,代码如下:

    If Tabelle3.Cells(7 + i, 1) <> "" And Application.Match(Tabelle3.Cells(7 + i, 1), Tabelle8.Range("A:A"), False) Then
    

    但运行时错误'13'“类型不兼容”发生。有人知道我为什么以及如何使这个工作? :)

    整个代码下方:

    Sub Test()
    
        Dim lastrow2 As Long
        lastrow2 = Tabelle3.Range("A" & Rows.Count).End(xlUp).Row
        Set myrange2 = Tabelle8.UsedRange
    
        For i = 2 To lastrow2
            If Tabelle3.Cells(7 + i, 1) <> "" And Application.Match(Tabelle3.Cells(7 + i, 1), Tabelle8.Range("A:A"), False) Then
                Tabelle3.Cells(7 + i, 19) = Application.WorksheetFunction.VLookup(Tabelle3.Cells(7 + i, 1), myrange2, 3, False)
                Tabelle3.Cells(7 + i, 20) = Application.WorksheetFunction.VLookup(Tabelle3.Cells(7 + i, 1), myrange2, 4, False)
            End If
        Next i
    
    End Sub
    

1 个答案:

答案 0 :(得分:1)

运行此代码:

Sub TestMe()        
    Debug.Print CBool(Application.Match("Something", Range("A:A"), False))    
End Sub

它会在即时窗口上打印True,尽管工作表的第一列上没有字符串“Something”。因此,在您的情况下,Application.Match(Tabelle3.Cells(7 + i, 1), Tabelle8.Range("A:A"), False)将始终评估为True,而这不是应该如何。

如果无法找到该值,请考虑对IsError(Application.Match(Tabelle3.Cells(7 + i, 1), Tabelle8.Range("A:A"), False))之类的错误进行检查,该错误为True