Type mismatch — ошибка 13 — возникает при несовместимом типе значения или объекта. Частый пример: попытка получить число из обычного текста.
Разделим проверку ошибки Excel, проверку числового ввода и преобразование.
Что подготовить
На «Проверка» A2 содержит 150, B2 свободна для числа. A1 подпишите «Источник», B1 — «Число».
Для отрицательной проверки замените A2 словом «нет» или ошибкой формулы. Исходный столбец не должен изменяться при проверке.
Код и порядок выполнения
Option Explicit
Sub ConvertCheckedValue()
Dim v As Variant
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Проверка")
v = ws.Range("A2").Value
If IsError(v) Then
MsgBox "В источнике ошибка Excel": Exit Sub
End If
If Not IsNumeric(v) Then
MsgBox "В источнике не число": Exit Sub
End If
ws.Range("B2").Value = CDbl(v)
End SubVariant позволяет сначала получить значение и проверить его вид. Проверка IsError стоит до числовых преобразований, чтобы ошибка ячейки не обрабатывалась как обычная строка.
CDbl выполняется после проверки распознавания числа. Для суммы дополнительно согласуют диапазон, точность и допустимость дробной части.
Как проверить результат
Для числового 150 в B2 ожидается 150. При тексте или ошибке Excel выводится подсказка и новая запись не выполняется.
Ограничения и частые ошибки
IsNumeric не гарантирует, что значение поместится в любой узкий тип. Числовая строка может вызвать переполнение при CLng или другой конверсии; это уже отдельная проверка диапазона.
Не используйте On Error Resume Next на всю процедуру как способ «исправить» типы. Ошибочная конверсия может оставить старое значение и создать видимость успешного результата.
Для объекта нужна объектная переменная и Set, для массива — подходящая размерность, для ячейки с ошибкой — отдельное правило. Уточните тип через TypeName или VarType в месте сбоя.
Проверка перед рабочим запуском
- Число преобразуется явно.
- Текст отклоняется до CDbl.
- Ошибка ячейки проверяется отдельно.
- При отказе старое B2 не объявляется новым результатом.
Сначала выполните пример на учебной копии с указанными именами листов и диапазонами. Сравните исходные данные и результат, затем сохраните проверенный вариант процедуры.
Продолжить изучение: Переменные и типы данных VBA: Dim и Option Explicit, InputBox в VBA: ввод значения и обработка отмены, Ошибка Overflow в VBA: переполнение и типы.
Разберитесь с макросами вместе с преподавателем
На занятии вы записываете действия, читаете код и проверяете результат на небольшом примере. Преподаватель подберёт задания под ваш уровень и поможет понять связь между командами VBA и изменениями в книге.
Начните с бесплатного вводного урока: 45 минут, один на один, без обязательств. Обсудите цель и попробуйте формат. Решение о продолжении — после занятия.