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

2024-04-11

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

考虑一个 VBA UDF:

Public Function f(x)

End Function

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

(这个问题源于我转向 Excel 2007 并使用表格,并想知道我是否可以编写接受它们作为参数而不是Range。答案似乎是否定的,但后来我意识到我总体上并不确定。)


您的怀疑是正确的 - 您只能传递有限的对象类型。例如,如果我在活动工作表上有一个表并且想知道它的列数,我可以创建一个名为的 UDFTableColumnCount并将表名称传递到函数中,例如:

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

然后用我的能力名称作为字符串在工作表上调用它,例如=TableColumnCount("Table1").

或者作为范围对象,例如:

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

然后这样称呼它:=TableColumnCount(Table1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从工作表调用的 Excel VBA UDF 是否可以传递除“Range”之外的任何 Excel VBA 对象模型类的实例? 的相关文章

随机推荐