编译错误:ByRef arugment type mismatch:如何调用数组中的值

Pie*_*e44 1 arrays excel vba excel-vba

在循环中,我想检查值是否在数组中,如果是,则跳到下一次迭代.

我对阵列的低级理解阻止了我:

我正在使用下面的函数(来自:检查值是否在数组中与Excel VBA),以查看值是否在数组中.

Public Function IsInArray(Vtobefound As Long, arr As Variant) As Boolean
    Dim i
    For i = LBound(arr) To UBound(arr)
        If arr(i) = Vtobefound Then
            IsInArray = True
            Exit Function
        End If
    Next i
    IsInArray = False

End Function
Run Code Online (Sandbox Code Playgroud)

但我的Sub下面仍然不起作用:

Sub CountCellstest()

    Dim i, k As Long
'   Dim iArray() As Single

    ReDim iArray(1 To 1) As Single

    For i = 1 To 3
        If IsInArray(i, iArray) Then 'ERROR HERE on the i

    GoTo next_iteration

        End If

            ReDim aArray(1 To 1) As Single
            iArray(UBound(iArray)) = 2
            ReDim Preserve iArray(1 To UBound(iArray) + 1) As Single
            'DO smth
            MsgBox "test"
next_iteration:
    Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

该错误来自该行:

If IsInArray(i, iArray) Then
Run Code Online (Sandbox Code Playgroud)

我得到Compile error: ByRef arugment type mismatch 的函数IsInArray需要很长时间,我在公式中放了很长时间,所以我不明白这个问题......有人可以解释一下吗?

Ror*_*ory 8

常见的错误.你的i变量实际上是Variant不匹配的.您必须单独键入所有变量,如下所示:

Dim i As Long, k As Long
Run Code Online (Sandbox Code Playgroud)

  • @ Pierre44或者只是养成在自己的行上声明每个变量的习惯.通过这种方式更容易发现这种类型的错误,恕我直言,更容易阅读. (3认同)