2013-10-20 92 views
1

我有一個功能,我想使更一般。但是我不能讓函數的最後部分作爲函數的輸入。如何使用表格作爲Excel vba中函數的輸入?

我如何使用表格作爲函數的輸入?我想分解表名並將其用作輸入,以便我可以在其他上下文中使用該函數。

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 

我可以這樣做一個字符串一些如何?

+0

這是一個偉大的鏈接,看看:http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp – Ioannis

回答

1

表格以命名區域存在,您可以直接使用.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 
+0

我仍然無法得到這個工作。你是否將表格稱爲表格?因爲我的意思是我在一張紙上的特定表格。而不是整張紙。就好像我在Sheet1上有一個名爲trainingData的故事。 – Sukakka

+0

對不起,我真的認爲你的意思是表=工作表。我編輯了答案。 – KekuSemau

1

如果你想避免UDF,您可以使用此工作表公式

=SUMPRODUCT(HOUR(Table1[Hours])) 
相關問題