VBA — Ошибка 1004 — Поиск по другой книге заканчивается ошибкой

#excel #vba #excel-formula

Вопрос:

Я пишу функцию, чтобы использовать формулу XLOOKUP, чтобы получить 1 числовое значение из другой книги и вернуть его как двойное/запятая число. Вот код:

 Function searchColumnVLP(ByRef b As Worksheet, ByRef v As Variant) As Double
Dim Val As Variant

Val = Application.WorksheetFunction.XLookup(v, b.Range("A:A"), b.Range("T:T"))

searchColumnVLP = Val

End Function
 

Демо может быть:

 Public Sub CreateTable_Click()
'Open an invisible excel app to store the correct WB
Set appExcel = New Application
appExcel.Visible = False

Dim wb As Workbook
Dim ws As Worksheet
Dim t as Range

'Worksheets will remain invisible, no new window appears in the screen '
Set wb = GetObject("*PATH of a xlsx file different from the currently open one with multiple sheets*")
Set ws = wb.Sheets("*The sheet with the data*")
Set t = ws.Range("B2")

t.Value = searchColumnVLP(ws, "123")
wsData.Close

wsSource.Application.Quit
End Sub
 

Моя проблема заключается в ошибке «1004» «Не удалось получить свойство XLOOKUP класса WorksheetFunction», я не знаю, как это решить.

Вал, вероятно, может быть «без ценности» или «неназначен», но это всего лишь мое предположение, основанное на том, что я знаю о VBA (не так много :D).

Мы ценим любую помощь! Спасибо

Ответ №1:

XLOOKUP в настоящее время не является поддерживаемым методом функции рабочего листа.

Один из способов обойти это, не написав слишком много кода VBA, состоял бы в том, чтобы вместо кода VBA поместить функцию XLOOKUP в ячейку, в которой вы хотите получить значение.

Например:

 Set t = ws.Range("B2")

t.Formula2 = "=XLOOKUP(lookup_value,lookup_array,return_array)"
 

Имейте в виду, что массив поиска значения поиска и возвращаемый массив в этом примере должны быть отформатированы в виде текста, поэтому для этого вам потребуется несколько строк кода, но это на 100% выполнимо.