从工作表中调用的Excel VBA UDF是否可以传递除“范围”之外的任何Excel VBA对象模型类的实例?

我99%肯定答案是“不”,但是我想知道是否100%肯定的人可以这样说。

考虑一个VBA UDF:

Public Function f(x) End Function 

当你从工作表中调用这个时,'x'将是一个数字,string,布尔值,错误,数组或者'Range'types的对象。 它可以是,例如,“图表”,“ListObject”,或任何其他Excel-VBA对象模型类的实例吗?

(这个问题出现在我转移到Excel 2007并玩桌子,并想知道如果我可以写UDF接受他们作为参数,而不是Range 。答案似乎是没有,但后来我意识到我不知道一般来说肯定。)

你的怀疑是正确的 – 你只能通过有限的对象types。 例如,如果我在活动工作表上有表格,并且想知道它的列数,我可以创build一个名为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 

然后使用我的string的名称(如=TableColumnCount("Table1")在表单上调用它。

或者作为一个范围对象,如:

 Function TableColumnCount(tn As Range) As Integer TableColumnCount = tn.Columns.Count End Function 

然后调用它: =TableColumnCount(Table1)