2014-12-04 7 views
6

Sto tentando di utilizzare Application.Match tuttavia restituisce un errore type mismatch error:13. Perché?Application.Match indica la mancata corrispondenza di tipo

Dim mySrs as Series 
Dim ws as Worksheet 
set ws Activesheet 
For Each mySrs in ActiveChart.SeriesCollection 
tempvar = mySrs.Name 
y = Application.Match(tempvar, ws.Range("P37:P71"), 0) 
MsgBox y 
+1

Perché non utilizzare un metodo 'Range.Find()'? – Chrismas007

+0

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

risposta

14

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.

+0

ah questo era il mio problema! Stavo cercando "25%", ma ovviamente il foglio di lavoro aveva quello .25 piuttosto che una stringa. Grazie – As3adTintin