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?

questionAnswers(2)

yourAnswerToTheQuestion