Сравнение указанных c ячеек из двух отдельных файлов Excel - PullRequest
0 голосов
/ 24 апреля 2020

Я новичок в VBA и буду очень признателен за помощь.

В своей работе время от времени мне приходится сравнивать две базы данных: одну из системы документации пациента, а другую - с устройства. база данных. Обе эти базы данных экспортируются как файлы Excel. Я хочу сравнить ячейки из одного столбца каждого файла Excel (столбец B из первого файла, столбец M из второго файла) и убедиться, что их содержимое идентично. Если значение идентично, ячейка должна стать зеленой, если нет - красной. Это значительно упростит поиск опечаток и сэкономит много работы. Поскольку я не хочу прикасаться к коду каждый раз, когда делаю это, я создал небольшую пользовательскую форму, где я могу загрузить два листа Excel и нажать «Сравнить». Все идет нормально. Моя (noob) проблема заключается в следующем: как сравнить каждую ячейку из этих двух указанных c столбцов (которые находятся в отдельных файлах Excel)? Я придумал этот код, который выполняется после нажатия кнопки «сравнить»:

Sub CommandButton3_Click()

Dim BBraunFile
Dim ICMFile
Dim CellsBBraun
Dim CellsICM
Dim CellA
Dim CellB

Set BBraunFile = Workbooks.Open(strFileToOpenBbraun)
Set ICMFile = Workbooks.Open(strFileToOpenICM)

CellsBBraun = BBraunFile.Worksheets("0_Standard-Pat.-Profil").Range("b4:b5000")
CellsICM = ICMFile.Worksheets("ExternalIDs").Range("M2:M5000")

    For Each CellA In CellsBBraun
        Set CellB = ICMFile.Worksheets("ExternalIDs").Range(Cell.Row, 13)
        If CellA.Value = CellB.Value Then
                CellA.Interior.ColorIndex = 3
            Else
                CellA.Interior.ColorIndex = 4
        End If
    Next CellA

End Sub

Когда я запускаю скрипт, я получаю ошибку времени выполнения «424: требуется объект». Я, вероятно, испортил синтаксис, но не знаю, как это исправить. Я оглянулся, но не смог найти ответ. Пожалуйста, помогите?

1 Ответ

1 голос
/ 24 апреля 2020

Здесь используется словарь, на самом деле вы можете использовать любой контейнер, но в словарях есть .exists, который здесь помогает.

Вы также должны объявить тип всех ваших переменных, в настоящее время у вас есть все варианты.

    Dim BBraunFile As Workbook
    Dim ICMFile As Workbook
    Dim CellsBBraun As Range
    Dim CellsICM As Range

    Set BBraunFile = Workbooks.Open(strFileToOpenBbraun)
    Set ICMFile = Workbooks.Open(strFileToOpenICM)

    'Set your objects
    Set CellsBBraun = BBraunFile.Worksheets("0_Standard-Pat.-Profil").Range("b4:b5000")
    Set CellsICM = ICMFile.Worksheets("ExternalIDs").Range("M2:M5000")

    Dim valdict As Object ' This is late binding add in the scripting runtime library for early binding
    Set valdict = CreateObject("Scripting.Dictionary") ' This is late binding add in the scripting runtime library for early binding

    Dim CellA As Range

    For Each CellA In CellsICM 'Iterate through workbook we aren't formatting
        valdict(CellA.Value) = "" ' Just populating keys we dont need an item
    Next CellA

    For Each CellA In cellsbbraun 'Iterate through workbook we are formatting
        If valdict.exists(CellA.Value) Then 'See if the value is in the dictionary
            CellA.Interior.ColorIndex = 4
        Else
            CellA.Interior.ColorIndex = 3
        End If
    Next CellA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...