我如何使用表格作为Excel VBA中的函数的input?

我有一个function,我想更一般化。 但是我不能把函数的最后部分作为函数的input。

我如何使用表格作为函数的input? 我想打破表名称,并将其用作input,所以我可以在其他上下文中使用该函数。

Function GetTotalHours("Tablename?" As ??, columnNumber As Integer) As Integer For Each Row In [Tablename].Rows getTotalHours = getTotalHours + DateTime.Hour(Row.Columns(columnNumber).Value) Next End Function 

我可以用一个string做这个怎么样?

这些表以名称范围存在,您可以直接使用.Range(name)来访问这些表。

 Function GetTotalHours(tableName As String, columnNumber As Integer) As Integer Dim r As Range Dim c As Range Set r = ActiveSheet.Range(tableName).Columns(columnNumber) For Each c In r.Cells GetTotalHours = GetTotalHours + DateTime.Hour(c.Value) Next End Function 

你也可以通过标题而不是数字:

 Function GetTotalHoursByHeading(tableName As String, columnName As String) As Integer Dim r As Range Dim c As Range Set r = ActiveSheet.Range(tableName & "[" & columnName & "]") For Each c In r.Cells GetTotalHoursByHeading = GetTotalHoursByHeading + DateTime.Hour(c.Value) Next End Function 

如果你想避免一个UDF,你可以使用这个工作表公式

 =SUMPRODUCT(HOUR(Table1[Hours]))