Existe uma função VBA que determinará o tipo de variável que está sendo tratada: VarType()
.
O VarType
de uma string é vbString
(8); o VarType
de um intervalo é vbArray+vbVariant
(8204). Você precisa testar cada elemento da sua matriz passada e lidar com isso de acordo. Uma maneira de fazer isso que é fácil de seguir é com Select Case
:
Function Separate(sp As String, ParamArray ArgList() As Variant)
Dim paramLoop As Long
Dim curRng As Range
Select Case VarType(ArgList(0))
Case vbArray + vbVariant
Separate = ArgList(0).Cells(1, 1).Value
Case vbString
Separate = ArgList(0)
End Select
Dim flag As Boolean
flag = True
For paramLoop = 1 To UBound(ArgList)
Select Case VarType(ArgList(paramLoop))
Case vbArray + vbVariant
For Each curRng In ArgList(paramLoop)
If flag Then
Separate = Separate & sp & curRng.Value
End If
flag = True
Next curRng
Case vbString
Separate = Separate & sp & ArgList(paramLoop)
End Select
Next paramLoop
End Function
E, é claro, o Select
pode ser expandido para cada um dos vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDate, vbBoolean, vbVariant, vbDecimal, vbByte
e até mesmo vbError
se você tiver um parâmetro vazio.