По всей видимости, совпадения не найдено. В таком случае Application.Match
возвращает код ошибки Excel, то есть вариант/ошибка, значение которого равно Error 2042
(это соответствует получению #N/A
в Excel).
Такое значение ошибки не может быть принудительно принудительно привязано к String (что и ожидалось MsgBox
), и таким образом вы получаете несоответствие типа.
Обратите внимание, что ту же функцию Match
можно назвать, используя WorksheetFunction.Match
. Единственное отличие заключается в том, как ошибки должны быть обработаны:
С WorksheetFunction
, ошибки рассматриваются как ошибки VBA, Перехватываемая с использованием синтаксиса On Error
.
С помощью Application
они возвращают код ошибки Excel, завернутый в вариант. Вы можете использовать IsError
, чтобы увидеть, является ли возвращаемая переменная вариантом типа ошибки.
Почему бы не использовать метод Range.Find()? – Chrismas007
Видимо, поиск обычно медленнее, чем Match: [fastexcel.wordpress.com] (https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance- shootout /) – Egalth