Errore di mancata corrispondenza del tipo di argomento VBA ByRef - 3 principali motivi e correzioni di errori

ByRef Tipo di argomento non corrispondente in Excel VBA

In questo articolo, spieghiamo l'errore riscontrato durante l'utilizzo di Excel VBA ByRef come "Errore di mancata corrispondenza del tipo di argomento". Prima di ciò, lascia che ti presenti prima "Per riferimento". Le variabili sono fondamentali per qualsiasi linguaggio di programmazione e nemmeno VBA è diverso. Abbiamo visto molti modi per dichiarare le variabili, uno di questi modi per dichiarare le variabili è usare le parole "ByRef" e "ByVal".

Cosa significa ByRef?

"ByRef" significa "Per riferimento" usando questa parola, possiamo effettivamente passare argomenti alle procedure (sia per sotto che per funzione) per riferimento. Questo è diverso da suo fratello "By Val", che non è flessibile ma di natura fissa.

Per capirlo, diamo un'occhiata alle due macro seguenti.

Codice:

Sub Macro1 () Dim A Finché A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Abbiamo due sottoprocedure qui denominate rispettivamente Macro1 e Macro2. Per capirlo meglio, esegui la macro riga per riga premendo il tasto F8.

Premere il tasto F8 per acquisire il valore della variabile "A" come 50.

La riga di codice successiva dice "Macro2 A", ovvero il nome della seconda macro e "A" è la variabile definita tramite la parola "By Ref".

Come puoi vedere sopra, nel momento in cui eseguiamo la riga di codice "Macro2 A", è passata alla procedura secondaria VBA successiva dalla procedura precedente.

Ora possiamo vedere che il valore della variabile "A" è 50. Questo perché poiché abbiamo usato la parola "ByRef" per dichiarare la variabile "A", che è la stessa di Macro1, ha catturato il valore che abbiamo assegnato a questa variabile “A” dalla Macro1 .

Ora in questa macro ( Macro2 ) l'equazione dice A = A * 10 cioè A = 50 * 100. Premere il tasto F8 3 volte per tornare alla macro sopra ( Macro1 ).

Ora premi ancora una volta il tasto F8 per vedere il valore della variabile "A" nella finestra di messaggio in VBA.

Il valore dice 500.

Anche se il valore che abbiamo assegnato in questa macro (Macro1) è 50, utilizzando la parola ByRef, abbiamo effettivamente attivato la sottoprocedura Macro2 mantenendo il valore della variabile “A” da Macro1 e quindi eseguendo il valore di A moltiplicando 10.

3 principali motivi per la mancata corrispondenza del tipo di argomento VBA Byref

Sopra, abbiamo visto come funziona "ByRef", ma siamo obbligati a fare alcuni degli errori che invariabilmente hanno portato a lanciare un messaggio di errore VBA come "ByRef Argument Type Mismatch".

Ciò è dovuto a molti motivi e in questa sezione ti mostreremo come correggere questo errore ed eseguire il debug del codice.

Motivo di errore n. 1: nomi di variabili diversi

Uno dei motivi principali alla base di questo errore in Excel VBA è dovuto alle diverse variabili passate in due procedure. Ad esempio, guarda i seguenti codici.

Codice:

Sub Macro1 () Dim A Finché A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A As Long) B = B * 10 End Sub

In Macro1 abbiamo utilizzato la variabile "A" e in Macro2 abbiamo utilizzato la variabile "B". Ora, se provi a eseguire il codice, otterremo l'errore VBA come "ByRef Argument Type Mismatch".

Come puoi vedere sopra, la variabile "B" è stata evidenziata perché il tipo di nome della variabile è una mancata corrispondenza.

Soluzione: per risolvere questo problema, dobbiamo assicurarci che i nomi delle variabili in entrambe le procedure siano esatti.

Motivo di errore 2: diversi tipi di dati variabili

Anche se i nomi delle variabili sono gli stessi, causa comunque un errore, ciò è dovuto al tipo di dati che assegniamo loro. Guarda il codice sottostante.

Codice:

Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Nei codici sopra, ho dichiarato la variabile "A" come tipo di dati Integer in Macro1 e in Macro2 alla stessa variabile è stato assegnato il tipo di dati "Long".

Quando eseguiamo questo codice, verrà generato un errore VBA "ByRef Argument Type Mismatch".

Questo perché abbiamo assegnato due diversi tipi di dati per lo stesso nome di variabile.

Soluzione: il tipo di dati deve essere lo stesso in entrambe le procedure.

Motivo di errore 3: tipi di dati variabili mancanti in una macro

L'errore VBA di Excel, "ByRef Argument Type Mismatch", potrebbe verificarsi a causa del tipo di dati assegnato in una macro e non assegnato in un'altra macro.

Codice:

Sub Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Nel codice precedente di Macro1, non ho dichiarato alcuna variabile, ma semplicemente assegnato il valore alla variabile.

D'altra parte, per Macro2, ho dichiarato la variabile "A" più lunga. Se si tenta di eseguire questo codice, verrà visualizzato l'errore VBA "ByRef Argument Type Mismatch".

Soluzione 1: per evitare questo tipo di situazioni, la prima soluzione è dichiarare la variabile in entrambe le procedure e assegnare lo stesso tipo di dati.

Soluzione2: una soluzione alternativa è rendere obbligatoria la dichiarazione della variabile aggiungendo la parola "Option Explicit" nella parte superiore del modulo.

Ciò che farà è che prima che mostri VBA "ByRef Argument Type Mismatch" Error, in realtà ci chiede di dichiarare prima la variabile.

Quindi, Option Explicit è sempre utile in VBA.

Cose da ricordare

  • ByRef è l'opposto di By Val.
  • ByRef trasporta il riferimento da una procedura all'altra.
  • Il nome della variabile e il tipo di dati devono essere gli stessi in entrambe le procedure.
  • Ogni variabile deve essere dichiarata separatamente nel caso di più variabili.

Articoli interessanti...