Fout met VBA-type komt niet overeen

Typ niet-overeenkomend 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 veroorzaakt. Onthoud dat VBA geen fout gooit, maar alleen onze fouten benadrukt tijdens het schrijven van de code.

We declareren meestal variabelen en we wijzen er gegevenstypen aan toe. Wanneer we een waarde aan die variabelen toewijzen, 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.

U kunt deze VBA Type Mismatch Excel-sjabloon hier downloaden - VBA Type Mismatch Excel-sjabloon

VBA-type komt niet overeen - Voorbeeld # 1

Kijk voor een voorbeeld 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 kan bevatten van 0 tot 255. 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.

Als 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 toewijzen met tekst.

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 voor een voorbeeld 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 omzet naar de dichtstbijzijnde gehele waarde en hoewel getallen tussen dubbele aanhalingstekens staan, wordt het alleen naar de gehele waarde geconverteerd.