Ошибка несоответствия типов vba excel

Обновлено: 24.11.2024

Visual Basic может преобразовывать и приводить многие значения для выполнения назначений типов данных, что было невозможно в более ранних версиях.

Однако эта ошибка все еще может возникать и имеет следующие причины и решения:

  • Причина: переменная или свойство имеют неправильный тип. Например, переменная, которой требуется целочисленное значение, не может принимать строковое значение, если вся строка не может быть распознана как целое число.

Решение. Попробуйте выполнять назначения только между совместимыми типами данных. Например, Integer всегда можно назначить Long, Single всегда можно назначить Double, а любой тип (кроме определяемого пользователем) можно назначить Variant.

  • Причина: объект был передан процедуре, ожидающей одно свойство или значение.

Решение. Передайте соответствующее отдельное свойство или вызовите метод, соответствующий объекту.

Причина: имя модуля или проекта использовалось там, где ожидалось выражение, например:

Решение. Укажите отображаемое выражение.

Причина. Вы попытались смешать традиционную базовую обработку ошибок со значениями Variant, имеющими подтип Error (10, vbError), например:

Решение. Чтобы сгенерировать ошибку повторно, необходимо сопоставить ее со встроенной в Visual Basic или определяемой пользователем ошибкой, а затем сгенерировать эту ошибку.

Причина: значение CVErr не может быть преобразовано в дату. Например:

Решение. Используйте оператор Select Case или аналогичную конструкцию для сопоставления возврата CVErr с таким значением.

Решение. Чтобы напечатать массивы, создайте цикл, отображающий каждый элемент по отдельности.

Для получения дополнительной информации выберите нужный элемент и нажмите F1 (в Windows) или HELP (в Macintosh).

Заинтересованы в разработке решений, расширяющих возможности Office на различных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любые технологии веб-программирования, такие как HTML5, JavaScript, CSS3 и XML.

Поддержка и обратная связь

Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы об Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Ошибка несоответствия типов в Excel VBA возникает, когда вы пытаетесь присвоить значение переменной неправильного типа.

Поместите командную кнопку на лист и добавьте следующие строки кода:

Результат при нажатии командной кнопки на листе:

Объяснение: вы не можете присвоить строковое значение (велосипед) переменной типа Integer.

Ошибка несоответствия типов (ошибка времени выполнения 13) часто возникает при использовании функции InputBox в Excel VBA.

<р>1. Поместите командную кнопку на лист и добавьте следующие строки кода:

Затемнить число как целое число
number = InputBox("Введите число", "Квадратный корень")

MsgBox "Квадратный корень из " & number & " равен " & Sqr(number)

<р>2. Нажмите командную кнопку на листе, введите строковое значение сотня и нажмите ОК.

<р>4. Чтобы отобразить дружественное сообщение вместо ошибки несоответствия типа, обновите код следующим образом.

Затемнить число как вариант
number = InputBox("Введите число", "Квадратный корень")

If IsNumeric(number) Then
MsgBox "Квадратный корень из " & number & " равен " & Sqr(number)
Else
MsgBox "Пожалуйста, введите число"
Конец, если

Объяснение: переменная типа Variant может содержать значение любого типа (см. первую строку). Функция IsNumeric в Excel VBA проверяет, является ли значение числом.

<р>5. Повторите шаг 2.

<р>6. Наконец, проверьте, работает ли этот простой калькулятор квадратного корня.

Совет: загрузите файл Excel (справа на этой странице) и попробуйте.

Обратите внимание: если вы не полностью протестировали свой код перед распространением среди пользователей, это сообщение об ошибке будет видно пользователям и приведет к значительной потере доверия к вашему приложению Excel. К сожалению, пользователи часто делают с приложением очень странные вещи, которые вы, как разработчик, никогда не учитывали.

Ошибка несоответствия типов возникает из-за того, что вы определили переменную с помощью оператора Dim как определенный тип, например. целое число, дата, и ваш код пытается присвоить значение переменной, что неприемлемо, например. текстовая строка, присвоенная целочисленной переменной, как в этом примере:

Вот пример:

Нажмите «Отладка», и некорректная строка кода будет выделена желтым цветом. Во всплывающем окне с ошибкой нет возможности продолжить, так как это серьезная ошибка, и код не может работать дальше.

В данном конкретном случае решение состоит в том, чтобы изменить оператор Dim на тип переменной, который работает со значением, которое вы присваиваете переменной. Код будет работать, если вы измените тип переменной на «String», и вы, вероятно, захотите также изменить имя переменной.

Однако изменение типа переменной потребует сброса вашего проекта, и вам придется снова запускать свой код с самого начала, что может быть очень раздражающим, если задействована длинная процедура

Ошибка несоответствия, вызванная расчетом рабочего листа

В приведенном выше примере очень просто показано, как может возникнуть ошибка несоответствия, и в данном случае ее легко исправить

Однако причина ошибок несоответствия обычно гораздо глубже и не так очевидна, когда вы пытаетесь отладить свой код.

В качестве примера предположим, что вы написали код для выбора значения в определенной позиции на листе, и он содержит вычисления, зависящие от других ячеек в рабочей книге (B1 в этом примере)

Рабочий лист выглядит так, как показано в этом примере, с формулой для поиска определенного символа в текстовой строке

С точки зрения пользователя ячейка A1 имеет свободный формат, и он может ввести любое значение, которое захочет. Однако формула ищет вхождение символа «B», и в этом случае он не найден, поэтому ячейка B1 имеет значение ошибки.

Приведенный ниже тестовый код вызовет ошибку несоответствия, поскольку в ячейку A1 было введено неверное значение

В этой статье мы рассмотрим несоответствие типов Excel VBA. Это самое обычное, с чем мы все сталкивались при работе над VBA Macro. Иногда, когда мы создаем макрос, из-за выбора неправильных типов данных или присвоения значений мы получаем ошибку Type Mismatch. Такая ошибка чаще всего возникает во время присваивания и объявления переменных. Несоответствие типа VBA выдает сообщение «Ошибка времени выполнения» с кодом ошибки 13. Чтобы избежать таких ошибок, рекомендуется правильно назначать переменные с правильным выбором типов данных и объектов. Кроме того, нам необходимо понимать каждый тип данных и тип значений, которые он может содержать.

Как исправить ошибку несоответствия типов в VBA?

Мы узнаем, как исправить ошибку несоответствия типов в Excel с помощью кода VBA.

Оценка, Hadoop, Excel, мобильные приложения, веб-разработка и многое другое.

Чтобы продемонстрировать ошибку несоответствия типов, нам нужно открыть модуль. Для этого выполните следующие действия:

Шаг 1. Перейдем на вкладку меню «Вставка» и выберем там модуль.

Шаг 2. Теперь напишите подпроцедуру для несоответствия типов VBA, как показано ниже. Здесь мы можем выбрать любое имя для определения подпроцедуры.

Код:

Шаг 3. Теперь мы определим переменную, скажем, «A» как целочисленный тип данных.

Код:

Шаг 4. Как мы все знаем, в целочисленном типе данных хранятся только числа, причем в целых числах. Но просто для демонстрации здесь мы будем присваивать текстовое значение переменной A.

Код:

Шаг 5: И чтобы увидеть значения, хранящиеся в переменной A, мы будем использовать окно сообщения.

Код:

Шаг 6. Теперь запустите код, нажав клавишу F5 или кнопку воспроизведения. Как мы видим, мы действительно получили сообщение об ошибке «Ошибка времени выполнения «13», как показано ниже, с дополнительным сообщением «Несоответствие типов».

Как мы уже знаем, Integer может хранить только целые числа. Таким образом, присвоив ему текст, вы обязательно увидите ошибку. Если мы рассмотрим тот же код и скомпилируем его перед запуском, мы также получим это сообщение об ошибке раньше. Для прямой компиляции кода нажмите функциональную клавишу F8.

Шаг 7. Если мы присвоим правильное значение неправильного формата определяемой нами переменной, мы получим правильный вывод.

Код:

Шаг 8. Запустите код, нажав клавишу F5 или кнопку воспроизведения. Мы получим сообщение как 10, которое мы присвоили переменной A.

Давайте рассмотрим еще один пример несоответствия типов. Для этого выполните следующие действия:

Шаг 1. Напишите подпроцедуру для несоответствия типов VBA.

Код:

Шаг 2. Снова назначьте новую переменную, скажем, «A» в качестве типа данных Byte.

Код:

Давайте разберемся с типом байтовых данных. Байт может хранить только числовое значение от 0 до 255. И он не принимает во внимание никакие отрицательные значения.

Шаг 3. Теперь давайте назначим любое значение, кроме числа. Здесь мы рассмотрели текст «TEN».

Код:

Шаг 4: Затем мы создадим окно сообщения для вывода.

Код:

Шаг 5. Запустите код, нажав клавишу F5 или кнопку воспроизведения. И мы снова получили сообщение об ошибке. Сообщение такое же, как в примере 1.

Шаг 6: Поскольку мы ввели значение в неправильном формате, мы получили сообщение об ошибке «Несоответствие типов». Что, если мы введем значение больше 255? Возьмем здесь 1000.

Код:

Шаг 7. На этот раз мы получили ошибку переполнения «Ошибка времени выполнения ‘6’». Это означает, что мы ввели значение, превышающее допустимую емкость выбранного типа данных.

Давайте рассмотрим другой пример. Здесь мы попробуем 2 типа данных и использовать их как любую математическую операцию. Для этого выполните следующие действия:

Шаг 1. Напишите подпроцедуру для несоответствия типов VBA.

Код:

Шаг 2. Теперь давайте рассмотрим 2 переменные A и B как целые числа.

Код:

Шаг 3. Как мы видели в предыдущем примере, Integer допускает только числа как единое целое. Таким образом, мы будем назначать одно числовое значение одному из целых чисел и назначать любой текст другой переменной, как показано ниже.

Код:

Шаг 4. Умножим приведенные выше переменные здесь, в окне сообщения.

Код:

Шаг 5. После запуска кода появится окно сообщения с сообщением об ошибке «Ошибка времени выполнения '13'». Это потому, что мы использовали один текст для переменной B, а затем умножили A на B.

Шаг 6. И если мы изменим тип данных с Integer на Long. А также изменить формат значений.

Код:

Шаг 7. Если запустить код, нажав клавишу F5 или нажав кнопку воспроизведения, этот код будет успешно выполнен. Даже если мы сохранили значение 10 в перевернутом двоеточии в переменной B.

Плюсы несоответствия типов VBA:

  • На самом деле мы узнаем об ошибке там, где она произошла.
  • Сообщение об ошибке настолько важно, что даже если мы не скомпилируем код, мы получим точку ошибки в коде.

Что нужно помнить

  • Даже если есть небольшая скобка, в которой мы посчитали немного другое значение, мы обязательно получим ошибку несоответствия типов.
  • Понять, какие типы данных мы собираемся использовать, и значения, разрешенные для этих типов данных. Это позволит нам избежать таких глупых ошибок и успешно запустить код.
  • Все основные типы данных имеют некоторые ограничения на входные значения. В основном лучше выбирать те типы данных, которые не дают такой ошибки, как широкий диапазон ввода, такой как String, Long, Variant. Остальные типы данных имеют некоторые ограничения.
  • После написания кода лучше сохранить код в формате Excel с поддержкой макросов.

Рекомендуемые статьи

Это руководство по несоответствию типов VBA. Здесь мы обсуждаем, как исправить ошибку несоответствия типов в Excel с помощью кода VBA, а также практические примеры и загружаемый шаблон Excel. Вы также можете ознакомиться с другими нашими рекомендуемыми статьями –

Читайте также: