IT Новости из мира ПК
13 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Run time error 13 vba excel

Типы ошибок в VBA

При выполнении макросов Excel могут возникнуть ошибки, которые в VBA делят на три категории:

Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.

Ошибки компиляции

Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.

Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.

Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.

В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.

Например, сообщение “Compile error: Variable not defined” при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).

Ошибки выполнения

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

Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение “Run-time error ’11’: Division by zero“.

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

Получив такое сообщение и видя выделенную строку кода, как в приведённом выше примере, обнаружить причину ошибки будет совсем не сложно.

В случае если код сложнее, чем в нашем примере, то, чтобы получить больше информации о причине возникновения ошибки VBA, можно проверить значения используемых переменных. В редакторе VBA для этого достаточно навести указатель мыши на имя переменной, или можно открыть окно отслеживания локальных переменных (в меню редактора View > Locals Window).

Коды различных ошибок выполнения расшифрованы на сайте Microsoft Support (на английском). Наиболее часто встречающиеся ошибки VBA перечислены в этой таблице:

VBA Run time error 13 type mismatch in Excel 2010 with Datavalidation & VBA


New Member

I am absolutely new to excel VBA.

I have a requirement to create an excel to maintain status of orders (there are about 6 / 7 order statuses (2 of which are OrderStatus(no status), Enquiry and taken as samples here ) and based on each status, a specific set of actions have to be performed. I have created the excel in which there are multiple columns & rows, some of the columns have data validations either from a reference sheet or entered as list in the Data validation part and some have formula references.

What little coding I could understand, I have done that based on my teeny weeny bit of knowledge + the ideas that I got from checking on various websites. As a result, I am not sure if I have a robust code, although, I have some piece of coding to perform certain actions based on values change in certain columns.

Following are the issues that I want help with:

When inserting / deleting row / rows, get error «Type Mismatch error 13»
The same error appears while certain columns are extended down to the cells.
Same error while cut copy pasting a row
Although the run time error occurs, the action is partially completed

Earliest response would be much appreciated.

My sample excel is attached



Well-Known Member

Welcome to chandoo forum.

It’s a great piece of code you have written..

Please find attatched updated one with small modification.

try inserting rows or columns and let me know..Happy to help you.



New Member

Wow. that was quick and very helpful. Further to the already asked question,

Just want to know, would it be possible to insert the rows as per the existing data that is being copied from backend.

For example, if I select a particular value, I display and input box, get a value and based on that do some computation and once done, I insert a new line with the values as per my calculation + do some alteration in the existing values and the dropdown value is also changed.

Is it possible to do this VBA code?
I tried the following for that but was not successful n completing the code.


Well-Known Member

Yes ofcourse, you can Mr. Maatgie

Читать еще:  Vba excel целая часть числа

Please let me know if you have challenges..Happy to help you.


New Member

Hello Monty, Thanks a ton.

your earlier code worked like a charm and it solved a big problem for me.

for the next query of mine, I have posted the code that I tried but I am a novice and hence unable to check where I may be going wrong. So for now, I have commented the code where I compute.

There are few more clarifications that I wanted to ask.
—> If I manually key in a value in a cell, is it possible to work out some calculations based on the entered value and then put the result in other cells? If so how can I do it.
For example, if I have to calculate P+I , user may enter either of P, N, R, A.
Based on the input, I will need to derive at the missing value.
Could this also happen when a drop down is selected without me having to extend the formula in Excel?

—> There are 3 fields in total, one is a tax field, the other 2 are amount fields, one with Tax and other without Tax. They are mutually exclusive but users may be comfortable entering either of them. I want to know how it can be handled in VBA.

—> I want to be able to handle all formula that I typed in Excel to be running behind the scenes in VBA; is that possible and how to achieve that?

Since I am new here, I dont know if I need to have the code before someone can help me with it. For the above, I dont have a code in place as I could not write it due to my ignorance.

If you can help it would be of great help and also a good learning for me.


Well-Known Member

Am glad that i could help you..
Could you upload a sample file with questions.

Happy to help you.


New Member

I have uploaded a sample file.
—-> In this in orderstatus, if the value chosen is partfulfilled from the status procured, then I have to get the quantity that is being filled in an inputbox . After that, I need to copy the existing line and create a new line with the same values and then compute the QTY Field based on the input and update the fields.
—-> There are some formulae in my excel sheet, I would like to convert them to the backend so that the users cannot change them at any cost
—-> There are some fields that affect these formulae in succession, that is, two or three cell values together will make up the formula for another cell. I want to be able to capture the input event and the formula creation based on this input.
—-> In the excel there are 3 fields, Tax,sales price with tax and sales price without tax. At present I have given the option of entering / choosing the Tax % and entering the without tax price. However, there may be cases where the user will know only the with tax price and the tax %. this creates double work for them as they have to compute the without tax price and then paste it in this excel. I want to avoid this double work and give the option for the users to enter price in either of the columns and then be able to compute based on which one is input.
—-> Last query for now,
I tried Locking / hiding the formulae for certain fields; however, they dont take effect unless the excel sheet is protected and if I protect the sheet, then users are unable to edit / input their values where necessary. Is there a VBA workaround for this?

I know the list is long. I appreciate the fact that you are trying to help me.
And am great to have found this website. This has been the only place so far where I have got an answer so quickly for my earlier / first query. Thanks a lot again.

Let me know if any further information is required.



Well-Known Member

Sorry could not try to understand mentioned questions as running out of time,, but tried to go through the code and fixed..Check if this is what you are looking for.

Ошибка Excel VBA во время выполнения «13» Несоответствие типов

Я создал макрос для файла, и сначала он работал нормально, но сегодня я открывал и перезапускал файл и макрос сотни раз, и я всегда получаю следующую ошибку: Excel VBA Ошибка времени выполнения ‘ 13 ‘Несоответствие типов

Я ничего не изменил в макросе и не знаю, почему я получаю ошибку. Кроме того, требуется время, чтобы обновлять макрос каждый раз, когда я его запускаю (макрос должен запускать около 9000 строк).

Ошибка находится между ** **.

Как вы думаете, вы можете мне помочь? Я использую excel 2010 для Windows 7. Большое спасибо

Читать еще:  Rename file excel примеры

Вы получите несоответствие типа, если Sheets(name).Cells(4 + i, 57) содержит нечисловое значение. Вы должны проверить поля, прежде чем считать их числами, и попытаться их вычесть.

Кроме того, вы должны включить Option Strict , поэтому вам придется явно преобразовывать переменные, прежде чем пытаться выполнять операции с ними, зависящие от типа, такие как вычитание. Это поможет вам определить и устранить проблемы в будущем. К сожалению, Option Strict предназначен только для VB.NET. Тем не менее, вы должны найти лучшие практики для явных преобразований типов данных в VBA.


Если вы пытаетесь быстро исправить свой код, оберните строку ** и следующую за ней в следующем состоянии:

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

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

Еще раз спасибо!

Джастин дал вам очень хорошие советы:)

Вы также получите эту ошибку, если ячейка, в которой выполняется расчет, имеет ошибку, полученную из формулы.

Например, если ячейка A1 имеет # DIV/0! ошибка, то вы получите «Ошибка времени выполнения VBA Excel» 13 «Несоответствие типа» при выполнении этого кода

Я внес некоторые изменения в ваш код. Не могли бы вы проверить его для меня? Скопируйте код с номерами строк, поскольку я намеренно разместил их там.

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

Я продолжал программировать этим утром, и когда я открыл приложение (мой файл с подкачкой Auto_Open), я получил ошибку времени выполнения «13», я пошел в Интернет, чтобы найти ответы, я много пробовал вещей, модификаций и в какой-то момент я вспомнил, что где-то читал о данных «Ghost», которые остаются в ячейке, даже если мы ее не видим.

Мой код выполняет только передачу данных из одного файла, который я открыл ранее другому, и суммировать его. Мой код остановился на третьем SheetTab (так что он поступил правильно для 2 предыдущих SheetTab, где тот же код прошел без остановки) с сообщением о несоответствии типа. И он делает это каждый раз на том же SheetTab, когда я перезапускаю свой код.

Итак, я выбрал ячейку, где она остановилась, вручную введено 0,00 (поскольку несоответствие типа происходит из переменных суммирования, объявленных в DIM как Double) и скопировал эту ячейку во всех последующих ячейках, где возникла одна и та же проблема. Он решил проблему. Никогда не было сообщения снова. Ничего общего с моим кодом, кроме «Призрака» или данных из прошлого. Это похоже на то, что если вы хотите использовать Control + End и Excel, вы получите один раз, когда у вас есть данные, и удалите его. Чтобы «Сохранить» и закрыть файл, когда вы хотите использовать Control + End, убедитесь, что Excel указал вам на правую ячейку.

Разбор ошибки Type Mismatch Error

Объяснение Type Mismatch Error

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.

В целом, VBA часто прощает, когда вы назначаете неправильный тип значения переменной, например:

Тем не менее, есть некоторые преобразования, которые VBA не может сделать:

Простой способ объяснить Type Mismatch Error VBA состоит в том, что элементы по обе стороны от равных оценивают другой тип.

При возникновении Type Mismatch Error это часто не так просто, как в этих примерах. В этих более сложных случаях мы можем использовать средства отладки, чтобы помочь нам устранить ошибку.

Использование отладчика

В VBA есть несколько очень мощных инструментов для поиска ошибок. Инструменты отладки позволяют приостановить выполнение кода и проверить значения в текущих переменных.

Вы можете использовать следующие шаги, чтобы помочь вам устранить любую Type Mismatch Error VBA.

  1. Запустите код, чтобы появилась ошибка.
  2. Нажмите Debug в диалоговом окне ошибки. Это выделит строку с ошибкой.
  3. Выберите View-> Watch из меню, если окно просмотра не видно.
  4. Выделите переменную слева от equals и перетащите ее в окно Watch.
  5. Выделите все справа от равных и перетащите его в окно Watch.
  6. Проверьте значения и типы каждого.
  7. Вы можете сузить ошибку, изучив отдельные части правой стороны.

Следующее видео показывает, как это сделать.

На скриншоте ниже вы можете увидеть типы в окне просмотра.

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

В следующих разделах показаны различные способы возникновения Type Mismatch Error VBA.

Читать еще:  Что такое olap куб в excel

Присвоение строки числу

Как мы уже видели, попытка поместить текст в числовую переменную может привести к Type Mismatch Error VBA.

Ниже приведены некоторые примеры, которые могут вызвать ошибку:

Недействительная дата

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

В следующих примерах кода показаны все допустимые способы назначения даты, за которыми следуют случаи, которые могут привести к Type Mismatch Error VBA.

Ошибка ячейки

Тонкая причина Type Mismatch Error VBA — это когда вы читаете из ячейки с ошибкой, например:

Если вы попытаетесь прочитать из этой ячейки, вы получите Type Mismatch Error.

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

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

Вы можете использовать следующую функцию, чтобы сделать это:

Ниже приведен пример использования этого кода.

Неверные данные ячейки

Как мы видели, размещение неверного типа значения в переменной вызывает Type Mismatch Error VBA. Очень распространенная причина — это когда значение в ячейке имеет неправильный тип.

Пользователь может поместить текст, такой как «Нет», в числовое поле, не осознавая, что это приведет к Type Mismatch Error в коде.

Если мы прочитаем эти данные в числовую переменную, то получим
Type Mismatch Error VBA.

Вы можете использовать следующую функцию, чтобы проверить наличие нечисловых ячеек, прежде чем использовать данные.

Вы можете использовать это так:

Имя модуля

Если вы используете имя модуля в своем коде, это может привести к
Type Mismatch Error VBA. Однако в этом случае причина может быть не очевидной.

Например, допустим, у вас есть модуль с именем «Module1». Выполнение следующего кода приведет к о
Type Mismatch Error VBA.

Различные типы объектов

До сих пор мы рассматривали в основном переменные. Мы обычно называем переменные основными типами данных.

Они используются для хранения одного значения в памяти.

В VBA у нас также есть объекты, которые являются более сложными. Примерами являются объекты Workbook, Worksheet, Range и Chart.

Если мы назначаем один из этих типов, мы должны убедиться, что назначаемый элемент является объектом того же типа. Например:

Коллекция Sheets

В VBA объект рабочей книги имеет две коллекции — Sheets и Worksheets. Есть очень тонкая разница.

  1. Worksheets — сборник рабочих листов в Workbook
  2. Sheets — сборник рабочих листов и диаграммных листов в Workbook

Лист диаграммы создается, когда вы перемещаете диаграмму на собственный лист, щелкая правой кнопкой мыши на диаграмме и выбирая «Переместить».

Если вы читаете коллекцию Sheets с помощью переменной Worksheet, она будет работать нормально, если у вас нет рабочей таблицы.

Если у вас есть лист диаграммы, вы получите
Type Mismatch Error VBA.

В следующем коде Type Mismatch Error появится в строке «Next sh», если рабочая книга содержит лист с диаграммой.

Массивы и диапазоны

Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных.

Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив.

Если вы попытаетесь использовать его как массив, вы получите
Type Mismatch Error .

В этом сценарии вы можете использовать функцию IsArray, чтобы проверить, является ли arr массивом.


На этом мы завершаем статью об Type Mismatch Error VBA. Если у вас есть ошибка несоответствия, которая не раскрыта, пожалуйста, дайте мне знать в комментариях.

Топ Альбомы


Steve Laureus Back Workout

Nick Saley Bengal Dj Pantelis Remix

Urie Colin Jay Remix

Heart Barracuda Cover By Sershen Zaritskaya Feat Kim And Shturmak

Ты Мне Постреляй Между Нами

Вещи К1Ант Декъал Во

Песня С Сериала Клятва

Мисс Николь Истеричка

Шерали Жураев Эшигингдан Утарман Бир Кун

Женский Голос Для Сна

Rave Mode Cmh Минус

Расскажи Мне Кто Твой Знак И Как Можно Скорей

Сел В Девятку Стал Бандитом

Иса Эсамбаев Нашид Я Аллах

Гуьйренан Доьлху Дог 1 Шийла Хьо Суна Воьг1На Ца Хилла

Сагынып Сени Кундо Атынды Кайталадым Текст


Fitnation Flex Core 8 Exercise System With Dvd Meal Exercise Plan On Qvc

Турнир На Призы Баргузинского Дацана Хилгана 2013 Торжественное Открытие

Cat Walk Play The Guitar Dog Clothes

Married With Children Oasis Cover

Saintsgrave Lucy Prod Ronsupreme

Provincial Jail Iska Story October 12 2019 Bombo Radyo Drama

Dubstep Gaming Music 2019 Best Dubstep Drum Bass Drumstep Best Of Edm

Жызнь Ворам Смерть Мусорам Стэндоф

Ini Ang Kabuhi Rosale Story October 3 2019 Bombo Radyo

Келинларга Кизларга Унта Насихат

Romane Gila 2016 Savanna

Аниме Клип Гори

Winca S150 Android 2 3 Os Grand Auto Kz

Мошинбозори Душанбе 17 06 2019 Нархи Мошинхои Боркаш Портер Хундай Мерседес Старекс Танген

Don T Talk Meme Gacha Life Especial 50K 1

Zamanbap Алгалай Бер

Хай Мохи Олам Сузи Ман Чон Чон Аз Мо Но Чидидайи

Toyota Corolla Fielder Hybrid Wxb 2014 Знакомство И Обзор

Ссылка на основную публикацию