Tüübi mittevastavus Viga või võime seda nimetada ka tõrkekoodiks 13, mis ilmneb siis, kui määrame muutujale väärtuse, mis ei ole selle andmetüüp, näiteks kui anname täisarvu andmetüübi muutujale kümnendkoha või pika väärtuse ilmneb selle tüübi mittevastavuse tõrge, kui käivitame koodi, mis kuvatakse kui tõrkekood 13.
Mis on VBA tüübi mittevastavuse viga?
VBA tüüp Mismatch Error Excelis on tüüp „Run Time Error” ja selles kategoorias on viga number 13.
VBA õppimise alustamiseks ja algajatele on raske leida VBA koodide visatud viga. Pidage meeles, et VBA ei viska viga. Pigem on see lihtsalt meie vigade esiletoomine koodi kirjutamisel.
Tavaliselt deklareerime muutujad ja määrame sellele andmetüübid. Nendele muutujatele väärtuse määramisel peame meeles pidama, milliseid andmeid see mahutab. Kui määratud väärtus ei vasta andmetüübile, kuvatakse teade „Run Time Error 13: Type Mismatch”.

Kuidas parandada VBA tüübi mittevastavuse käituse viga 13?
Vaatame mõningaid näiteid selle VBA tüübi mittevastavuse vea mõistmiseks.
VBA tüübi mittevastavus - näide 1
Näiteks vaadake allpool olevat VBA-koodi.
Kood:
Alamtüüp_MisMatch_Example1 () Dim k As Bait k = "Hiii" MsgBox k End Sub

Muutuja “k” olen kuulutanud baidiks.
See tähendab, et muutuja "k" mahutab väärtusi vahemikus 0 kuni 255. Kuid järgmisel real olen määranud muutuja "k" väärtuse "Hiii".
On väga selge, et andmetüüp ei saa hoida teksti väärtust, nii et siin tuleb tüüpiviga.

VBA tüübi mittevastavus - näide 2
Nüüd vaadake veel ühte erinevat tüüpi andmetega näidet. Vaadake allolevat koodi.
Kood:
Alamtüüp_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub

Oleme muutuja “x” deklareerinud loogikana.
Boolean on andmetüüp, mis mahutab väärtuse TRUE või FALSE.
Ülaltoodud koodis oleme määranud väärtuse 4556, mis ei vasta andmetüübi väärtustele TRUE või FALSE.
Selle koodi käivitamisel võite oodata tüübi mittevastavuse viga, kuid vaadake, mis juhtub selle koodi käivitamisel.

Peate kindlasti mõtlema, miks see ei anna käitamisaja viga 13 tüüpi mittevastavuse viga.
Selle põhjuseks on, et Excel käsitleb kõiki numbreid TÕENA, välja arvatud null. Nullväärtust käsitletakse kui VALE. Seetõttu saime vea asemel tulemuseks TÕENE.
Nüüd vaadake, määran tekstiga arvulise väärtuse.
Kood:
Alamtüüp_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub

See viskab kindlasti Run Run Error 13: Type Mismatch.

VBA tüübi mittevastavus - näide 3
Nüüd vaadake selle näite jaoks allpool olevat koodi.
Kood:
Alamtüüp_MisMatch_Näide4 () Dim x täisarvuna Dim y stringina x = 45 y = "2019 jaanuar" MsgBox x + y End Sub

Muutuja “x” on täisarvu andmetüüp ja “y” stringitüüp.
X = 45 ja y = 2019 jaanuar
Sõnumikasti olen lisanud x + y.
Kuid see pole ideaalne kood, sest me ei saa stringitekstidega numbreid lisada. Käivitusaja viga 13.

VBA tüübi mittevastavus - näide 4
Erakordsed juhtumid
On olukordi, kus Excel andestab muutuja andmetüübile omistatud valed andmed. Näiteks vaadake allolevat koodi.
Kood:
Alamtüüp_MisMatch_Näide3 () Dim x nii pikk Dim y nii pikk x = 58.85 y = "85" MsgBox x & vbNewLine & y End Sub

Kaks deklareeritud muutujat on “x” ja “y”.
Selle muutuja jaoks on määratud andmetüüp „pikk”.
Pikk andmetüüp aktsepteerib ainult täisarvusid, mitte kümnendarvusid.
Seega on üldine ettekujutus saada tüübide mittevastavuse tõrke ajaviga 13
Kuid vaatame, mis juhtub, kui käivitame selle koodi.

Vau !!! Saime väärtused 59 ja 85.
Seda seetõttu, et VBA teisendab kümnendväärtuse 58,85 lähima täisarvu väärtuseks, ja kuigi arvud on lisatud topelt jutumärkidesse, teisendab see siiski ainult täisarvu.