Type mismatch error 13 excel
Type Mismatch Error VBA возникает при попытке назначить значение между двумя различными типами переменных. Ошибка отображается как:
run-time error 13 – Type mismatch
Например, если вы пытаетесь поместить текст в целочисленную переменную Long или пытаетесь поместить число в переменную Date. Давайте посмотрим на конкретный пример. Представьте, что у нас есть переменная с именем Total, которая является длинным целым числом Long. Если мы попытаемся поместить текст в переменную, мы получим Type Mismatch Error VBA (т.е. VBA Error 13).
Давайте посмотрим на другой пример. На этот раз у нас есть переменная ReportDate типа Date. Если мы попытаемся поместить в эту переменную не дату, мы получим Type Mismatch Error VBA.
Простой способ объяснить Type Mismatch Error VBA состоит в том, что элементы по обе стороны от равных оценивают другой тип. При возникновении Type Mismatch Error это часто не так просто, как в этих примерах. В этих более сложных случаях мы можем использовать средства отладки, чтобы помочь нам устранить ошибку.
Использование отладчика
В VBA есть несколько очень мощных инструментов для поиска ошибок. Инструменты отладки позволяют приостановить выполнение кода и проверить значения в текущих переменных.
Присвоение строки числу
Как мы уже видели, попытка поместить текст в числовую переменную может привести к Type Mismatch Error VBA.
Недействительная дата
VBA очень гибок в назначении даты переменной даты. Если вы поставите месяц в неправильном порядке или пропустите день, VBA все равно сделает все возможное, чтобы удовлетворить вас.
Ошибка ячейки
Тонкая причина Type Mismatch Error VBA — это когда вы читаете из ячейки с ошибкой.
Чтобы устранить эту ошибку, вы можете проверить ячейку с помощью IsError.
Неверные данные ячейки
Как мы видели, размещение неверного типа значения в переменной вызывает Type Mismatch Error VBA. Очень распространенная причина — это когда значение в ячейке имеет неправильный тип. Пользователь может поместить текст, такой как «Нет», в числовое поле, не осознавая, что это приведет к Type Mismatch Error в коде. Если мы прочитаем эти данные в числовую переменную, то получим Type Mismatch Error VBA.
Имя модуля
Если вы используете имя модуля в своем коде, это может привести к Type Mismatch Error VBA. Однако в этом случае причина может быть не очевидной.
Различные типы объектов
В VBA у нас также есть объекты, которые являются более сложными. Примерами являются объекты Workbook, Worksheet, Range и Chart. Если мы назначаем один из этих типов, мы должны убедиться, что назначаемый элемент является объектом того же типа.
Массивы и диапазоны
Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных. Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив. Если вы попытаетесь использовать его как массив, вы получите Type Mismatch Error .
Excel VBA Run-time error ’13’ Type mismatch
Я создал макрос для файла, и сначала он работал нормально, но сегодня я открывал и перезапускал файл и макрос сотни раз, и я всегда получаю следующую ошибку:
Excel VBA Run-time error ’13’ Type mismatch
Я ничего не менял в макросе и не знаю, почему я получаю ошибку. Кроме того, требуется время, чтобы обновлять макрос каждый раз, когда я его запускаю (макрос должен выполнять около 9000 строк).
Я использую Excel 2010 в Windows 7.
Ответ
Эта функция оставалась в Run-time error ’13’: Type mismatch
Function fnIsNumber(Value) As Boolean
fnIsNumber = Evaluate(“ISNUMBER(0+””” & Value & “””)”)
End Function
В моем случае произошел сбой функции, когда она столкнулась со значением #DIV/0! или N/A.
Чтобы решить ее, мне пришлось сделать это:
Function fnIsNumber(Value) As Boolean
If CStr(Value) = “Error 2007” Then ‘<===== This is the important line
fnIsNumber = False
Else
fnIsNumber = Evaluate(“ISNUMBER(0+””” & Value & “””)”)
End If
End Function