在VBA宏中使用Application.Match键入Mismatch错误

时间:2014-09-08 18:02:25

标签: excel vba excel-vba

我正在尝试使用Application.Match从电子表格中删除一系列行,然后再使用其余行来编辑现有的电子表格。这是我正在使用的代码,它给我一个类型不匹配错误。我之前使用过类似的逻辑和较小的数据集而没有问题:

If IsError(Application.Match(Fund_Inv_Cusip_Change(LineNumber), Fund_Inv_Cusips_to_Edit, 0)) Then
        If DeletionRange Is Nothing Then
            Set DeletionRange = Cells(Override_Workbook_Line + 3, 1).EntireRow
        Else
            Set DeletionRange = Union(DeletionRange, Cells(Override_Workbook_Line + 3, 1).EntireRow)
        End If
    End If
Next LineNumber
DeletionRange.Delete Shift:=xlUp
Set DeletionRange = Nothing

Fund_Inv_Cusips_to_Edit被声明为一个包含66,124个条目的数组,声明为字符串。 FUnd_Inv_Cusip_Change是一个包含3329个条目的数组,声明为字符串。在立即窗口中使用print(typename(fund_inv_cusips_to_edit())为每个数组返回String(),所以我不确定为什么这是一个类型不匹配。

非常感谢任何帮助。我已经阅读了这个董事会和其他人的很多帖子,而没有看到直接解决这个问题的东西。谢谢!

1 个答案:

答案 0 :(得分:1)

Application.Match在第二个参数中只能占用65,536个元素数组。在立即窗口

?application.match(1,range("A1:A65536").Value,false)

没有错误

?application.match(1,range("A1:A65537").Value,false)

类型不匹配错误。

你可以循环。它效率不高,但可能比你想象的要快。或者您可以将它放在断开连接的记录集中,但加载它可能需要更长的时间而不仅仅是循环。