传递数组不匹配

Passed Array Mismatch

我在将数组传递给函数后遇到问题。基本上我正在传递一个数组,其中包含我想根据一些已知值检查的一系列字符串。当我尝试这样做时,我得到了不匹配错误。

我试图用 msgbox 诊断问题,但这让我更加困惑,因为当 运行 代码消息框弹出并在数组中显示字符串 the 时。然后,当我单击“确定”时,msgbox 命令显然会出现不匹配错误,即使它刚刚显示了正确的信息。谁能告诉我为什么会出现不匹配?

错误:

代码:

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

第一次满足条件时,您的条件表达式调用函数 A2LConvert,但它传递的是变体 i(最初为 0)。

例如,

    A2LConvert(i) = ...

实际上是对 A2LConvert 进行函数调用并将 0 作为 'Software' 变体传递。然后它会尝试访问该 msgbox 调用中 0 的第零个 属性,这会触发类型不匹配错误。

(我认为)您想要的行为可以通过实现中间数组 (tempAr) 来实现:

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