Как передать массив в функцию

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь передать массив в функцию в VBA EXCEL. Я не могу найти правильный пример, как я пытаюсь сделать

Я пытаюсь передать массив в функцию В объявлении функции, я пытаюсь установить переменный массив как variant или ByRef, но не получается, в чем я не прав?

 Dim Retarray(1 To 6, 1 To 2) As String  
  

Это мой массив
Затем попробуйте передать функцию как

 Smap = checkDevNo(Retarray, Right(CellArray(i, 1), 1))
  

Это мое объявление функции

 Function checkDevNo(ByRef aaray() As String, aa As Character) As String

Select Case aa

Case "1"
    For j = 1 To 6
        If aaray(j, 1) = 6 Then
            checkDevNo = j
        End If
    Next j
Case "2"
    For j = 1 To 6
        If aaray(j, 1) = 7 Then

        End If
    Next j
End Select
End Function
  

ошибка компиляции пользовательский тип определения не определен??

Комментарии:

1. Редактор выделяет слово Character , поскольку оно предупреждает о том, что пользовательский тип не определен…

2. Обратите внимание, что ByRef это неявное значение по умолчанию: оба параметра этой функции передаются по ссылке. Один явно, другой неявно.

Ответ №1:

IIRC, Character не является типом VBA. Вместо этого вы должны передать его как String или Byte . В Visual Basic отдельные символы также могут храниться в строках фиксированной длины ( Dim myChar As String * 1 ), но этот синтаксис не поддерживается для параметров метода.

Итак, ваше объявление функции должно выглядеть следующим образом:

 Function checkDevNo(ByRef aaray() As String, aa As String) As String
    ...
End Function
  

Ответ №2:

Если мы говорим о Excel VBA, то вам нужно будет сделать следующее:

 Function checkDevNo(aaray As Variant, aa As String) As String

    Select Case aa

        Case "1"
            For j = 1 To 6
                If aaray(j, 1) = 6 Then
                    checkDevNo = j
                End If
            Next j
        Case "2"
            For j = 1 To 6
                If aaray(j, 1) = 7 Then

                End If
            Next j

    End Select

End Function