¿Por qué mi función de hoja de cálculo se comporta de manera diferente a cuando se llama desde el código?
Cuando llamo a la función desde Excel (en una celda):
=allVlookup(O24,A:D,3,"")
vs via vba
MsgBox allVlookup(Range("O24"), Range("A:D"), 3, "")
Obtengo diferentes resultados. Cuando se me llama desde Excel, solo obtengo la primera coincidencia, pero cuando hago llamadas desde un sub de prueba vba con parámetros idénticos (excepto la adición deRange
a los argumentos para permitir que el sub se ejecute), obtengo los resultados completos (que es más de uno).
La función que estoy usando es:
Public Function allVlookup(lookupRange As Range, tableRange As Range, colIndex As Integer, Optional delimiter As String = "") As String
Dim c As Range
Dim firstAddress As String
'MsgBox tableRange.Address ' this is correct
'With Sheets(4).Range("A1:C12").Columns(1)
'With Range("A1:C12").Columns(1)
'this doesn't allow things to work right either (???)
'Set tableRange = Range("A:D")
'Set lookupRange = Range("O24")
'search only the first column for matches
With tableRange.Columns(1)
Set c = .Find(what:=lookupRange.Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
'add the delimiter
If (allVlookup <> "") Then
allVlookup = allVlookup + delimiter
End If
'append value to previous value
allVlookup = allVlookup + c.Offset(0, colIndex).Value
Set c = .FindNext(c)
'exit conditions
'no match found
If (c Is Nothing) Then
Exit Do
'we're back to start
ElseIf (c.Address = firstAddress) Then
Exit Do
End If
Loop
End If
End With
End Function
No puedo explicar por qué sucede esto.
¿Qué puedo hacer para que las salidas sean idénticas?