Type mismatch Fout of we kunnen het ook als foutcode 13 noemen het treedt op wanneer we een waarde toewijzen aan een variabele die niet van het gegevenstype is, bijvoorbeeld als we een decimale of lange waarde aan een integer gegevenstypevariabele geven, zullen we komen deze Type mismatch-fout tegen wanneer we de code uitvoeren die wordt weergegeven als Foutcode 13.
Wat is een VBA-type komt niet overeen?
VBA Type Mismatch-fout in Excel is een type "Run Time Error" en het is de nummer 13-fout in deze categorie.
Om te beginnen met het leren in VBA en voor beginners, is het moeilijk om de fout te vinden die door de VBA-codes wordt gegenereerd. Onthoud dat VBA geen fout gooit. Het benadrukt eerder onze fouten tijdens het schrijven van de code.
We declareren meestal variabelen en we wijzen er gegevenstypen aan toe. Wanneer we een waarde aan die variabelen toekennen, moeten we onthouden wat voor soort gegevens het kan bevatten. Als de toegewezen waarde niet overeenkomt met het gegevenstype, krijgen we "Run Time Error 13: Type Mismatch".

Hoe VBA Type Mismatch Run-time Error 13 te repareren?
Laten we enkele voorbeelden bekijken om deze VBA Type Mismatch-fout te begrijpen.
VBA-type komt niet overeen - Voorbeeld # 1
Kijk bijvoorbeeld naar de onderstaande VBA-code.
Code:
Sub Type_MisMatch_Example1 () Dim k As Byte k = "Hiii" MsgBox k End Sub

Ik heb de variabele "k" gedeclareerd als Byte.
Dit betekent dat de variabele 'k' waarden van 0 tot 255 kan bevatten. Maar in de volgende regel heb ik de waarde voor de variabele 'k' toegewezen als 'Hiii'.
Het is heel duidelijk dat het gegevenstype de waarde van een tekst niet kan bevatten, dus hier komt de Type Mismatch-fout.

VBA-type komt niet overeen - Voorbeeld # 2
Bekijk nu nog een voorbeeld met een ander datatype. Kijk naar de onderstaande code.
Code:
Sub Type_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub

We hebben de variabele “x” gedeclareerd als Booleaans.
Boolean is een gegevenstype dat de waarde TRUE of FALSE kan bevatten.
In de bovenstaande code hebben we een waarde van 4556 toegewezen, wat niet overeenkomt met de waarden van het gegevenstype TRUE of FALSE.
Wanneer we deze code uitvoeren, zou je een typefout verwachten, maar kijk wat er gebeurt als we deze code uitvoeren.

U moet zich afvragen waarom dit geen runtime-fout 13 van het type mismatch-fout geeft.
De reden hiervoor is dat Excel alle getallen als WAAR behandelt behalve nul. Een nulwaarde wordt als FALSE behandeld. Daarom kregen we het resultaat als WAAR in plaats van een fout.
Kijk nu, ik zal een numerieke waarde met tekst toewijzen.
Code:
Sub Type_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub

Dit zal zeker Run Time Error 13: Type Mismatch veroorzaken.

VBA-type komt niet overeen - Voorbeeld # 3
Bekijk nu de onderstaande code voor dit voorbeeld.
Code:
Sub Type_MisMatch_Example4 () Dim x As Integer Dim y As String x = 45 y = "2019 Jan" MsgBox x + y End Sub

Variabele "x" is een gegevenstype met gehele getallen en "y" is een gegevenstype van een string.
X = 45 en y = 2019 jan.
In het berichtvenster heb ik x + y toegevoegd.
Maar dit is niet de perfecte code omdat we geen getallen kunnen toevoegen met stringteksten. We zullen Run Time Error 13 tegenkomen.

VBA-type komt niet overeen - Voorbeeld # 4
Uitzonderlijke gevallen
Er zijn situaties waarin Excel de verkeerde gegevens vergeeft die aan het variabele gegevenstype zijn toegewezen. Kijk bijvoorbeeld naar de onderstaande 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

Twee gedeclareerde variabelen zijn 'x' en 'y'.
Voor deze variabele is het toegewezen gegevenstype 'Lang'.
Lang gegevenstype accepteert alleen hele getallen, geen decimale waarden.
Dus algemene perceptie is om runtime-fout 13 van het type mismatch-fout te krijgen.
Maar laten we eens kijken wat er gebeurt als we deze code uitvoeren.

Wauw!!! We hebben de waarden als 59 & 85.
Dit komt omdat VBA de decimale waarde 58.85 naar de dichtstbijzijnde gehele waarde converteert, en hoewel getallen tussen dubbele aanhalingstekens staan, wordt het alleen naar de gehele waarde geconverteerd.