In tutta probabilità, nessuna corrispondenza è stata trovata. In tal caso, Application.Match
restituisce un codice di errore di Excel, ad esempio Variant/Error il cui valore è Error 2042
(ciò corrisponde a ottenere #N/A
in Excel).
Tale valore di errore non può essere implicitamente forzato a una stringa (che è ciò che si aspetta MsgBox
) e quindi si ottiene la mancata corrispondenza del tipo.
Si noti che la stessa funzione Match
può essere richiamata utilizzando WorksheetFunction.Match
. L'unica differenza è come errori devono essere gestite:
Con WorksheetFunction
, errori vengono trattati come errori VBA, intercettabile utilizzando la sintassi On Error
.
Con Application
, restituiscono un codice di errore di Excel avvolto in una variante. È possibile utilizzare IsError
per verificare se la variabile restituita è una variante di tipo Errore.
fonte
2014-12-04 19:56:19
Perché non utilizzare un metodo 'Range.Find()'? – Chrismas007
Apparentemente, Find è in genere più lento di Match: [fastexcel.wordpress.com] (https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance- shootout /) – Egalth