我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)