Type mismatch error 13 excel

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

Наталья Петрова
Оцените автора
Новости города Салавата
Добавить комментарий

Adblock
detector