Range.Find()失败

我有这样的要求:

  • 我有两个Excel文件与列A到Q的数据
  • 我遍历每个Excel中的每一行中的每一行,获取列A中的值,并在其他Excel中find相应表单中的值。
  • 如果有匹配,我在两个Excel中检查列A,G和J匹配的值。 如果它们不匹配,它们将被logging在一个日志文件中(Excel的matrixtypes表示不匹配的地方)。 (还有待执行)
  • 如果没有匹配,我必须再次login。 (还有待执行)

该守则是:

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) 

在处理了大约十个工作表的这个活动之后,尽pipe我在两个不同工作簿的工作表中都有匹配的内容,但是我Nothing返回Find函数的内容。

什么是错的,为什么在这里失败?

您没有包含SecondaryCheckName的声明,但是每个指示都是一个string,而不是Rangetypesvariables。 您不应SetSet为由Range.Find方法返回的Range对象 ; 它应该简单地分配给.Find结果的值。 或者,将其声明为Rangetypesvariables,以便SetSet为Range对象以备将来使用。

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

那是你为什么收到错误的答案。 但是,我不认为这是完成你的目标的最好方法。 有一个决定缺乏错误控制,你应该减less,如果不是完全避免使用。selectandselect。