Сопоставьте значения в одном столбце на двух листах, а затем сравните всю строку на предмет различий - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть код из другого поста, но я не могу понять, чтобы он выделил отдельные различия в ячейках в каждой строке. У меня есть текущий лист и предыдущий лист; идея состоит в том, что код должен сравнивать серийные номера в одном столбце (то же самое на обоих листах) и делать две вещи:

1) Если значение отображается на текущем листе, но отсутствует на предыдущем, тогда вся строка на текущем листе выделяется зеленым цветом. (Это работа с текущим кодом); а также 2) Если совпадающее значение находится на обоих листах, то строки должны сравниваться, и любое значение на текущем листе, отличное от предыдущего, выделяется желтым цветом. (Это не работает)

Количество и порядок столбцов всегда одинаковы. Серийные номера не меняются и являются уникальными для каждой записи. Код, на который я смотрел:

Sub NewUpdates()

    Const ID_COL As Integer = 31 'ID is in this column
    Const NUM_COLS As Integer = 32 'how many columns are being compared?

    Dim shtNew As Excel.Worksheet, shtOld As Excel.Worksheet
    Dim rwNew As Range, rwOld As Range, f As Range
    Dim x As Integer, Id
    Dim valOld, valNew

    Set shtNew = ActiveWorkbook.Sheets("CurrentList")
    Set shtOld = ActiveWorkbook.Sheets("PreviousList")

    Set rwNew = shtNew.Rows(5) 'first entry on "current" sheet

    Do While rwNew.Cells(ID_COL).Value <> ""

        Id = rwNew.Cells(ID_COL).Value
        Set f = shtOld.UsedRange.Columns(ID_COL).Find(Id, , xlValues, xlWhole)
        If Not f Is Nothing Then
            Set rwOld = f.EntireRow

            For x = 1 To NUM_COLS
                If rwNew.Cells(x).Value <> rwOld.Cells(x).Value Then
                    rwNew.Cells.Interior.Color = vbYellow
                Else
                    rwNew.Cells.Interior.ColorIndex = xlNone
                End If
            Next x

        Else
            rwNew.EntireRow.Interior.Color = vbGreen 'new entry
        End If

        Set rwNew = rwNew.Offset(1, 0) 'next row to compare

        Loop

End Sub

Я ничего особо не изменил в самой кодировке, но первоначальное обсуждение, из которого я взял это, больше не продолжалось. Любые идеи по обновлению, чтобы я мог выделить его для отображения отдельных ячеек?

edit: нашел ссылку, по которой Тим Уильямс ответил на аналогичный вопрос, и я нашел этот код. здесь .

1 Ответ

2 голосов
/ 14 февраля 2012

Если вы измените деталь, в которой вы меняете цвет на желтый (обратите внимание на дополнительную '(x)'), она должна работать:

For x = 1 To NUM_COLS
    If rwNew.Cells(x).Value <> rwOld.Cells(x).Value Then
        rwNew.Cells(x).Interior.Color = vbYellow
    Else
        rwNew.Cells(x).Interior.ColorIndex = xlNone
    End If
Next x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...