#excel #vba #runtime #type-mismatch
#vba #excel
Вопрос:
Я пытаюсь использовать Application.Match
, однако он возвращает type mismatch error:13
ошибку. Почему?
Dim mySrs as Series
Dim ws as Worksheet
set ws Activesheet
For Each mySrs in ActiveChart.SeriesCollection
tempvar = mySrs.Name
y = Application.Match(tempvar, ws.Range("P37:P71"), 0)
MsgBox y
Комментарии:
1. Почему бы не использовать
Range.Find()
метод?2. По-видимому, поиск обычно происходит медленнее, чем сопоставление: fastexcel.wordpress.com
Ответ №1:
По всей вероятности, совпадение не найдено. В таком случае Application.Match
возвращает код ошибки Excel, то есть вариант / ошибку, значение которой равно Error 2042
(это соответствует получению #N/A
в Excel).
Такое значение ошибки не может быть неявно приведено к строке (что MsgBox
и ожидается), и, таким образом, вы получаете несоответствие типов.
Обратите внимание, что одна и та же Match
функция может быть вызвана с помощью WorksheetFunction.Match
. Единственное различие заключается в том, как должны обрабатываться ошибки:
-
При
WorksheetFunction
этом ошибки обрабатываются как ошибки VBA, которые можно перехватить с помощьюOn Error
синтаксиса. -
При
Application
этом они возвращают код ошибки Excel, завернутый в вариант. Вы можете использоватьIsError
, чтобы увидеть, является ли возвращаемая переменная вариантом типа ошибки.
Комментарии:
1. ах, это была моя проблема! Я искал «25%», но, конечно, на листе это было .25, а не строка. Спасибо
2. Большое спасибо за ОТЛИЧНОЕ объяснение, которое спасло меня ОКОНЧАТЕЛЬНО