Errore di mancata corrispondenza del tipo VBA (esempi) - Come risolvere l'errore di run-time 13?

Digitare Errore di mancata corrispondenza o possiamo anche chiamarlo come codice di errore 13 si verifica quando assegniamo un valore a una variabile che non è del suo tipo di dati, ad esempio, se forniamo un valore decimale o lungo a una variabile di tipo di dati intero lo faremo riscontriamo questo errore di mancata corrispondenza del tipo quando eseguiamo il codice visualizzato come codice di errore 13.

Che cos'è l'errore di mancata corrispondenza del tipo VBA?

Errore di mancata corrispondenza del tipo VBA in Excel è un tipo di "Errore di runtime" ed è l'errore numero 13 in questa categoria.

Per iniziare gli apprendimenti in VBA e per i principianti, è difficile trovare l'errore generato dai codici VBA. Ricorda, VBA non genera un errore. Piuttosto, sta solo evidenziando i nostri errori durante la scrittura del codice.

Di solito dichiariamo variabili e le assegniamo tipi di dati. Quando assegniamo un valore a queste variabili, dobbiamo ricordare che tipo di dati può contenere. Se il valore assegnato non è come per il tipo di dati, otterremo "Errore di runtime 13: Type Mismatch".

Come risolvere l'errore 13 di run-time di mancata corrispondenza del tipo VBA?

Vediamo alcuni esempi per comprendere questo errore di mancata corrispondenza del tipo VBA.

Tipo VBA non corrispondente - Esempio n. 1

Ad esempio, guarda il codice VBA sottostante.

Codice:

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

Ho dichiarato la variabile "k" come Byte.

Ciò significa che la variabile "k" può contenere valori da 0 a 255. Ma nella riga successiva, ho assegnato il valore per la variabile "k" come "Hiii".

È molto chiaro che il tipo di dati non può contenere il valore di un testo, quindi ecco che arriva l'errore Type Mismatch.

Tipo VBA non corrispondente - Esempio n. 2

Ora dai un'occhiata a un altro esempio con un diverso tipo di dati. Guarda il codice sottostante.

Codice:

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

Abbiamo dichiarato la variabile "x" come booleana.

Boolean è un tipo di dati che può contenere il valore TRUE o FALSE.

Nel codice sopra, abbiamo assegnato un valore di 4556, che non corrisponde ai valori del tipo di dati TRUE o FALSE.

Quando eseguiamo questo codice, ti aspetteresti un errore di mancata corrispondenza del tipo, ma guarda cosa succede quando eseguiamo questo codice.

Ti starai chiedendo perché questo non dà l'errore di runtime 13 di errore di mancata corrispondenza del tipo.

La ragione di ciò è che Excel tratta tutti i numeri come VERO tranne lo zero. Il valore zero verrà considerato FALSO. Ecco perché abbiamo ottenuto il risultato come VERO invece di un errore.

Ora vedi, assegnerò un valore numerico con il testo.

Codice:

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

Questo genererà sicuramente Errore di runtime 13: Type Mismatch.

Tipo VBA non corrispondente - Esempio n. 3

Ora guarda il codice seguente per questo esempio.

Codice:

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

La variabile "x" è un tipo di dati intero e "y" è un tipo di dati stringa.

X = 45 e y = 2019 gennaio.

Nella finestra del messaggio, ho aggiunto x + y.

Ma questo non è il codice perfetto perché non possiamo aggiungere numeri con testi di stringa. Incontreremo Run Time Error 13.

Tipo non corrispondente VBA - Esempio n. 4

Casi eccezionali

Ci sono situazioni in cui Excel perdona i dati errati assegnati al tipo di dati variabile. Ad esempio, guarda il codice seguente.

Codice:

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

Due variabili dichiarate sono "x" e "y".

Per questa variabile, il tipo di dati assegnato è "Long".

Il tipo di dati lungo accetta solo numeri interi, non valori decimali.

Quindi la percezione generale è quella di ottenere l'errore di runtime 13 di tipo non corrispondente.

Ma vediamo cosa succede quando eseguiamo questo codice.

Wow!!! Abbiamo ottenuto i valori 59 e 85.

Questo perché VBA convertirà il valore decimale 58.85 nel valore intero più vicino e, anche se i numeri sono racchiusi tra virgolette doppie, viene comunque convertito solo nel valore intero.

Articoli interessanti...