Błąd niezgodności typu VBA

Błąd niezgodności typu lub możemy go również nazwać kodem błędu 13 Występuje, gdy przypisujemy wartość do zmiennej, która nie jest jej typem danych, na przykład, jeśli podamy wartość dziesiętną lub długą do zmiennej typu danych typu integer, będziemy napotkamy ten błąd niezgodności typu, gdy uruchamiamy kod, który jest wyświetlany jako kod błędu 13.

Co to jest błąd niedopasowania typu VBA?

Błąd niedopasowania typu VBA w programie Excel to rodzaj „błędu czasu wykonywania” i jest to błąd numer 13 w tej kategorii.

Aby rozpocząć naukę w VBA i dla początkujących, trudno jest znaleźć błąd zgłaszany przez kody VBA. Pamiętaj, że VBA nie zgłasza błędu, a jedynie podkreśla nasze błędy podczas pisania kodu.

Zwykle deklarujemy zmienne i przypisujemy do nich typy danych. Kiedy przypisujemy wartość do tych zmiennych, musimy pamiętać, jakie dane mogą one zawierać, jeśli przypisana wartość nie jest zgodna z typem danych, otrzymamy „Run Time Error 13: Type Mismatch”.

Jak naprawić błąd czasu wykonywania 13 niezgodności typu VBA?

Zobaczmy kilka przykładów, aby zrozumieć ten błąd niezgodności typu VBA.

Możesz pobrać ten szablon Excela dotyczący niezgodności typu VBA - Szablon programu Excel dotyczący niezgodności typu VBA

Niezgodność typu VBA - przykład nr 1

Na przykład spójrz na poniższy kod VBA.

Kod:

 Sub Type_MisMatch_Example1 () Dim k As Byte k = "Hiii" MsgBox k End Sub 

Zadeklarowałem zmienną „k” jako bajt.

Oznacza to, że zmienna „k” może zawierać wartości od 0 do 255. Ale w następnym wierszu przypisałem wartość zmiennej „k” jako „Hiii”.

Jest bardzo jasne, że typ danych nie może przechowywać wartości tekstu, więc tutaj pojawia się błąd niezgodności typu.

Niezgodność typu VBA - przykład nr 2

Teraz spójrz na jeszcze jeden przykład z innym typem danych. Spójrz na poniższy kod.

Kod:

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

Zadeklarowaliśmy zmienną „x” jako Boolean.

Boolean to typ danych, który może zawierać wartość TRUE lub FALSE.

W powyższym kodzie przypisaliśmy wartość 4556, która nie jest zgodna z wartościami typu danych PRAWDA lub FAŁSZ.

Po uruchomieniu tego kodu można się spodziewać błędu niezgodności typu, ale zobacz, co się stanie, gdy uruchomimy ten kod.

Pewnie się zastanawiasz, dlaczego to nie daje błędu czasu wykonania 13 błędu niezgodności typu.

Powodem tego jest to, że program Excel traktuje wszystkie liczby jako PRAWDA oprócz zera. Wartość zerowa będzie traktowana jako FAŁSZ. Dlatego otrzymaliśmy wynik jako PRAWDA zamiast błędu.

Teraz zobacz, przypiszę wartość liczbową z tekstem.

Kod:

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

Na pewno spowoduje to zgłoszenie błędu czasu wykonywania 13: niezgodność typu.

Niezgodność typu VBA - przykład nr 3

Teraz spójrz na poniższy kod tego przykładu.

Kod:

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

Zmienna „x” to liczba całkowita, a „y” to łańcuchowy typ danych.

X = 45 i y = 2019 styczeń.

W oknie komunikatu dodałem x + y.

Ale to nie jest idealny kod, ponieważ nie możemy dodawać liczb z tekstami łańcuchowymi. Napotkamy Run Time Error 13.

Niezgodność typu VBA - przykład nr 4

Wyjątkowe przypadki

Są sytuacje, w których program Excel wybacza błędne dane przypisane do zmiennego typu danych. Na przykład spójrz na poniższy kod.

Kod:

 Sub Type_MisMatch_Example3 () Dim x As Long Dim y As Long x = 58.85 y = "85" MsgBox x & vbNewLine & y End Sub 

Dwie zadeklarowane zmienne to „x” i „y”.

W przypadku tej zmiennej przypisany typ danych to „Long”.

Długi typ danych akceptuje tylko liczby całkowite, a nie wartości dziesiętne.

Tak więc ogólna percepcja polega na uzyskaniu błędu czasu wykonania 13 o błędzie niedopasowania typu.

Ale zobaczmy, co się stanie, gdy uruchomimy ten kod.

Łał!!! Otrzymaliśmy wartości 59 i 85.

Dzieje się tak, ponieważ VBA konwertuje wartość dziesiętną 58,85 na najbliższą wartość całkowitą i nawet jeśli liczby są ujęte w podwójne cudzysłowy, nadal konwertuje tylko na wartość całkowitą.