VBA-tyypin ristiriitavirhe (esimerkkejä) | Kuinka korjata ajonaikainen virhe 13?

Type mismatch Error tai voimme kutsua sitä myös virhekoodiksi 13 se tapahtuu, kun määritämme arvon muuttujalle, joka ei ole sen tietotyyppi, esimerkiksi jos annamme desimaalin tai pitkän arvon kokonaisluvun tietotyyppiselle muuttujalle kohtaat tämän tyypin vastaavuusvirheen, kun suoritamme koodin, joka näytetään virhekoodina 13.

Mikä on VBA-tyyppisen ristiriidan virhe?

VBA: n tyypin ristiriidan virhe Excelissä on tyyppi "Run Time Error" ja se on tämän luokan virhe 13.

VBA-oppimisen aloittelijoille ja aloittelijoille on vaikea löytää VBA-koodien heittämää virhettä. Muista, että VBA ei heitä virhettä, vaan se vain korostaa virheitämme koodia kirjoitettaessa.

Ilmoitamme yleensä muuttujat ja osoitamme sille tietotyypit. Kun annamme arvo näille muuttujille, on muistettava, millaista dataa se voi sisältää, jos määritetty arvo ei ole tietotyypin mukainen, saamme "Run Time Error 13: Type Mismatch".

Kuinka korjata VBA Type Mismatch Run-time Error 13?

Katsotaanpa joitain esimerkkejä tämän VBA-tyyppisen virheilmoituksen ymmärtämiseksi.

Voit ladata tämän VBA Type Mismatch Excel -mallin täältä - VBA Type Mismatch Excel -malli

VBA-tyyppinen ristiriita - esimerkki 1

Katso esimerkki alla olevasta VBA-koodista.

Koodi:

 Alatyyppi_MisMatch_Example1 () Dim k tavuina k = "Hiii" MsgBox k End Sub 

Olen ilmoittanut muuttujan “k” tavuksi.

Tämä tarkoittaa, että muuttujaan "k" voi olla arvoja 0-255. Mutta seuraavalla rivillä olen määrittänyt muuttujan "k" arvon "Hiii".

On hyvin selvää, että tietotyyppi ei voi pitää sisällään tekstin arvoa, joten tässä tulee Type Mismatch Error.

VBA-tyyppinen ristiriita - esimerkki 2

Katso nyt vielä yksi esimerkki, jolla on erilainen tietotyyppi. Katso alla oleva koodi.

Koodi:

 Alatyyppi_MisMatch_Example2 () Dim x As Boolean x = 4556 MsgBox x End Sub 

Olemme ilmoittaneet muuttujan "x" loogiseksi.

Boolean on tietotyyppi, joka voi pitää arvon TOSI tai EPÄTOSI.

Yllä olevassa koodissa olemme määrittäneet arvon 4556, joka ei vastaa TOSI tai EPÄTOSI -tyyppiarvoja.

Kun suoritamme tämän koodin, voit odottaa tyyppivirheitä, mutta katso mitä tapahtuu, kun suoritamme tämän koodin.

Sinun on ihmeteltävä, miksi tämä ei anna tyypin ristiriitavirheen ajoaikavirhettä 13.

Syynä tähän on, että Excel käsittelee kaikkia lukuja TOSINa paitsi nolla. Nolla-arvoa käsitellään FALSE-arvona. Joten siksi saimme tuloksen TOSIN virheen sijaan.

Katso nyt, määritän numeerisen arvon tekstin kanssa.

Koodi:

 Alatyyppi_MisMatch_Example2 () Dim x As Boolean x = "4556a" MsgBox x End Sub 

Tämä heittää ehdottomasti ajonaikaisen virheen 13: Kirjoita ristiriita.

VBA-tyyppinen ristiriita - esimerkki 3

Katso nyt tämän esimerkin alla oleva koodi.

Koodi:

 Alatyyppi_MisMatch_Example4 () Dim x kokonaislukuna Dim y As String x = 45 y = "2019 Jan" MsgBox x + y End Sub 

Muuttuja "x" on kokonaislukutietotyyppi ja "y" on merkkijonotietotyyppi.

X = 45 ja y = 2019 tammikuu

Olen lisännyt viestiruutuun x + y.

Mutta tämä ei ole täydellinen koodi, koska emme voi lisätä numeroita merkkijonoteksteillä. Tulemme kohtaamaan ajonaikaisen virheen 13.

VBA-tyyppinen ristiriita - esimerkki 4

Poikkeukselliset tapaukset

On tilanteita, joissa Excel antaa anteeksi muuttujan tietotyypille määritetyt väärät tiedot. Katso esimerkki alla olevasta koodista.

Koodi:

 Alatyyppi_MisMatch_Example3 () Dim x niin pitkä Dim y niin pitkä x = 58,85 y = "85" MsgBox x & vbNewLine & y End Sub 

Kaksi ilmoitettua muuttujaa ovat “x” ja “y”.

Tälle muuttujalle määritetty tietotyyppi on ”Long”.

Pitkä tietotyyppi hyväksyy vain kokonaisluvut, ei desimaaliarvoja.

Joten yleinen käsitys on saada tyypin yhteensopimattomuusvirheen ajoaikavirhe 13.

Mutta katsotaanpa, mitä tapahtuu, kun suoritamme tämän koodin.

Vau!!! Saimme arvot 59 ja 85.

Tämä johtuu siitä, että VBA muuntaa desimaaliarvon 58,85 lähimpään kokonaislukuarvoon, ja vaikka numerot ovatkin lainausmerkeissä, se muuntuu vain kokonaislukuarvoksi.


$config[zx-auto] not found$config[zx-overlay] not found