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

В настоящее время у меня возникают некоторые трудности с выделением различных ячеек

В одной рабочей книге два листа, и программа должна отображать различия каждой ячейки

Они имеют одинаковое количество строк истолбцы.

У меня есть программа, которая записывает различия в конце столбцов, но она не выделяет разные ячейки.

Не могли бы вы помочь мне добавить несколько кодов, чтобы выделить ячейки, которые имеютРазличия?

Option Explicit


'=========================================================================================
'=========================================================================================


Sub CheckDifferences_rev3()

 Sheets("sheet2").Select
    Columns("AA:AD").Select
    Selection.Copy
    Sheets("sheet1").Select
    Columns("AA:AA").Select
    ActiveSheet.Paste

    Const sSHEETNAME_A      As String = "Sheet1"
    Const sSHEETNAME_B      As String = "Sheet2"

    Dim iMessageColumnNo    As Integer
    Dim vaDataValues_A      As Variant
    Dim vaDataValues_B      As Variant
    Dim iLastColumnNo       As Integer
    Dim iLastRowNo          As Integer
    Dim iColumnNo           As Integer
    Dim vValue_A            As Variant
    Dim vValue_B            As Variant
    Dim sMessage            As String
    Dim iRowNo              As Integer
    Dim wksA                As Worksheet
    Dim wksB                As Worksheet

    Set wksA = ThisWorkbook.Worksheets(sSHEETNAME_A)
    Set wksB = ThisWorkbook.Worksheets(sSHEETNAME_B)

    iLastColumnNo = WorksheetFunction.Max(miLastColumnNo(wks:=wksA), _
                                          miLastColumnNo(wks:=wksB))

    iLastRowNo = WorksheetFunction.Max(miLastRowNo(wks:=wksA), _
                                       miLastRowNo(wks:=wksB))

    iMessageColumnNo = iLastColumnNo + 1

    With wksA
        vaDataValues_A = Range(.Cells(1, 1), _
                               .Cells(iLastRowNo, iLastColumnNo))
    End With

    With wksB
        vaDataValues_B = Range(.Cells(1, 1), _
                               .Cells(iLastRowNo, iLastColumnNo))
    End With

    For iRowNo = 1 To iLastRowNo

        For iColumnNo = 1 To iLastColumnNo

            vValue_A = vaDataValues_A(iRowNo, iColumnNo)
            vValue_B = vaDataValues_B(iRowNo, iColumnNo)

            If vValue_A <> vValue_B Then

                sMessage = "(New one - " & vValue_A & " / " & "Old one - " & vValue_B & "), "

ЗДЕСЬ, ЗДЕСЬ, ГДЕ Я ПЫТАЮСЯ ДОБАВИТЬ РЕЗЮМЕ. Почему я не могу просто добавить vValue_A.Interior.Color = 3? Я понимаю, что sMessage или vValue_A - это строка, и я не могу использовать их для контекста.

                With wksA.Cells(iRowNo, iMessageColumnNo)
                    .Value = .Value & sMessage
                End With

            End If

        Next iColumnNo

    Next iRowNo



End Sub


'=========================================================================================
'=========================================================================================


Private Function miLastColumnNo(wks As Worksheet) As Integer

    With wks.UsedRange
        miLastColumnNo = .Columns(.Columns.Count).Column
    End With

End Function


'=========================================================================================
'=========================================================================================


Private Function miLastRowNo(wks As Worksheet) As Integer

    With wks.UsedRange
        miLastRowNo = .Rows(.Rows.Count).Row
    End With

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