excel UDF在工作表中使用时不起作用

Posted

技术标签:

【中文标题】excel UDF在工作表中使用时不起作用【英文标题】:excel UDF doesn't work when used in sheet 【发布时间】:2015-01-02 09:57:50 【问题描述】:

我创建了一个函数,该函数在通过工作簿中的子激活时工作,但在尝试在工作表中激活它时(使用 =function_name(arguments))

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

通过这个 sun 调用函数时,我得到了想要的结果:

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

我做错了什么?

【问题讨论】:

您不能在单元格中使用 UDF 将值分配给其他单元格。 我会问你想要做什么,你需要UDF吗?看起来您可能会从 VLOOKUP 中受益。 【参考方案1】:

UDF 不能以任何方式更改工作表的结构,例如复制单元格或更改字体; UDF 可以调用其他函数和子例程,但它们与 UDF 受到相同的约束。

本质上,UDF 接受参数并向公式所在的单元格返回一个值。

【讨论】:

以上是关于excel UDF在工作表中使用时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

报告服务 (s-s-rS):报告页脚在导出到 excel 时不起作用

jquery datatables 按钮:['excel'] 在 document.ready() 中构建表格时不起作用,但在动态构建表格时起作用

我的 Excel 2010 宏快捷方式在我第一次启动 Excel 时不起作用,但只有在我第一次从 VBE 中手动运行它时才起作用

附加功能在复制的工作表中不起作用

spark read 在 Scala UDF 函数中不起作用

Excel VBA Application.Visible = false 在 Mac OSX 上不起作用