Грешка при несъответствие на типа или можем да го наречем и като Код на грешка 13, възниква, когато присвоим стойност на променлива, която не е от типа й данни, например, ако предоставим десетична или дълга стойност на променлива от цял тип данни, ще срещнете тази грешка при несъответствие на типа, когато стартираме кода, който е показан като код на грешка 13.
Какво представлява грешката при несъответствие на типа VBA?
Грешка при несъответствие на типа VBA в Excel е вид „Грешка при време на изпълнение“ и е грешка номер 13 в тази категория.
За да започнете обучението във VBA и за начинаещи, е трудно да откриете грешката, генерирана от кодовете на VBA. Не забравяйте, че VBA не извежда грешка. По-скоро просто подчертаваме грешките си, докато пишем кода.
Обикновено декларираме променливи и му присвояваме типове данни. Когато присвояваме стойност на тези променливи, трябва да помним какъв вид данни може да съдържа. Ако присвоената стойност не е според типа на данните, ще получим „Грешка във времето за изпълнение 13: Несъответствие на типа“.

Как да коригирам грешка при изпълнение на VBA тип несъответствие 13?
Нека да видим няколко примера, за да разберем тази грешка при несъответствие на типа VBA.
Несъответствие на типа VBA - Пример # 1
Например погледнете кода по-долу VBA.
Код:
Sub Type_MisMatch_Example1 () Dim k As Byte k = "Hiii" MsgBox k End Sub

Декларирах променливата "k" като байт.
Това означава, че променливата „k“ може да съдържа стойности от 0 до 255. Но в следващия ред съм задал стойността за променливата „k“ като „Hiii“.
Много е ясно, че типът данни не може да съдържа стойността на текст, така че идва грешка при несъответствие на типа.

Несъответствие на типа VBA - Пример # 2
Сега разгледайте още един пример с различен тип данни. Погледнете кода по-долу.
Код:
Sub Type_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub

Декларирахме променливата „x“ като булева.
Boolean е тип данни, който може да съдържа стойността на TRUE или FALSE.
В горния код сме присвоили стойност от 4556, която не е според стойностите на типа данни TRUE или FALSE.
Когато стартираме този код, бихте очаквали грешка при несъответствие на типа, но вижте какво се случва, когато стартираме този код.

Сигурно се чудите защо това не е грешка на времето за изпълнение 13 от грешка при несъответствие на типа.
Причината за това е, че excel третира всички числа като TRUE, с изключение на нула. Нулевата стойност ще се третира като FALSE. Ето защо ние получихме резултата като TRUE вместо грешка.
Сега вижте, ще присвоя числова стойност с текст.
Код:
Sub Type_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub

Това определено ще хвърли Грешка при изпълнение на времето 13: Несъответствие на типа.

Несъответствие на типа VBA - Пример # 3
Сега погледнете кода по-долу за този пример.
Код:
Sub Type_MisMatch_Example4 () Dim x As Integer Dim y As String x = 45 y = "2019 Jan" MsgBox x + y End Sub

Променливата „x“ е цял тип данни, а „y“ е низ тип данни.
X = 45 и y = 2019 януари
В полето за съобщение добавих x + y.
Но това не е идеалният код, защото не можем да добавяме числа с текстови низове. Ще срещнем грешка при време на изпълнение 13.

Несъответствие на типа VBA - Пример # 4
Изключителни случаи
Има ситуации, при които Excel прощава грешни данни, присвоени на променливия тип данни. Например погледнете кода по-долу.
Код:
Sub Type_MisMatch_Example3 () Dim x As Long Dim y As Long x = 58.85 y = "85" MsgBox x & vbNewLine & y End Sub

Две декларирани променливи са „x“ и „y.“
За тази променлива присвоеният тип данни е „Long“.
Дългият тип данни приема само цели числа, а не десетични стойности.
Така че общото възприятие е да се получи грешка при време на изпълнение 13 от грешка при несъответствие на типа.
Но нека видим какво ще стане, когато стартираме този код.

Еха!!! Получихме стойностите 59 и 85.
Това е така, защото VBA ще преобразува десетичната стойност 58,85 до най-близката целочислена стойност и въпреки че числата са затворени с двойни кавички, тя все пак се преобразува само в целочислената стойност.