2014-12-04 29 views
6

verir Application.Match kullanmaya çalışıyorum, ancak bir type mismatch error:13 hata döndürüyor. Niye ya?Application.Match tür uyumsuzluğu

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

Neden 'Range.Find()' yöntemini kullanmıyorsunuz? – Chrismas007

+0

Görünüşe göre, Bul, genellikle Eşleştirmeden daha yavaş: [fastexcel.wordpress.com] (https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance- shootout /) – Egalth

cevap

14

Her ihtimalde, eşleşme bulunamadı. Böyle bir durumda, Application.Match bir Excel hata kodunu, yani değeri Error 2042 olan bir Varyant/Hata döndürür (bu, Excel'de #N/A elde edilmesine karşılık gelir).

Böyle bir Hata değeri, bir String'e dolaylı olarak zorlanamaz (MsgBox'un beklediği gibi) ve böylece tür uyuşmazlığını alırsınız.

WorksheetFunction.Match ile aynı Match işlevinin çağrılabileceğini unutmayın. WorksheetFunction ile

  • , hatalar On Error sözdizimi kullanarak, VBA hata olarak yakalanabilir ele alınır: Tek fark hataları ele için ne kadar olduğunu.

  • Application ile, bir Variant içine sarılmış bir Excel hata kodunu döndürürler. Dönen değişkenin bir Hata türü varyantı olup olmadığını görmek için IsError'u kullanabilirsiniz.

+0

ah bu benim sorunumdu! "% 25" i arıyordum ama tabiki çalışma sayfasının bir ipekten ziyade .25 olması gerekiyordu. teşekkür ederim – As3adTintin