В Excel я написал Separate
функцию vba следующим образом:
Function Separate(sp As String, ParamArray ArgList() As Variant)
Dim paramLoop As Long
Dim curRng As Range
Separate = ArgList(0).Cells(1, 1).Value
Dim flag As Boolean
flag = False
For paramLoop = 0 To UBound(ArgList)
For Each curRng In ArgList(paramLoop)
If flag Then
Separate = Separate & sp & curRng.Value
End If
flag = True
Next curRng
Next paramLoop
End Function
Эта функция предназначена для объединения произвольного количества содержимого, разделенного строкой, указанной в качестве первого аргумента.
Например, =Separate(", ",A1:B2,A2)
возвращает Alan, Bill, Carl, Dale, Bill
. (Предположим, что эти имена были сохранены в ячейках A1
, A2
, B1
и B2
.)
Это становится проблемой, если константа, а не ссылка передается второму (и третьему и т.д.) Аргументу, такому как =Separate(", ","Alan",A2:B2)
. Это потому, что мой код предполагает, что ArgList() As Variant
является объектом Range
.
Как VBA может определить, передается ли каждый аргумент со ссылкой или константой? Или как изменить код так, чтобы он выполнял одинаковые действия независимо от того, передан ли аргумент со ссылкой или константой?