Приложение.Совпадение приводит к несоответствию типов

#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. Большое спасибо за ОТЛИЧНОЕ объяснение, которое спасло меня ОКОНЧАТЕЛЬНО