#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