2014-07-11 67 views
0

我有一个调度excel宏,将每月的每日列表作为单独的excel工作表。在我的宏观中,“星期日”表总计每名员工的每小时工作时间,并给我每周的总时数。我试图创建一个函数,使我可以选择我需要的上下范围内的纸张,但是我无法使其工作。什么是问题?目前,我有:调用VBA函数

Function SampleSum(ByVal ZZ As Integer, ByVal XX As Integer) As Integer 
Application.Volatile 
SampleSum = Sheets(ZZ).Range("BA5") + Sheets(XX).Range("BA5") 
Sheets(XX).Range("BB5") = SampleSum 
End Function 

我希望能够“呼叫”功能以2个任意数量或变量服用ZZ & XX的地方。

+0

功能... – Nicolai

+1

从工作表中可以叫** **只返回一个值的函数的数到呼叫小区。您不能使用UDF来操作其他范围/单元格。 –

+1

请参阅[本文](http://stackoverflow.com/questions/23433096/using-a-udf-in-excel-to-update-the-worksheet)以获得解释和可能的解决方法。否则,你必须将其作为子程序来完成。 –

回答

1

首先,因为你宣布你的应用程序“善变”,从那里我不会编程编辑您的工作表,因为它可以在一个循环中去: http://msdn.microsoft.com/en-us/library/office/ff195441%28v=office.15%29.aspx 其次,函数返回的东西。一个子程序不会。如果你只需要在单元格中写入,我会推荐使用子程序。

Function SampleSum(ByVal ZZ As Integer, ByVal XX As Integer) As Integer 
    Application.Volatile 
    SampleSum = Sheets(ZZ).Range("BA5") + Sheets(XX).Range("BA5") 
End Function 

Sub Main() 
    Sheets(XX).Range("BB5") = SampleSum(ZZ, XX) 
End Sub 

ZZ和XX在“主”子可以是你的选择,你所描述的工作

+0

我的歉意,这只是一个示例函数,我试图找到一个工作。在原来的子代码是总和= 0 '对于= 5〜97 ' 总和= 0 '对于G =(C - 7)至c ' 总和=总和+表(克).Cells(一, 53) 'wbMain.Worksheets(c).Cells(a,54)= sum 'Next g 'Next a。我需要作为一个函数,将采取我选择的2张索引,而不是重复这个代码。我无法让它作为一个功能工作。如果我在宏运行后更新任何每日总数,上面的示例函数不会更新每周总数。我认为Application.Volatile将修复该问题 – Stove

+0

您是否尝试过使用“在工作表更改”事件? – Noldor130884

+0

我不认为我曾听说过。这是如何运作的? – Stove