2016-04-04 19 views
0

Bir işleve bir işleve geçtikten sonra sorun yaşıyorum. Temel olarak, bazı bilinen değerlere karşı kontrol etmek istediğim bir dizi dizi içeren bir dizi geçiriyorum. Bunu denediğimde, uyumsuzluk hatasını alıyorum.Geçti Dizisi Eşleşmiyor

Sorunu msgbox ile teşhis etmeye çalıştım, ancak bu, kodun çalıştırılmasında olduğu gibi, kodun dizide diziyi gösterdiği gibi beni daha da şaşırttı. Daha sonra Tamam'ı tıklattığımda, msgbox komutu, hatalı bir hatayla karşılaştığı halde hatalı eşleşme hatasıyla ilgili hatalar görülebilir. Herkes bana neden uyumsuzluk olacağını söyleyebilir mi?

Hata:
Error

Kodu: bir koşul ilk kez karşılanmaktadır

Public Function A2LConvert(ByRef Software As Variant) As Variant 

For i = 0 To 6 
MsgBox (Software(i)) 
    If Software(i) = "A" Then 'Or "A1" Then 
     A2LConvert(i) = "A.txt" 
    ElseIf Software(i) = "C" Then 
     A2LConvert(i) = "C.txt" 
    ElseIf Software(i) = "B" Then 
     A2LConvert(i) = "B.txt" 
    ElseIf Software(i) = "D" Then 
     A2LConvert(i) = "D.txt" 
    ElseIf Software(i) = "E" Then 
     A2LConvert(i) = "E.txt" 
    ElseIf Software(i) = "F" Then 
     A2LConvert(i) = "F.txt" 
    ElseIf Software(i) = "G" Then 
     A2LConvert(i) = "G.txt" 
    Else 
     A2LConvert(i) = "" 
    End If 

Next i 

End Function 
+0

nasıl işleve değerini geçiyoruz:

(Sanırım) bu davranışı istediğiniz

bir ara dizi (tempAr) uygulayarak elde edilebilir? –

+0

Yapmaya çalıştığınız şey gerçekten net değil. Tahminim, değerleri doğrudan geçirilen dizide değiştirmek istediğinizdir, ancak yaptığınız şey, fonksiyonunuzu yeni değerle ('x.txt') geri çağırmaktır. Mantıksız. Bu noktada kabul edilir çünkü “yazılım”, “varyant” olarak bildirilir ve böylece fonksiyonunuz her şeyi kabul eder (neden her zaman varyantlarla çalışmanın nedeni kötü bir habbittir). Tüm mantık yanlış görünüyor ve semantik de iyi değil: "elseif" in yerine "select case" kullanmalısınız. Neyi başarmak istediğinizi açıkça belirtin ve size doğru kodu vereceğim. –

+0

da sorunuzu uygun MS Office ürünüyle etiketleyin: Excel veya Accces veya diğer –

cevap

1

, sizin koşullu ifade fonksiyonu A2LConvert geri çağırıyor, ancak geçiyor varyant ben (başlangıçta 0). Örneğin

,

A2LConvert(i) = ... 

aslında A2LConvert bir işlev çağrısı yapmadan ve 'Yazılım' varyantı olarak 0 geçiyor. Daha sonra, tür uyuşmazlığı hatasını tetikleyen msgbox çağrısında 0'ın sıfır özelliğine erişmeye çalışır.

Public Function A2LConvert(ByRef Software As Variant) As Variant 

Dim tempAr(6) As Variant 

For i = 0 To 6 
MsgBox Software(i) 
    If Software(i) = "A" Then 'Or "A1" Then 
     tempAr(i) = "A.txt" 
    ElseIf Software(i) = "C" Then 
     tempAr(i) = "C.txt" 
    ElseIf Software(i) = "B" Then 
     tempAr(i) = "B.txt" 
    ElseIf Software(i) = "D" Then 
     tempAr(i) = "D.txt" 
    ElseIf Software(i) = "E" Then 
     tempAr(i) = "E.txt" 
    ElseIf Software(i) = "F" Then 
     tempAr(i) = "F.txt" 
    ElseIf Software(i) = "G" Then 
     tempAr(i) = "G.txt" 
    Else 
     tempAr(i) = "" 
    End If 

Next i 

A2LConvert = tempAr 

End Function 
+0

Bunu çözdünüz. Bunun neden şimdi olduğunu anlıyorum, teşekkürler! –