Dlaczego moja funkcja arkusza kalkulacyjnego zachowuje się inaczej niż w przypadku wywołania z kodu?
Kiedy wywołam funkcję z Excela (w komórce):
=allVlookup(O24,A:D,3,"")
vs via vba
MsgBox allVlookup(Range("O24"), Range("A:D"), 3, "")
Mam różne wyniki. Po wywołaniu z Excela otrzymuję tylko pierwszy mecz, ale podczas wywoływania z sub vba test o identycznych parametrach (z wyjątkiem dodawaniaRange
do argumentów pozwalających na uruchomienie sub) otrzymuję pełne wyniki (więcej niż jeden).
Używana przeze mnie funkcja to:
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
Nie potrafię wyjaśnić, dlaczego tak się dzieje.
Co mogę zrobić, aby uzyskać identyczne wyniki?