Range.Find()失败

时间:2015-11-21 11:24:17

标签: excel vba excel-vba

我的要求是这样的:

  • 我有两个包含从A列到Q列的数据的Excel文件
  • 我遍历每个Excel表格中的每一行,获取A列中的值,然后在另一个Excel中找到相应表格中的值。
  • 如果匹配,我在两个Excel中检查A,G和J列中的值是否匹配。如果它们不匹配,则会将它们记录在日志文件中(Excel的矩阵类型表示不匹配的位置)。 (尚未实施)
  • 如果没有匹配,我必须再次登录。 (尚未实施)

守则是:

For Each workSheet1 In MainWorkBook.Worksheets
Set MainWorksheet = workSheet1
Set SecondaryWorksheet = workSheet1
MainWorksheet.Activate
Cells.Select
Selection.EntireColumn.Hidden = False
Selection.EntireRow.Hidden = False
rowcount = MainWorksheet.Cells(Rows.count, 1).End(xlUp).Row
For i = 3 To rowcount
    MainCheckName = Trim(MainWorksheet.Cells(i, "A"))
    If (PreviousCheck <> MainCheckName And MainCheckName <> "") Then
        SecondaryWorksheet.Activate
        rowcount = SecondaryWorksheet.Cells(Rows.count, 1).End(xlUp).Row
        SecondaryWorksheet.Range(SecondaryWorksheet.Cells(1, "A"), SecondaryWorksheet.Cells(rowcount, "A")).Select
        Set SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole)
        If Not SecondaryCheckName Is Nothing Then
            CheckRow = Selection.Find(what:=MainCheckName, LookAt:=xlWhole).Row
                <further process here>

Next Next

现在,我对这一行有疑问:

Set SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole)

将此活动处理了大约十张后,虽然我的内容在不同工作簿的两个工作表中都匹配,但我为Nothing函数返回了Find

出了什么问题,为什么这里的情况失败了?

1 个答案:

答案 0 :(得分:2)

您没有包含SecondaryCheckName的声明,但是每个指示都是字符串而不是Range类型变量。您不应SetRange object更改为Range.Find method返回的;它应该简单地分配给.Find结果的值。或者,将其声明为Range类型变量,以便您可以Set将其作为Range对象以供将来使用。

SecondaryCheckName = Selection.Find(what:=MainCheckName, LookAt:=xlWhole).Value2

那就是你收到错误的原因的答案。但是,我不认为这是实现目标的最佳方式。确定缺乏错误控制,如果不能完全避免使用,请减少。选择and选择。