Функция соответствия не находит данные - PullRequest
0 голосов
/ 07 февраля 2019

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

  1. Таблица с данными находится на одной странице.
  2. Сводная таблица создается из таблицы данных, и данные реорганизуются с данными издругие таблицы также в книге с использованием функций vlookup.Сводная таблица - это только один столбец.
  3. Одна из этих переменных, называемая IDNum, которая находится по имени из сводной таблицы и соответствующей информации из таблицы контактов, используется в функции сопоставления для поиска строки в таблице контактов.

Теперь, когда программа запускается, функция соответствия здесь никогда не находит соответствия в столбце IDNum.Если я ввожу функцию соответствия Excel, она работает нормально.Эта функция была такой: INDEX (Контакт [Последний обзор], MATCH (B7, Контакт [ID], 0), 0).B7 - это IDNum в коде VBA.

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

Данные в формате Excel представлены в общем формате.IDNum определяется как строка в коде VBA и является глобальной переменной.Переменная IDNum извлекает правильную информацию.

Существуют ли другие способы проверить, отличаются ли данные в переменной IDNum от набора данных, который должен искать совпадение?Как проверить правильность информации в столбце таблицы в функции сопоставления?Какие еще вещи я могу посмотреть, чтобы попытаться решить эту проблему?

Private Function TryGetRevisionDate(ByVal ID As String, ByRef outResult As Date) As Boolean
    On Error GoTo CleanFail

    With Application.WorksheetFunction
        Dim matchRow As Long
        matchRow = .Match(IDNum, Contact.ListColumns("ID").DataBodyRange, 0)

        Dim indexValue As Variant
        indexValue = .Index(Contact.ListColumns("Last Review").DataBodyRange, matchRow)
    End With

    If IsDate(indexValue) Then outResult = indexValue
    TryGetRevisionDate = True

CleanExit:
    Exit Function

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