Я пишу код, который будет искать конкретную позицию вхождения значения в диапазоне. Мой подход заключается в создании цикла с использованием метода Find для предварительно определенного диапазона поиска на основе входных данных и добавления каждого результата поиска в коллекцию. Тем не менее, когда я вызываю UDF в другом подпрограмме, код работает как задумано, но при помещении в Excel он возвращает 0 с теми же входными данными. Я пробовал F8 через UDF в Excel и, по-видимому, метод Find ничего не возвращает при использовании в Excel, в то время как он работает нормально, когда UDF вызывается другим подпрограммой. Я включил код ниже. Любой вклад будет принята с благодарностью.
Public Function CROSSEDVOLUME(dt As Variant, datarange As Range, date_col As Long, real_vol_col As Long, abs_vol_col As Long) As Double
Dim filtered_arr() As Variant
Dim i As Long, coll As Collection
Dim ori_col As Long, ori_row As Long
Dim find_res As Range, search_range As Range, first_occur As String
ori_row = datarange.Cells(1, 1).Row
ori_col = datarange.Cells(1, 1).column
Set coll = New Collection
'Setting search range
Set search_range = Range(datarange.Cells(1, date_col),
datarange.Cells(datarange.Rows.count, date_col))
If search_range.Cells(1, 1).Value = dt Then
coll.Add 1
first_occur = search_range.Cells(1, 1).Address
End If
Set find_res = search_range.Find(dt, search_range.Cells(1, 1), xlValues, xlWhole, xlByRows, xlNext, False, False)
'Code stucks here
If find_res Is Nothing Then
CROSSEDVOLUME = 0
Exit Function
Else
If find_res.Address <> search_range.Cells(1, 1).Address Then
first_occur = IIf(first_occur = "", find_res.Address, first_occur)
coll.Add find_res.Row - ori_row + 1
Set find_res = search_range.Find(dt, find_res, xlValues, xlWhole, xlByRows, xlNext, False, False)
Do While Not find_res Is Nothing And find_res.Address <> first_occur
coll.Add find_res.Row - ori_row + 1
Set find_res = search_range.Find(dt, find_res, xlValues, xlWhole, xlByRows, xlNext, False, False)
Loop
End If
End If
CROSSEDVOLUME = coll.count
End Function