我99%确信答案是否定的,但是我想知道是否100%肯定的人可以这么说。

考虑一个VBA UDF:

Public Function f(x)

End Function

当您从工作表中调用此函数时,“x”将是数字,字符串,布尔值,错误,数组或“范围”类型的对象。可以说,它是“图表”,“ListObject”或任何其他Excel-VBA对象模型类的实例吗?

(这个问题源于我迁移到Excel 2007并使用Tables的问题,想知道是否可以编写将UDF接受为参数而不是Range的UDF的答案。似乎没有,但后来我意识到我不知道一般而言。)

最佳答案

您的怀疑是正确的-您只能传递有限的对象类型。例如,如果我在 Activity 工作表上有表,并且想知道它的列数,则可以创建一个名为TableColumnCount的UDF,并将表名传递给类似以下的函数:

Function TableColumnCount(tn As String) As Integer
    Dim myTableName As ListObject
    Dim ActiveS As Worksheet
    Set ActiveS = ActiveWorkbook.ActiveSheet
    Set myTableName = ActiveS.ListObjects(tn)
    TableColumnCount = myTableName.Range.Columns.Count
End Function

然后在工作表上将其命名为myable作为字符串,例如=TableColumnCount("Table1")

或作为范围对象:
Function TableColumnCount(tn As Range) As Integer
    TableColumnCount = tn.Columns.Count
End Function

然后像这样命名:=TableColumnCount(Table1)

09-05 03:04