Errore di mancata corrispondenza del tipo VBA

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 mostrato 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 che VBA non genera un errore, piuttosto evidenzia i nostri errori durante la scrittura del codice.

Di solito dichiariamo variabili e le assegniamo tipi di dati. Quando assegniamo un valore a quelle variabili dobbiamo ricordare che tipo di dati può contenere, se il valore assegnato non è come per il tipo di dati otterremo "Run Time Error 13: Type Mismatch".

Come risolvere l'errore 13 di runtime di mancata corrispondenza del tipo VBA?

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

Puoi scaricare questo modello Excel non corrispondente di tipo VBA qui - Modello Excel non corrispondente di tipo VBA

Tipo VBA non corrispondente - Esempio n. 1

Per un 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.

Mancata corrispondenza del tipo VBA - 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 che 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 non corrispondente VBA - 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 VBA non corrispondente - Esempio n. 4

Casi eccezionali

Ci sono situazioni in cui Excel perdona i dati errati assegnati al tipo di dati variabile. Per un 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 è "Lungo".

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.