2014-12-04 6 views
6

Я пытаюсь использовать Application.Match, но он возвращает ошибку type mismatch error:13. Зачем?Application.Match дает тип несоответствие

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()? – Chrismas007

+0

Видимо, поиск обычно медленнее, чем Match: [fastexcel.wordpress.com] (https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance- shootout /) – Egalth

ответ

14

По всей видимости, совпадения не найдено. В таком случае Application.Match возвращает код ошибки Excel, то есть вариант/ошибка, значение которого равно Error 2042 (это соответствует получению #N/A в Excel).

Такое значение ошибки не может быть принудительно принудительно привязано к String (что и ожидалось MsgBox), и таким образом вы получаете несоответствие типа.

Обратите внимание, что ту же функцию Match можно назвать, используя WorksheetFunction.Match. Единственное отличие заключается в том, как ошибки должны быть обработаны:

  • С WorksheetFunction, ошибки рассматриваются как ошибки VBA, Перехватываемая с использованием синтаксиса On Error.

  • С помощью Application они возвращают код ошибки Excel, завернутый в вариант. Вы можете использовать IsError, чтобы увидеть, является ли возвращаемая переменная вариантом типа ошибки.

+0

ах, это была моя проблема! Я искал «25%», но, разумеется, на листе было как .25, а не строка. спасибо – As3adTintin

Смежные вопросы