У меня есть код ниже и по какой-то причине функция соответствия не возвращает номер строки.Цель совпадения - найти номер строки в таблице контактов, идентификатор столбца, использовать этот номер строки в индексе и получить данные (которые являются датой) из таблицы контактов, последний обзор столбца.Поток данных выглядит следующим образом:
- Таблица с данными находится на одной странице.
- Сводная таблица создается из таблицы данных, и данные реорганизуются с данными издругие таблицы также в книге с использованием функций vlookup.Сводная таблица - это только один столбец.
- Одна из этих переменных, называемая 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