VBA находит неправильные значения при отсутствии ячеек - PullRequest
0 голосов
/ 26 июня 2019

У меня есть этот код, который должен возвращать одно из двух текстовых значений в столбце J в зависимости от того, найдены ли два смежных значения в этом листе в другом листе (они ДОЛЖНЫ быть смежными друг с другом в обоих листах).Если смежные значения в одном листе находятся рядом друг с другом, найденном в другом листе, возвращается «Ранее добавлено», если нет, возвращается «Том добавлен».Код выполняется, однако, если SubValueToFind является пустым значением, он может возвращать неправильный текст, то есть может означать возвращение «ранее добавленного», когда он фактически возвращает «Том добавлен».

Любая ячейка, которая классифицируется как «Ранее добавленная», является правильной, даже если в 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

Если соседние значения оказываются смежными друг с другом на другом листе, следует указать: «Ранее добавлено».Если смежные значения не найдены смежными друг с другом на другом листе, он должен сказать: «Том добавлен».

Пустые ячейки в столбце Sub вызывают ошибки.

1 Ответ

0 голосов
/ 26 июня 2019

Когда вы делаете Set C = .Find(AcctValueToFind), который потенциально находит ячейку, которую вы ищете, и запускаете проверку If Not C Is Nothing, это хорошая практика, но это не значит, что она обнаружила пустую ячейку.Если C Is Nothing - ИСТИНА, это означает, что он не может найти совпадение и, следовательно, не будет нигде ссылаться на какой-либо диапазон, поэтому его называют «Ничто».

Способ проверить, является ли ячейка пустой, If c.value = "" Then.Поэтому я бы вложил / изменил этот оператор там, где он подходит (вероятно, внутри блока If Not C Is Nothing Then).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...