#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% выполнимо.