单元格为空白时,VBA查找未返回正确的值

时间:2019-06-26 16:38:55

标签: excel vba

我有这段代码应该根据是否在另一个工作表中找到该工作表中的两个相邻值(它们必须在两个工作表中彼此相邻)来返回J列中的两个文本值之一。如果一个工作表中的相邻值在另一工作表中彼此相邻,则返回“先前添加”,否则返回“ Tom已添加”。该代码运行,但是,如果“ SubValueToFind”为空值,则它可能返回错误的文本,也就是说,当它实际返回“ Tom Added”时,它可能意味着返回“以前添加的”。

即使SubValueToFind中有空白单元格,任何归类为“先前添加”的单元格都是正确的。但是,如果该值是空白(许多值是空白),则在将其应为“以前添加”时,可能会错误地将其分类为“已添加汤姆”,就像在其他工作表中一样。同样,它仅在Sub列中有空白值时才会发生。

Sub UpdateTomAdd()

Dim LR As Long, i As Long
Dim AcctSearchRange As Range
Dim AcctFindRange As Range, C As Range, Cel As Range, D As Range
Dim AcctValueToFind As Variant
Dim SubValueToFind As Variant
Dim CurrentSheet As Worksheet
Dim xlSheet As Worksheet, Xfound As Boolean
Dim firstAddress  As String

Set CurrentSheet = ActiveWorkbook.ActiveSheet
Set xlSheet = ActiveWorkbook.Worksheets("CurrentBSCOA")
Set AcctSearchRange = xlSheet.Range("E1:E" & xlSheet.Range("E" & Rows.Count).End(xlUp).Row)
Set AcctFindRange = CurrentSheet.Range("C1:C" & CurrentSheet.Range("C" & Rows.Count).End(xlUp).Row)

For Each Cel In AcctFindRange.Cells
    Xfound = False
    AcctValueToFind = Cel.Value
    SubValueToFind = Cel.Offset(0, 1).Value
    With AcctSearchRange
        Set C = .Find(AcctValueToFind)
        If Not C Is Nothing Then 'does this mean if the sub value on the new sheet is blank?'
            firstAddress = C.Address
            Do
                If C.Offset(0, 1).Value = SubValueToFind Then
                    Xfound = True
                    Exit Do
                End If
                Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> firstAddress
        End If
    End With

    Cel.Offset(0, 7).Value = IIf(Xfound, "Previously Added", "Added by Tom")
    Next Cel
End Sub

如果在另一个工作表中发现相邻的值彼此相邻,则应该说:“以前添加”。 如果在另一个工作表中未发现相邻的值彼此相邻,则应说:“已添加Tom”。

“ Sub”列中的空白单元格导致错误。

1 个答案:

答案 0 :(得分:0)

执行Set C = .Find(AcctValueToFind)可能会找到您要查找的单元格并运行检查If Not C Is Nothing是一个好习惯,但这并不意味着它找到了一个空白单元格。如果C Is Nothing为TRUE,则意味着它找不到匹配项,因此不会在任何地方引用任何范围,因此被称为“无”。

检查单元格是否为空的一种方法是If c.value = "" Then。因此,我将在适当的位置嵌套(或修改)该语句(可能在If Not C Is Nothing Then块中)。