我试图在两个不同的选项卡中检查两组信息,然后将所有记录放入第三个选项卡中,突出显示信息中的差异以及一组中存在的记录,但另一个中没有。另一个困难是,我需要检查的信息在两个选项卡中的编写方式并不完全相同。例如:在一个标签中,产品称为“产品1,产品2”,依此类推,而其他产品仅使用数字。
我对VBA还是很陌生,到目前为止,我最好的主意是选择其中一组ID为ID的列,然后使用“查找”检查另一组是否匹配。之后,我想对“查找”返回值使用“偏移”,以检查行中的其他单元格。
但是,遇到“对象变量或未设置块变量”错误,并且我不知道自己在做什么。
下面是代码,我非常感谢在这种情况下使用Offset的任何帮助(或以更有效的方式获得结果的想法)。
Sub Test()
Dim Candi_ID As String
Dim Full_Name As String
Dim i_Row As Object
Dim i_Cell As Range
Dim MD_Range As Integer
Dim i_Cell As Range
Sheets("M Report").Select
MD_Range = Application.WorksheetFunction.CountA(Range("C:C")) 'column with the IDs
For R = 2 To MD_Range
Candi_ID = Sheets("M Report").Cells(R, 3)
Full_Name = Sheets("M Report").Cells(R, 1)
If Candi_ID <> "" Then
With Sheets("i Report").Range("B:B")
Set i_Cell = .Find(What:="*" & Candi_ID, LookIn:=xlValues)
If i_Cell Is Nothing Then
Sheets("Tracker").Range("A" & Last_Row + 1) = Candi_ID
Sheets("Tracker").Range("A" & Last_Row + 1).Interior.Color = RGB(255, 0, 0)
Else
Last_Row = Sheets("Tracker").Cells(.Rows.Count, "A").End(xlUp).Row
Sheets("Tracker").Range("A" & Last_Row + 1) = Candi_ID
End If
If Full_Name <> "" Then
If Full_Name = i_Cell.Offset(0, -1) Then 'full name is one cell to the left of the ID cell
Sheets("Tracker").Range("C" & Last_Row + 1) = Full_Name
Else
Sheets("Tracker").Range("C" & Last_Row + 1) = Full_Name
Sheets("Tracker").Range("C" & Last_Row + 1).Interior.Color = RGB(255, 0, 0)
End If
End If
End With
End If
Last_Row = Last_Row + 1
Next R
End Sub
答案 0 :(得分:1)
如果未在此行上设置i_Cell
,则需要另一个测试:
Set i_Cell = .Find(What:="*" & Candi_ID, LookIn:=xlValues)
类似的东西:
If Full_Name <> vbNullString And Not i_Cell Is Nothing Then
如果它是Nothing
,并且您没有进一步测试,您将得到您提到的错误。
此外,您有一个重复的声明,一些缺少的声明,并使用Long
而不是Integer
。将Option Explicit
放在所有模块的顶部。避免使用.Select
,这会降低代码速度,并尽可能使用With
语句。
我将空文字字符串""
替换为vbNullString
。