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 kokonaislukutietotyyppiselle 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ässä luokassa virhe 13.

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

Ilmoitamme yleensä muuttujat ja osoitamme sille tietotyypit. Kun annamme arvo näille muuttujille, meidän 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.

VBA-tyyppinen ristiriita - esimerkki 1

Katso esimerkiksi alla olevaa VBA-koodia.

Koodi:

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

Olen ilmoittanut muuttujan “k” tavuksi.

Tämä tarkoittaa, että muuttuja "k" voi pitää arvoja välillä 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 eri tietotyypillä. 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 tyypin vastaavuusvirhettä, 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, annan numeerisen arvon tekstillä.

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 esimerkiksi alla oleva koodi.

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 ”pitkä”.

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 on liitetty kaksoislainausmerkkeihin, se muuntuu vain kokonaislukuarvoksi.

Mielenkiintoisia artikkeleita...