Excel UDF не работает при использовании в листе
Я создал функцию, которая работает при активации через подпрограмму в моей книге, но при попытке активировать ее на листе (используя = имя_функции (аргументы))
Function calclkg(Optional table_name As String = "lkg_calc_params", Optional ByVal temp As Double = 110) As Double
SetTableValue table_name:=table_name, row_name:="Temp", col_name:="value", value:=temp
calclkg = GetValueFromTable(table_name:=table_name, row_name:="LKG calc", col_name:="value")
End Function
эта функция вызывает этот саб, который сгенерировал ошибку, которую я получаю
Sub SetTableValue(table_name As String, row_name As String, col_name As String, value As Variant, Optional ByVal sheet_name As Variant)
On Error GoTo errline
Dim WS As Worksheet
Dim wb As Workbook
Dim tbl As ListObject
Set WS = Application.Caller.Worksheet.Parent.Worksheets(sheet_name)
Set tbl = WS.ListObjects(table_name)
Dim Rhead As Range
Set Rhead = tbl.HeaderRowRange
col_index = Application.WorksheetFunction.Match(col_name, Rhead, 0)
Dim Rcol As Range
Set Rcol = tbl.ListColumns(1).DataBodyRange
row_index = Application.WorksheetFunction.Match(row_name, Rcol, 0)
' here is the line where I get the error:
tbl.ListColumns(col_index).DataBodyRange.Rows(row_index) = value
Exit Sub
errline:
MsgBox "Error # " & Err & " : " & Error(Err)
Resume Next
End Sub
при вызове функции через это солнце я получаю желаемый результат:
Sub Calc()
Dim temp As Double
temp = InputBox("temp:")
calclkg temp:=temp
End Sub
Я не могу обновить значение ячейки таблицы, используя эту строку при непосредственном вызове функции из моего листа (ошибка 1004)
tbl.ListColumns(col_index).DataBodyRange.Rows(row_index) = value
Я пробовал разные способы, но ни один из них не работал. лайк:
tbl.Range.Item(row_index + 1, col_index) = value
Что я делаю неправильно?
1 ответ
UDF не может каким-либо образом изменять структуру листа, например, копируя ячейки или изменяя шрифты; UDF может вызывать другие функции и подпрограммы, но тогда они находятся под теми же ограничениями, что и UDF.
По сути, UDF принимает параметры и возвращает значение в ячейку, в которой находится формула.