На чтение 8 мин. Просмотров 24.3k.
Содержание
- Объяснение Type Mismatch Error
- Использование отладчика
- Присвоение строки числу
- Недействительная дата
- Ошибка ячейки
- Неверные данные ячейки
- Имя модуля
- Различные типы объектов
- Коллекция Sheets
- Массивы и диапазоны
- Заключение
Объяснение Type Mismatch Error
Type Mismatch Error VBA возникает при попытке назначить значение между двумя различными типами переменных.
Ошибка отображается как:
run-time error 13 – Type mismatch
Например, если вы пытаетесь поместить текст в целочисленную переменную Long или пытаетесь поместить число в переменную Date.
Давайте посмотрим на конкретный пример. Представьте, что у нас есть переменная с именем Total, которая является длинным целым числом Long.
Если мы попытаемся поместить текст в переменную, мы получим Type Mismatch Error VBA (т.е. VBA Error 13).
Sub TypeMismatchStroka() ' Объявите переменную типа long integer Dim total As Long ' Назначение строки приведет к Type Mismatch Error total = "Иван" End Sub
Давайте посмотрим на другой пример. На этот раз у нас есть переменная ReportDate типа Date.
Если мы попытаемся поместить в эту переменную не дату, мы получим Type Mismatch Error VBA.
Sub TypeMismatchData() ' Объявите переменную типа Date Dim ReportDate As Date ' Назначение числа вызывает Type Mismatch Error ReportDate = "21-22" End Sub
В целом, VBA часто прощает, когда вы назначаете неправильный тип значения переменной, например:
Dim x As Long ' VBA преобразует в целое число 100 x = 99.66 ' VBA преобразует в целое число 66 x = "66"
Тем не менее, есть некоторые преобразования, которые VBA не может сделать:
Dim x As Long ' Type Mismatch Error x = "66a"
Простой способ объяснить Type Mismatch Error VBA состоит в том, что элементы по обе стороны от равных оценивают другой тип.
При возникновении Type Mismatch Error это часто не так просто, как в этих примерах. В этих более сложных случаях мы можем использовать средства отладки, чтобы помочь нам устранить ошибку.
Использование отладчика
В VBA есть несколько очень мощных инструментов для поиска ошибок. Инструменты отладки позволяют приостановить выполнение кода и проверить значения в текущих переменных.
Вы можете использовать следующие шаги, чтобы помочь вам устранить любую Type Mismatch Error VBA.
- Запустите код, чтобы появилась ошибка.
- Нажмите Debug в диалоговом окне ошибки. Это выделит строку с ошибкой.
- Выберите View-> Watch из меню, если окно просмотра не видно.
- Выделите переменную слева от equals и перетащите ее в окно Watch.
- Выделите все справа от равных и перетащите его в окно Watch.
- Проверьте значения и типы каждого.
- Вы можете сузить ошибку, изучив отдельные части правой стороны.
Следующее видео показывает, как это сделать.
На скриншоте ниже вы можете увидеть типы в окне просмотра.
Используя окно просмотра, вы можете проверить различные части строки кода с ошибкой. Затем вы можете легко увидеть, что это за типы переменных.
В следующих разделах показаны различные способы возникновения Type Mismatch Error VBA.
Присвоение строки числу
Как мы уже видели, попытка поместить текст в числовую переменную может привести к Type Mismatch Error VBA.
Ниже приведены некоторые примеры, которые могут вызвать ошибку:
Sub TextErrors() ' Long - длинное целое число Dim l As Long l = "a" ' Double - десятичное число Dim d As Double d = "a" ' Валюта - 4-х значное число Dim c As Currency c = "a" Dim d As Double ' Несоответствие типов, если ячейка содержит текст d = Range("A1").Value End Sub
Недействительная дата
VBA очень гибок в назначении даты переменной даты. Если вы поставите месяц в неправильном порядке или пропустите день, VBA все равно сделает все возможное, чтобы удовлетворить вас.
В следующих примерах кода показаны все допустимые способы назначения даты, за которыми следуют случаи, которые могут привести к Type Mismatch Error VBA.
Sub DateMismatch() Dim curDate As Date ' VBA сделает все возможное для вас ' - Все они действительны curDate = "12/12/2016" curDate = "12-12-2016" curDate = #12/12/2016# curDate = "11/Aug/2016" curDate = "11/Augu/2016" curDate = "11/Augus/2016" curDate = "11/August/2016" curDate = "19/11/2016" curDate = "11/19/2016" curDate = "1/1" curDate = "1/2016" ' Type Mismatch Error curDate = "19/19/2016" curDate = "19/Au/2016" curDate = "19/Augusta/2016" curDate = "August" curDate = "Какой-то случайный текст" End Sub
Ошибка ячейки
Тонкая причина Type Mismatch Error VBA — это когда вы читаете из ячейки с ошибкой, например:
Если вы попытаетесь прочитать из этой ячейки, вы получите Type Mismatch Error.
Dim sText As String ' Type Mismatch Error, если ячейка содержит ошибку sText = Sheet1.Range("A1").Value
Чтобы устранить эту ошибку, вы можете проверить ячейку с помощью IsError следующим образом.
Dim sText As String If IsError(Sheet1.Range("A1").Value) = False Then sText = Sheet1.Range("A1").Value End If
Однако проверка всех ячеек на наличие ошибок невозможна и сделает ваш код громоздким. Лучший способ — сначала проверить лист на наличие ошибок, а если ошибки найдены, сообщить об этом пользователю.
Вы можете использовать следующую функцию, чтобы сделать это:
Function CheckForErrors(rg As Range) As Long On Error Resume Next CheckForErrors = rg.SpecialCells(xlCellTypeFormulas, xlErrors).Count End Function
Ниже приведен пример использования этого кода.
Sub DoStuff() If CheckForErrors(Sheet1.Range("A1:Z1000")) > 0 Then MsgBox "На листе есть ошибки. Пожалуйста, исправьте и запустите макрос снова." Exit Sub End If ' Продолжайте здесь, если нет ошибок End Sub
Неверные данные ячейки
Как мы видели, размещение неверного типа значения в переменной вызывает Type Mismatch Error VBA. Очень распространенная причина — это когда значение в ячейке имеет неправильный тип.
Пользователь может поместить текст, такой как «Нет», в числовое поле, не осознавая, что это приведет к Type Mismatch Error в коде.
Если мы прочитаем эти данные в числовую переменную, то получим
Type Mismatch Error VBA.
Dim rg As Range Set rg = Sheet1.Range("B2:B5") Dim cell As Range, Amount As Long For Each cell In rg ' Ошибка при достижении ячейки с текстом «Нет» Amount = cell.Value Next rg
Вы можете использовать следующую функцию, чтобы проверить наличие нечисловых ячеек, прежде чем использовать данные.
Function CheckForTextCells(rg As Range) As Long ' Подсчет числовых ячеек If rg.Count = rg.SpecialCells(xlCellTypeConstants, xlNumbers).Count Then CheckForTextCells = True End If End Function
Вы можете использовать это так:
Sub IspolzovanieCells() If CheckForTextCells(Sheet1.Range("B2:B6").Value) = False Then MsgBox "Одна из ячеек не числовая. Пожалуйста, исправьте перед запуском макроса" Exit Sub End If ' Продолжайте здесь, если нет ошибок End Sub
Имя модуля
Если вы используете имя модуля в своем коде, это может привести к
Type Mismatch Error VBA. Однако в этом случае причина может быть не очевидной.
Например, допустим, у вас есть модуль с именем «Module1». Выполнение следующего кода приведет к о
Type Mismatch Error VBA.
Sub IspolzovanieImeniModulya() ' Type Mismatch Error Debug.Print module1 End Sub
Различные типы объектов
До сих пор мы рассматривали в основном переменные. Мы обычно называем переменные основными типами данных.
Они используются для хранения одного значения в памяти.
В VBA у нас также есть объекты, которые являются более сложными. Примерами являются объекты Workbook, Worksheet, Range и Chart.
Если мы назначаем один из этих типов, мы должны убедиться, что назначаемый элемент является объектом того же типа. Например:
Sub IspolzovanieWorksheet() Dim wk As Worksheet ' действительный Set wk = ThisWorkbook.Worksheets(1) ' Type Mismatch Error ' Левая сторона - это worksheet - правая сторона - это workbook Set wk = Workbooks(1) End Sub
Коллекция Sheets
В VBA объект рабочей книги имеет две коллекции — Sheets и Worksheets. Есть очень тонкая разница.
- Worksheets — сборник рабочих листов в Workbook
- Sheets — сборник рабочих листов и диаграммных листов в Workbook
Лист диаграммы создается, когда вы перемещаете диаграмму на собственный лист, щелкая правой кнопкой мыши на диаграмме и выбирая «Переместить».
Если вы читаете коллекцию Sheets с помощью переменной Worksheet, она будет работать нормально, если у вас нет рабочей таблицы.
Если у вас есть лист диаграммы, вы получите
Type Mismatch Error VBA.
В следующем коде Type Mismatch Error появится в строке «Next sh», если рабочая книга содержит лист с диаграммой.
Sub SheetsError() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets Debug.Print sh.Name Next sh End Sub
Массивы и диапазоны
Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных.
Sub IspolzovanieMassiva() Dim arr As Variant ' Присвойте диапазон массиву arr = Sheet1.Range("A1:B2").Value ' Выведите значение в строку 1, столбец 1 Debug.Print arr(1, 1) End Sub
Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив.
Если вы попытаетесь использовать его как массив, вы получите
Type Mismatch Error .
Sub OshibkaIspolzovanieMassiva() Dim arr As Variant ' Присвойте диапазон массиву arr = Sheet1.Range("A1").Value ' Здесь будет происходить Type Mismatch Error Debug.Print arr(1, 1) End Sub
В этом сценарии вы можете использовать функцию IsArray, чтобы проверить, является ли arr массивом.
Sub IspolzovanieMassivaIf() Dim arr As Variant ' Присвойте диапазон массиву arr = Sheet1.Range("A1").Value ' Здесь будет происходить Type Mismatch Error If IsArray(arr) Then Debug.Print arr(1, 1) Else Debug.Print arr End If End Sub
Заключение
На этом мы завершаем статью об Type Mismatch Error VBA. Если у вас есть ошибка несоответствия, которая не раскрыта, пожалуйста, дайте мне знать в комментариях.
Summary:
This post is written with the main prospective of providing you all with ample amount of detail regarding Excel runtime error 13. So go through this complete guide to know how to fix runtime error 13 type mismatch.
In our earlier blogs, we have described the commonly found Excel file runtime error 1004, 32809 and 57121. Today in this article we are describing another Excel file runtime error 13.
Run-time error ‘13’: Type Mismatch usually occurs meanwhile the code is executed in Excel. As a result of this, you may get terminated every time from all the ongoing activities on your Excel application.
This run time error 13 also put an adverse effect on XLS/XLSX files. So before this Excel Type Mismatch error damages your Excel files, fix it out immediately with the given fixes.
Apart from that, there are many reasons behind getting the Excel file runtime error 13 when the Excel file gets corrupted this starts showing runtime error.
To recover lost Excel data, we recommend this tool:
This software will prevent Excel workbook data such as BI data, financial reports & other analytical information from corruption and data loss. With this software you can rebuild corrupt Excel files and restore every single visual representation & dataset to its original, intact state in 3 easy steps:
- Download Excel File Repair Tool rated Excellent by Softpedia, Softonic & CNET.
- Select the corrupt Excel file (XLS, XLSX) & click Repair to initiate the repair process.
- Preview the repaired files and click Save File to save the files at desired location.
Error Detail:
Error code: Run-time error ‘13’
Declaration: Excel Type Mismatch error
Here is the screenshot of this error:
Why Am I Getting Excel Runtime Error 13 Type Mismatch?
Following are some reasons for run time error 13 type mismatch:
- When multiple methods or files require to starts a program that uses Visual Basic (VB) environment
- Runtime error 13 often occurs when mismatches occur within the software applications which you require to use.
- Due to virus and malware infection as this corrupts the Windows system files or Excel-related files.
- When you tap on the function or macro present on the menu which is created by another Macro then also you will receive the same run time error 13.
- The runtime error commonly occurs due to the conflict between the software and the operating system.
- Due to the corrupt or incomplete installation of Microsoft Excel software.
- The Run-time Error 13 appears when the users try to run VBA code that includes data types that are not matched correctly. Thus it starts displaying Runtime error 13 type mismatch.
- Due to conflict with other programs while opening the VBA Excel file.
Well, these are some of the common reasons for getting the Excel file runtime error 13.
How To Fix Excel Runtime Error 13 Type Mismatch?
Learn how to Fix Excel Runtime Error 13 Type Mismatch.
1: Using Open and Repair Utility
2. Uninstall The Program
3. Scan For Virus/Malware
4. Recover Missing Macros
5. Run The ‘Regedit’ Command In CMD
6: Create New Disk Partition And Reinstall Windows
7: Use MS Excel Repair Tool
1: Using Open and Repair Utility
There is a ‘File Recovery’ mode within Excel which gets activated automatically when any corruption issue hits your worksheet or workbook.
But in some cases, Excel won’t offer this ‘File Recovery’ mode and at that time you need to use Excel inbuilt tool ‘Open and Repair’.
Using this inbuilt utility tool you can recover corrupted/damaged Excel files. Try the following steps to fix Visual Basic runtime error 13 type mismatch in Excel.
Here follow the steps to do so:
- In the File menu> click “Open”
- And select corrupt Excel file > from the drop-down list of open tab > select “Open and Repair”
- Lastly, click on the “Repair” button.
However, it is found that the inbuilt repair utility fails to repair the severely damaged Excel file.
2. Uninstall The Program
It is found some application and software causes the runtime error.
So, to fix the Excel file error, simply uninstall the problematic apps and programs.
- First, go to the Task Manager and stop the running programs.
- Then in the start menu > select Control Panel.
- In the Control Panel > choose Add or Remove Program.
- Here, you will get the list of installed programs on your PC.
- Then from the list select Microsoft Work.
- Click on uninstall to remove it from the PC.
Hope doing this will fix the Excel file Runtime error 13, but if not then follow the third solution.
3. Scan For Virus/Malware
Virus intrusion is quite a big problem for all Windows users, as it causes several issues for PC and Excel files.
This can be the great reason behind this Runtime 13 error. As viruses damage the core program file of MS Office which is important for the execution of Excel application.
This makes the file unreadable and starts generating the following error message: Visual Basic runtime error 13 type mismatch in Excel
To avoid this error, you need to remove all virus infections from your system using the reliable anti-virus removal tool.
Well, it is found that if your Windows operating system in having viruses and malware then this might corrupt Excel file and as a result, you start facing the runtime file error 13.
So, it is recommended to scan your system with the best antivirus program and make your system malware-free. Ultimately this will also fix runtime error 13.
4. Recover Missing Macros
Well, as it is found that users are getting the runtime error 13 due to the missing macros, So try to recover the missing Macros.
Here follow the steps to do so:
- Open the new Excel file > and set the calculation mode to Manual
- Now from the Tools menu select Macro > select Security > High option.
- If you are using Excel 2007, then click the Office button > Excel Options > Trust Center in the left panel
- And click on Trust Center Settings button > Macro Settings > Disable All Macros without Notification in the Macro Settings section > click OK twice.
- Now, open the corrupted workbook. If Excel opens the workbook a message appears that the macros are disabled.
- But if in case Excel shut down, then this method is not workable.
- Next press [Alt] + [F11] for opening the Visual Basic Editor (VBE).
- Make use of the Project Explorer (press [Ctrl]+R) > right-click a module > Export File.
- Type name and folder for the module > and repeat this step as many times as required to export the entire module.
- Finally, close the VBE and exit.
Now open the new blank workbook (or the recently constructed workbook that contains recovered data from the corrupted workbook) and import the modules.
5. Run The ‘Regedit’ Command In CMD
This Excel error 13 can also be fixed by running the ‘Regedit’ command in the command prompt.
- In the search menu of your system’s start menu type run command.
- Now in the opened run dialog box type “regedit” command. After that hit the OK
- This will open the registry editor. On its right side there is a ‘LoadApplnit_DLLs value.’ option, just make double-tap to it.
- Change the value from 1 to ‘0‘and then press the OK.
- Now take exit from this opened registry editor.
- After completing all this, restart your PC.
Making the above changes will definitely resolve the Runtime Error 13 Type Mismatch.
6: Create New Disk Partition And Reinstall Windows
If even after trying all the above-given fixes Excel type mismatched error still persists. In that case, the last option left here is to create the new partition and reinstall Windows.
- In your PC insert windows DVD/CD and after that begin the installation procedure.
- For installation, choose the language preference.
- Tap to the option” I accept” and then hit the NEXT
- Select the custom advance option and then choose the Disk O partition 1
- Now hit the delete> OK button.
- The same thing you have to repeat after selecting the Disk O partition 2.
- Now hit the delete> OK button to delete this too.
- After completing the deletion procedure, tap to create a new partition.
- Assign the disk size and tap to the Apply.
- Now choose the Disk 0 partition 2 and then hit the Formatting.
- After complete formatting, hit the NEXT button to continue.
Note: before attempting this procedure don’t forget to keep a complete backup of all your data.
However, if you are still facing the Excel Runtime file error 13 then make use of the third party automatic repair tool.
7: Use MS Excel Repair Tool
It is recommended to make use of the MS Excel Repair Tool. This is the best tool to repair all sort of issues, corruption, errors in Excel workbooks. This tool allows to easily restore all corrupt excel file including the charts, worksheet properties cell comments, and other important data.
* Free version of the product only previews recoverable data.
This is a unique tool to repair multiple excel files at one repair cycle and recovers the entire data in a preferred location. It is easy to use and compatible with both Windows as well as Mac operating systems.
Steps to Utilize MS Excel Repair Tool:
Final Verdict:
After reading the complete post you must have got enough idea on Visual Basic runtime error 13 type mismatch in Excel. Following the listed given fixes you are able to fix the Excel runtime file error 13.
I tried my best to provide ample information about the runtime error and possible workarounds that will help you to fix the Excel file error.
So, just make use of the solutions given and check whether the Excel error is fixed or not.
In case you have any additional workarounds that proved successful or questions concerning the ones presented, do tell us in the comments.
Hope you find this post informative and helpful.
Thanks for reading…!
Priyanka is an entrepreneur & content marketing expert. She writes tech blogs and has expertise in MS Office, Excel, and other tech subjects. Her distinctive art of presenting tech information in the easy-to-understand language is very impressive. When not writing, she loves unplanned travels.
Contents
- 1 VBA Type Mismatch Explained
- 2 VBA Type Mismatch YouTube Video
- 3 How to Locate the Type Mismatch Error
- 4 Assigning a string to a numeric
- 5 Invalid date
- 6 Cell Error
- 7 Invalid Cell Data
- 8 Module Name
- 9 Different Object Types
- 10 Sheets Collection
- 11 Array and Range
- 12 Conclusion
- 13 What’s Next?
VBA Type Mismatch Explained
A VBA Type Mismatch Error occurs when you try to assign a value between two different variable types.
The error appears as “run-time error 13 – Type mismatch”.
For example, if you try to place text in a Long integer variable or you try to place text in a Date variable.
Let’s look at a concrete example. Imagine we have a variable called Total which is a Long integer.
If we try to place text in the variable we will get the VBA Type mismatch error(i.e. VBA Error 13).
' https://excelmacromastery.com/ Sub TypeMismatchString() ' Declare a variable of type long integer Dim total As Long ' Assigning a string will cause a type mismatch error total = "John" End Sub
Let’s look at another example. This time we have a variable ReportDate of type Date.
If we try to place a non-date in this variable we will get a VBA Type mismatch error
' https://excelmacromastery.com/ Sub TypeMismatchDate() ' Declare a variable of type Date Dim ReportDate As Date ' Assigning a number causes a type mismatch error ReportDate = "21-22" End Sub
In general, VBA is very forgiving when you assign the wrong value type to a variable e.g.
Dim x As Long ' VBA will convert to integer 100 x = 99.66 ' VBA will convert to integer 66 x = "66"
However, there are some conversions that VBA cannot do
Dim x As Long ' Type mismatch error x = "66a"
A simple way to explain a VBA Type mismatch error, is that the items on either side of the equals evaluate to a different type.
When a Type mismatch error occurs it is often not as simple as these examples. For these more complex cases we can use the Debugging tools to help us resolve the error.
VBA Type Mismatch YouTube Video
Don’t forget to check out my YouTube video on the Type Mismatch Error here:
How to Locate the Type Mismatch Error
The most important thing to do when solving the Type Mismatch error is to, first of all, locate the line with the error and then locate the part of the line that is causing the error.
If your code has Error Handling then it may not be obvious which line has the error.
If the line of code is complex then it may not be obvious which part is causing the error.
The following video will show you how to find the exact piece of code that causes a VBA Error in under a minute:
The following sections show the different ways that the VBA Type Mismatch error can occur.
Assigning a string to a numeric
As we have seen, trying to place text in a numeric variable can lead to the VBA Type mismatch error.
Below are some examples that will cause the error
' https://excelmacromastery.com/ Sub TextErrors() ' Long is a long integer Dim l As Long l = "a" ' Double is a decimal number Dim d As Double d = "a" ' Currency is a 4 decimal place number Dim c As Currency c = "a" Dim d As Double ' Type mismatch if the cell contains text d = Range("A1").Value End Sub
Invalid date
VBA is very flexible when it comes to assigning a date to a date variable. If you put the month in the wrong order or leave out the day, VBA will still do it’s best to accommodate you.
The following code examples show all the valid ways to assign a date followed by the cases that will cause a VBA Type mismatch error.
' https://excelmacromastery.com/ Sub DateMismatch() Dim curDate As Date ' VBA will do it's best for you ' - These are all valid curDate = "12/12/2016" curDate = "12-12-2016" curDate = #12/12/2016# curDate = "11/Aug/2016" curDate = "11/Augu/2016" curDate = "11/Augus/2016" curDate = "11/August/2016" curDate = "19/11/2016" curDate = "11/19/2016" curDate = "1/1" curDate = "1/2016" ' Type Mismatch curDate = "19/19/2016" curDate = "19/Au/2016" curDate = "19/Augusta/2016" curDate = "August" curDate = "Some Random Text" End Sub
Cell Error
A subtle cause of the VBA Type Mismatch error is when you read from a cell that has an error e.g.
If you try to read from this cell you will get a type mismatch error
Dim sText As String ' Type Mismatch if the cell contains an error sText = Sheet1.Range("A1").Value
To resolve this error you can check the cell using IsError as follows.
Dim sText As String If IsError(Sheet1.Range("A1").Value) = False Then sText = Sheet1.Range("A1").Value End If
However, checking all the cells for errors is not feasible and would make your code unwieldy. A better way is to check the sheet for errors first and if errors are found then inform the user.
You can use the following function to do this
Function CheckForErrors(rg As Range) As Long On Error Resume Next CheckForErrors = rg.SpecialCells(xlCellTypeFormulas, xlErrors).Count End Function
The following is an example of using this code
' https://excelmacromastery.com/ Sub DoStuff() If CheckForErrors(Sheet1.Range("A1:Z1000")) > 0 Then MsgBox "There are errors on the worksheet. Please fix and run macro again." Exit Sub End If ' Continue here if no error End Sub
Invalid Cell Data
As we saw, placing an incorrect value type in a variable causes the ‘VBA Type Mismatch’ error. A very common cause is when the value in a cell is not of the correct type.
A user could place text like ‘None’ in a number field not realizing that this will cause a Type mismatch error in the code.
If we read this data into a number variable then we will get a ‘VBA Type Mismatch’ error error.
Dim rg As Range Set rg = Sheet1.Range("B2:B5") Dim cell As Range, Amount As Long For Each cell In rg ' Error when reaches cell with 'None' text Amount = cell.Value Next rg
You can use the following function to check for non numeric cells before you use the data
Function CheckForTextCells(rg As Range) As Long ' Count numeric cells If rg.Count = rg.SpecialCells(xlCellTypeConstants, xlNumbers).Count Then CheckForTextCells = True End If End Function
You can use it like this
' https://excelmacromastery.com/ Sub UseCells() If CheckForTextCells(Sheet1.Range("B2:B6").Value) = False Then MsgBox "One of the cells is not numeric. Please fix before running macro" Exit Sub End If ' Continue here if no error End Sub
Module Name
If you use the Module name in your code this can cause the VBA Type mismatch to occur. However in this case the cause may not be obvious.
For example let’s say you have a Module called ‘Module1’. Running the following code would result in the VBA Type mismatch error.
' https://excelmacromastery.com/ Sub UseModuleName() ' Type Mismatch Debug.Print module1 End Sub
Different Object Types
So far we have been looking mainly at variables. We normally refer to variables as basic data types.
They are used to store a single value in memory.
In VBA we also have objects which are more complex. Examples are the Workbook, Worksheet, Range and Chart objects.
If we are assigning one of these types we must ensure the item being assigned is the same kind of object. For Example
' https://excelmacromastery.com/ Sub UsingWorksheet() Dim wk As Worksheet ' Valid Set wk = ThisWorkbook.Worksheets(1) ' Type Mismatch error ' Left side is a worksheet - right side is a workbook Set wk = Workbooks(1) End Sub
Sheets Collection
In VBA, the workbook object has two collections – Sheets and Worksheets. There is a very subtle difference
- Worksheets – the collection of worksheets in the Workbook
- Sheets – the collection of worksheets and chart sheets in the Workbook
A chart sheet is created when you move a chart to it’s own sheet by right-clicking on the chart and selecting Move.
If you read the Sheets collection using a Worksheet variable it will work fine if you don’t have a chart sheet in your workbook.
If you do have a chart sheet then you will get the VBA Type mismatch error.
In the following code, a Type mismatch error will appear on the Next sh line if the workbook contains a chart sheet.
' https://excelmacromastery.com/ Sub SheetsError() Dim sh As Worksheet For Each sh In ThisWorkbook.Sheets Debug.Print sh.Name Next sh End Sub
Array and Range
You can assign a range to an array and vice versa. In fact this is a very fast way of reading through data.
' https://excelmacromastery.com/ Sub UseArray() Dim arr As Variant ' Assign the range to an array arr = Sheet1.Range("A1:B2").Value ' Print the value a row 1, column 1 Debug.Print arr(1, 1) End Sub
The problem occurs if your range has only one cell. In this case, VBA does not convert arr to an array.
If you try to use it as an array you will get the Type mismatch error
' https://excelmacromastery.com/ Sub UseArrayError() Dim arr As Variant ' Assign the range to an array arr = Sheet1.Range("A1").Value ' Type mismatch will occur here Debug.Print arr(1, 1) End Sub
In this scenario, you can use the IsArray function to check if arr is an array
' https://excelmacromastery.com/ Sub UseArrayIf() Dim arr As Variant ' Assign the range to an array arr = Sheet1.Range("A1").Value ' Type mismatch will occur here If IsArray(arr) Then Debug.Print arr(1, 1) Else Debug.Print arr End If End Sub
Conclusion
This concludes the post on the VBA Type mismatch error. If you have a mismatch error that isn’t covered then please let me know in the comments.
What’s Next?
Free VBA Tutorial If you are new to VBA or you want to sharpen your existing VBA skills then why not try out the The Ultimate VBA Tutorial.
Related Training: Get full access to the Excel VBA training webinars and all the tutorials.
(NOTE: Planning to build or manage a VBA Application? Learn how to build 10 Excel VBA applications from scratch.)
Содержание
- Несоответствие типов (ошибка 13)
- Поддержка и обратная связь
- Как исправить ошибку во время выполнения 13
- Обзор «Type mismatch»
- Почему происходит ошибка времени выполнения 13?
- Типичные ошибки Type mismatch
- Создатели Type mismatch Трудности
- Разбор ошибки Type Mismatch Error
- Объяснение Type Mismatch Error
- Использование отладчика
- Присвоение строки числу
- Недействительная дата
- Ошибка ячейки
- Неверные данные ячейки
- Имя модуля
- Различные типы объектов
- Коллекция Sheets
- Массивы и диапазоны
- Заключение
Несоответствие типов (ошибка 13)
Visual Basic может преобразовать и привести большое число значений для присвоений типа данных, которые не были возможны в предыдущих версиях.
Тем не менее, эта ошибка может по-прежнему повторяться и имеет следующие причины и решения:
- Причина:Переменная или свойство имеют неверный тип. Например, переменная целого типа, не может принимать строковые значения, которые не распознаются как целые числа.
Решение: Попробуйте выполнять задания только между совместимыми типами данных. Например, значение типа Integer всегда можно присвоить типу Long, значение Single — типу Double, а любой тип (за исключением пользовательского) — типу Variant.
- Причина: В процедуру, требующую отдельное свойство или значение, передан объект.
Решение: Передайте отдельное свойство или вызовите метод, соответствующий объекту.
Причина: Используется имя модуля или проекта, где требуется выражение, например:
Решение: Укажите выражение, которое будет отображаться.
Причина: Попытка использовать традиционный механизм обработки ошибок Basic со значениями Variant с подтипом Error (10, vbError), например:
Решение: Чтобы воссоздать ошибку, необходимо сопоставить ее с пользовательской или внутренней ошибкой Visual Basic, после чего снова создать ее.
Причина: Значение CVErr не может быть преобразовано в тип Date. Например:
Решение: Используйте оператор Select Case или аналогичную конструкцию, чтобы сопоставить возвращаемое значение CVErr с соответствующим значением.
- Причина: Во время выполнения эта ошибка указывает на то, что переменная Variant, используемая в выражении, имеет неверный подтип, либо переменная Variant, содержащая массив, используется в операторе Print #.
Решение: Для печати массивов используйте цикл в котором каждый элемент отображается отдельно.
Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Как исправить ошибку во время выполнения 13
Номер ошибки: | Ошибка во время выполнения 13 | |
Название ошибки: | Type mismatch | |
Описание ошибки: | Visual Basic is able to convert and coerce many values to accomplish data type assignments that weren’t possible in earlier versions. | |
Разработчик: | Microsoft Corporation | |
Программное обеспечение: | Windows Operating System | |
Относится к: | Windows XP, Vista, 7, 8, 10, 11 |
Обзор «Type mismatch»
«Type mismatch» часто называется ошибкой во время выполнения (ошибка). Когда дело доходит до Windows Operating System, инженеры программного обеспечения используют арсенал инструментов, чтобы попытаться сорвать эти ошибки как можно лучше. Тем не менее, возможно, что иногда ошибки, такие как ошибка 13, не устранены, даже на этом этапе.
Ошибка 13, рассматриваемая как «Visual Basic is able to convert and coerce many values to accomplish data type assignments that weren’t possible in earlier versions.», может возникнуть пользователями Windows Operating System в результате нормального использования программы. Когда это происходит, конечные пользователи программного обеспечения могут сообщить Microsoft Corporation о существовании ошибки 13 ошибок. Команда программирования может использовать эту информацию для поиска и устранения проблемы (разработка обновления). Чтобы исправить любые документированные ошибки (например, ошибку 13) в системе, разработчик может использовать комплект обновления Windows Operating System.
Почему происходит ошибка времени выполнения 13?
Сбой устройства или Windows Operating System обычно может проявляться с «Type mismatch» в качестве проблемы во время выполнения. Проанализируем некоторые из наиболее распространенных причин ошибок ошибки 13 во время выполнения:
Ошибка 13 Crash — Номер ошибки вызовет блокировка системы компьютера, препятствуя использованию программы. Это возникает, когда Windows Operating System не реагирует на ввод должным образом или не знает, какой вывод требуется взамен.
Утечка памяти «Type mismatch» — последствия утечки памяти Windows Operating System связаны с неисправной операционной системой. Повреждение памяти и другие потенциальные ошибки в коде могут произойти, когда память обрабатывается неправильно.
Ошибка 13 Logic Error — Логические ошибки проявляются, когда пользователь вводит правильные данные, но устройство дает неверный результат. Виновником в этом случае обычно является недостаток в исходном коде Microsoft Corporation, который неправильно обрабатывает ввод.
Как правило, ошибки Type mismatch вызваны повреждением или отсутствием файла связанного Windows Operating System, а иногда — заражением вредоносным ПО. Большую часть проблем, связанных с данными файлами, можно решить посредством скачивания и установки последней версии файла Microsoft Corporation. Помимо прочего, в качестве общей меры по профилактике и очистке мы рекомендуем использовать очиститель реестра для очистки любых недопустимых записей файлов, расширений файлов Microsoft Corporation или разделов реестра, что позволит предотвратить появление связанных с ними сообщений об ошибках.
Типичные ошибки Type mismatch
Частичный список ошибок Type mismatch Windows Operating System:
- «Ошибка Type mismatch. «
- «Ошибка программного обеспечения Win32: Type mismatch»
- «Извините за неудобства — Type mismatch имеет проблему. «
- «К сожалению, мы не можем найти Type mismatch. «
- «Type mismatch не найден.»
- «Ошибка запуска программы: Type mismatch.»
- «Type mismatch не работает. «
- «Отказ Type mismatch.»
- «Type mismatch: путь приложения является ошибкой. «
Обычно ошибки Type mismatch с Windows Operating System возникают во время запуска или завершения работы, в то время как программы, связанные с Type mismatch, выполняются, или редко во время последовательности обновления ОС. Выделение при возникновении ошибок Type mismatch имеет первостепенное значение для поиска причины проблем Windows Operating System и сообщения о них вMicrosoft Corporation за помощью.
Создатели Type mismatch Трудности
Проблемы Type mismatch могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Type mismatch, или к вирусам / вредоносному ПО.
В частности, проблемы с Type mismatch, вызванные:
- Поврежденная или недопустимая запись реестра Type mismatch.
- Зазаражение вредоносными программами повредил файл Type mismatch.
- Type mismatch злонамеренно удален (или ошибочно) другим изгоем или действительной программой.
- Другое программное обеспечение, конфликтующее с Windows Operating System, Type mismatch или общими ссылками.
- Поврежденная установка или загрузка Windows Operating System (Type mismatch).
Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11
Источник
Разбор ошибки 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.
- Запустите код, чтобы появилась ошибка.
- Нажмите Debug в диалоговом окне ошибки. Это выделит строку с ошибкой.
- Выберите View-> Watch из меню, если окно просмотра не видно.
- Выделите переменную слева от equals и перетащите ее в окно Watch.
- Выделите все справа от равных и перетащите его в окно Watch.
- Проверьте значения и типы каждого.
- Вы можете сузить ошибку, изучив отдельные части правой стороны.
Следующее видео показывает, как это сделать.
На скриншоте ниже вы можете увидеть типы в окне просмотра.
Используя окно просмотра, вы можете проверить различные части строки кода с ошибкой. Затем вы можете легко увидеть, что это за типы переменных.
В следующих разделах показаны различные способы возникновения Type Mismatch Error VBA.
Присвоение строки числу
Как мы уже видели, попытка поместить текст в числовую переменную может привести к 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. Есть очень тонкая разница.
- Worksheets — сборник рабочих листов в Workbook
- Sheets — сборник рабочих листов и диаграммных листов в Workbook
Лист диаграммы создается, когда вы перемещаете диаграмму на собственный лист, щелкая правой кнопкой мыши на диаграмме и выбирая «Переместить».
Если вы читаете коллекцию Sheets с помощью переменной Worksheet, она будет работать нормально, если у вас нет рабочей таблицы.
Если у вас есть лист диаграммы, вы получите
Type Mismatch Error VBA.
В следующем коде Type Mismatch Error появится в строке «Next sh», если рабочая книга содержит лист с диаграммой.
Массивы и диапазоны
Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных.
Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив.
Если вы попытаетесь использовать его как массив, вы получите
Type Mismatch Error .
В этом сценарии вы можете использовать функцию IsArray, чтобы проверить, является ли arr массивом.
Заключение
На этом мы завершаем статью об Type Mismatch Error VBA. Если у вас есть ошибка несоответствия, которая не раскрыта, пожалуйста, дайте мне знать в комментариях.
Источник
Type mismatch error, or we can also call it Error code 13, occurs when we assign a value to a variable that is not of its data type. For example, if we provide a decimal or long value to an Integer data type variable, we will encounter this Type mismatch error when we run the code, which shows as error code 13.
VBA Type Mismatch Error in excel is a type of “Run Time Error,” and it is the number 13 error in this category.
To start learning in VBA and for beginners, it is hard to find the error thrown by the VBA codes. Remember, VBA is not throwing an error. Rather, it is just highlighting our mistakes while writing the code.
We usually declare variables. We assign data types to them. When we assign a value to those variables, we need to remember what kind of data it can hold. If the assigned value is not as per the data type, we will get “Run-time error ’13’: Type mismatch.”
Table of contents
- What is VBA Type Mismatch Error?
- How to Fix VBA Type Mismatch Run-time Error 13?
- VBA Type Mismatch – Example #1
- VBA Type Mismatch – Example #2
- VBA Type Mismatch – Example #3
- VBA Type Mismatch – Example #4
- Recommended Articles
- How to Fix VBA Type Mismatch Run-time Error 13?
You are free to use this image on your website, templates, etc., Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Type Mismatch Error (wallstreetmojo.com)
How to Fix VBA Type Mismatch Run-time Error 13?
Let us see some examples to understand this VBA Type Mismatch Error.
You can download this VBA Type Mismatch Excel Template here – VBA Type Mismatch Excel Template
VBA Type Mismatch – Example #1
Look at the VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.
Code:
Sub Type_MisMatch_Example1() Dim k As Byte k = "Hiii" MsgBox k End Sub
We have declared the variable “k” as Byte.
The variable “k” can hold values from 0 to 255. But in the next line, we have assigned the value for the variable “k” as “Hiii.”
The data type cannot hold a text’s value, so the Type Mismatch Error comes.
VBA Type Mismatch – Example #2
Now, look at one more example with a different data type. Look at the below code.
Code:
Sub Type_MisMatch_Example2() Dim x As Boolean x = 4556 MsgBox x End Sub
We have declared the variable “x” as Boolean.
Boolean is a data typeBoolean is an inbuilt data type in VBA used for logical references or logical variables. The value this data type holds is either TRUE or FALSE and is used for logical comparison. The declaration of this data type is similar to all the other data types.read more that can hold the value of either TRUE or FALSE.
In the above code, we have assigned a value of 4556, which is not as per the data type values of TRUE or FALSE.
When we run this code, you would expect a type mismatch error, but see what happens when we run this code.
You must wonder why this is not “Run-time error ’13’ ” or a type mismatch.
The reason for this is excel treats all the numbers as TRUE except zero. So, zero value will be treated as FALSE. So that is why we got the result as TRUE instead of an error.
Now see, we will assign a numerical value with text.
Code:
Sub Type_MisMatch_Example2() Dim x As Boolean x = "4556a" MsgBox x End Sub
It will throw “Run-time error ’13’: Type mismatch.”
VBA Type Mismatch – Example #3
Now, look at the below code for this example.
Code:
Sub Type_MisMatch_Example4() Dim x As Integer Dim y As String x = 45 y = "2019 Jan" MsgBox x + y End Sub
Variable “x” is an Integer data type, and “y” is a String data type.
X = 45 and y = 2019 Jan.
In the message box, we have added x + y.
But this is not the perfect code because we cannot add numbers with string texts. As a result, we will encounter “Run-time error ’13.’ “
VBA Type Mismatch – Example #4
Exceptional Cases
There are situations where excel forgives the erroneous data assigned to the variable data type. For example, look at the below code.
Code:
Sub Type_MisMatch_Example3() Dim x As Long Dim y As Long x = 58.85 y = "85" MsgBox x & vbNewLine & y End Sub
Two declared variables are “x” and “y.”
For this variable, the assigned data type is “Long.”
The long data type accepts only whole numbers, not decimal values.
So, the general perception is to get “Run-time error 13′ ” of type mismatch error.
But let us see what happens when we run this code
We got the values 59 and 85.
VBA will convert the decimal value 58.85 to the nearest integer value. Even though numbers enclosed with double quotes, it only converts to the integer value.
Recommended Articles
This article has been a guide to VBA Type Mismatch. Here, we discussed VBA Type Mismatch “Run-time error ’13’ ‘ in VBA with examples and a downloadable Excel template. Below are some useful articles related to VBA: –
- Data Type in Excel VBA
- What is Type Statement in Excel VBA?
- What is the Integer Data Type?
- VBA Select Case
Excel VBA Type Mismatch
In this article, we will see an outline on Excel VBA Type Mismatch. This is the most usual thing that we all have faced while working on VBA Macro. Sometimes, when we create a macro, due to the selection of incorrect data types or values assignment, we end up getting the error as Type Mismatch. Such kind of error mostly happens at the time of variable assignment and declaration. VBA Type Mismatch gives the “Run Time Error” message with the error code 13. To avoid such errors it is advised to assign the variables properly with proper selection of data types and objects. Also, we need to understand each data type with the type of values it can hold.
How to Fix Type Mismatch Error in VBA?
We will learn how to fix Type Mismatch Error in Excel by using the VBA Code.
You can download this VBA Type Mismatch Excel Template here – VBA Type Mismatch Excel Template
Example #1 – VBA Type Mismatch
To demonstrate the type mismatch error, we need to open a module. For this, follow the below steps:
Step 1: We will go to the Insert menu tab and select the Module from there.
Step 2: Now write the subprocedure for VBA Type mismatch as shown below. We can choose any name here to define the subprocedure.
Code:
Sub VBA_TypeMismatch() End Sub
Step 3: Now we will define a variable let say “A” as an Integer data type.
Code:
Sub VBA_TypeMismatch() Dim A As Integer End Sub
Step 4: As we all know, Integer data type only stores numbers and that to Whole Numbers. But, just to demonstrate here we will be assigning a text value to variable A.
Code:
Sub VBA_TypeMismatch() Dim A As Integer A = "Ten" End Sub
Step 5: And to see the values stored in variable A we will use the Message box.
Code:
Sub VBA_TypeMismatch() Dim A As Integer A = "Ten" MsgBox A End Sub
Step 6: Now run the code by pressing the F5 key or by clicking on the Play Button. As we can see, we really got the error message as “Run-Time Error ‘13’” as shown below with the additional message as “Type Mismatch”.
As we already know that Integer can only store whole numbers. So giving it a text will definitely show the error. If we consider the same code and compiled it before we run it, we would have got this error message earlier also. For directly compiling the code, press the F8 function key.
Step 7: If we assign the correct value incorrect format to the variable we define, we will get the proper output.
Code:
Sub VBA_TypeMismatch() Dim A As Integer A = 10 MsgBox A End Sub
Step 8: Run the code by pressing the F5 key or by clicking on the Play Button. We will get the message as 10 which we assigned in variable A.
Example #2 – VBA Type Mismatch
Let’s see another example of Type Mismatch. For this, follow the below steps:
Step 1: Write the subprocedure for VBA Type Mismatch.
Code:
Sub VBA_TypeMismatch2() End Sub
Step 2: Again assign a new variable, let’s say “A” as Byte data type.
Code:
Sub VBA_TypeMismatch2() Dim A As Byte End Sub
Let’s understand the Byte Data type here. Byte can only store the numerical value from 0 to 255. And it doesn’t consider any negative value.
Step 3: Now let’s assign any value other than a number. Here we have considered the text “TEN”.
Code:
Sub VBA_TypeMismatch2() Dim A As Byte A = "Ten" End Sub
Step 4: And then we will message box for output.
Code:
Sub VBA_TypeMismatch2() Dim A As Byte A = "Ten" MsgBox A End Sub
Step 5: Run the code by pressing the F5 key or by clicking on the Play Button. And we got the error message again. The message is the same as we got in example-1.
Step 6: As we have entered value in incorrect format, so the error message we got as “Type Mismatch”. What if we entered a value that is greater than 255? Let’s consider 1000 here.
Code:
Sub VBA_TypeMismatch2() Dim A As Byte A = 1000 MsgBox A End Sub
Step 7: This time we got the error as “Run-Time Error ‘6’” overflow. Which means we have entered the value beyond the allow capacity of selected data type.
Example #3 – VBA Type Mismatch
Let’s see another example. Here we will try to 2 data types and use them as any mathematical operation. For this, follow the below steps:
Step 1: Write the subprocedure for VBA Type Mismatch.
Code:
Sub VBA_TypeMismatch3() End Sub
Step 2: Now let’s consider 2 variables A and B as Integer.
Code:
Sub VBA_TypeMismatch3() Dim A As Integer Dim B As Integer End Sub
Step 3: As we all have seen in the previous example, Integer only allows numbers as a whole. So we will be assigning one numeric value to one of the integers and assign any text to another variable as shown below.
Code:
Sub VBA_TypeMismatch3() Dim A As Integer Dim B As Integer A = 10 B = "Ten" End Sub
Step 4: Let’s multiply the above variables here in the message box.
Code:
Sub VBA_TypeMismatch3() Dim A As Integer Dim B As Integer A = 10 B = "Ten" MsgBox A * B End Sub
Step 5: After running the code, we will get a message box with the error message “Run-time error ’13’”. It is because we have used one text to variable B and then multiplied A with B.
Step 6: And if we change the data type from Integer to Long. And also change the format of values.
Code:
Sub VBA_TypeMismatch4() Dim A As Long Dim B As Long A = 10 B = "10" MsgBox A * B End Sub
Step 7: If Run the code by pressing the F5 key or by clicking on the Play Button, this code will be successfully executed. Even if we have kept the value 10 in inverted colons in variable B.
Pros of VBA Type Mismatch:
- We actually get to know the mistake where it happened.
- Error message is so to the point, that even if we do not compile the code, we will get the point of error in the code.
Things to Remember
- Even if there is a small bracket where we considered a slightly different value, we will definitely get Type Mismatch Error.
- Understand the type of data types we are going to use and the values permitted in those data types. This will allow us to avoid such silly errors and run the code successfully.
- All the basic data types have some constraint of input values. It is better to choose those data types which don’t give such error as the wide range of input such as String, Long, Variant mainly. The rest of the data types have some limitations.
- Once you are done with coding, it is better to save the code in a Macro Enabled Excel format.
Recommended Articles
This is a guide to VBA Type Mismatch. Here we discuss how to Fix Type Mismatch Error in Excel using VBA code along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA DateDiff
- VBA Square Root
- VBA SendKeys
- VBA Name Worksheet
Home / VBA / VBA Type Mismatch Error (Error 13)
Type Mismatch (Error 13) occurs when you try to specify a value to a variable that doesn’t match with its data type. In VBA, when you declare a variable you need to define its data type, and when you specify a value that is different from that data type you get the type mismatch error 13.
In this tutorial, we will see what the possible situations are where runtime error 13 can occurs while executing a code.
Type Mismatch Error with Date
In VBA, there is a specific data type to deal with dates and sometimes it happens when you using a variable to store a date and somehow the value you specify is different.
In the following code, I have declared a variable as the date and then I have specified the value from cell A1 where I am supposed to have a date only. But as you can see the date that I have in cell one is not in the correct format VBA is not able to identify it as a date.
Sub myMacro()
Dim iVal As Date
iVal = Range("A1").Value
End Sub
Type Mismatch Error with Number
You’re gonna have you can have the same error while dealing with numbers where you get a different value when you trying to specify a number to a variable.
In the following example, you have an error in cell A1 which is supposed to be a numeric value. So when you run the code, VBA shows you the runtime 13 error because it cannot identify the value as a number.
Sub myMacro()
Dim iNum As Long
iNum = Range("A6").Value
End Sub
Runtime Error 6 Overflow
In VBA, there are multiple data types to deal with numbers and each of these data types has a range of numbers that you can assign to it. But there is a problem when you specify a number that is out of the range of the data type.
In that case, we will show you runtime error 6 overflow which indicates you need to change the data type and the number you have specified is out of the range.
Other Situations When it can Occurs
There might be some other situations in that you could face the runtime error 14: Type Mismatch.
- When you assign a range to an array but that range only consists of a single cell.
- When you define a variable as an object but by writing the code you specify a different object to that variable.
- When you specify a variable as a worksheet but use sheets collection in the code or vice versa.
How to Fix Type Mismatch (Error 13)
The best way to deal with this error is to use to go to the statement to run a specific line of code or show a message box to the user when the error occurs. But you can also check the court step by step before executing it. For this, you need to use VBA’s debug tool, or you can also use the shortcut key F8.
There’s More VBA Errors
Subscript Out of Range (Error 9) | Runtime (Error 1004) | Object Required (Error 424) | Out of Memory (Error 7) | Object Doesn’t Support this Property or Method (Error 438) | Invalid Procedure Call Or Argument (Error 5) | Overflow (Error 6) | Automation error (Error 440) | VBA Error 400
Make sure to check out this VBA Error Handling technique and if you want to learn more don’t forget to jump to this VBA Tutorial.