Ошибка компиляции: несоответствие типа ByRef arugment: как вызвать значение в массиве - PullRequest
0 голосов
/ 15 октября 2018

В цикле я хочу проверить, есть ли значение в массиве, и если да, то перейти к следующей итерации.

Мое слабое понимание массивов блокирует меня, хотя:

Я использую функцию ниже (из: Проверьте, есть ли значение в массиве или нет с 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

Но мой саб ниже не работает:

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

Ошибка исходит из строки:

If IsInArray(i, iArray) Then

Я получаю Compile error: ByRef arugment type mismatchфункция IsInArray нуждается в long, и я подставил long в формулу, чтобы я не понял проблему ... Может кто-нибудь объяснить?

1 Ответ

0 голосов
/ 15 октября 2018

Распространенная ошибка.Ваша i переменная на самом деле Variant, следовательно, несоответствие.Вы должны ввести все переменные индивидуально, как это:

Dim i As Long, k As Long
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...