VBA功能。跨多个工作表运行累计成本

时间:2017-06-20 13:54:12

标签: excel vba excel-vba

很长一段时间,第一次。

我正在为油气田工作中的修井机创建一张表。每张纸的结构相同,但代表着不同的工作日。我有按钮,在需要新的日子时添加和减少工作表,这使我的主要问题变得复杂:

我需要创建一个函数来计算工作簿中该表之前各种类别的累积成本。我需要一种方法来引用与包含该功能的单元格相邻的单元格(包含当前日期的成本),以及之前工作表的累积成本(或每张先前工作表的每日成本,在同一单元格中返回一张纸张)来创建新的累积价值。我希望每张工作表的累计数累积到当天。

子程序会更有利于此,但我不希望有人必须单击按钮才能在这些单元格中生成累积。它需要在添加信息时自动计算。

到目前为止我的内容如下。工作表按作业中的编号日命名(1,2,3,4等),每个工作表中的单元格AD7也包含作业当天的值。基本上我需要的是一种提取和使用“每日”输入单元格地址的方法。

Function Cat_Cum(daily)
Dim day, i As Integer
day = Cells(7, 30)

For i = 1 To day
    If i = 1 Then
        Cat_Cum = Sheets(i).Cells(daily.Address)
    Else
        Cat_Cum = Sheets(i).Cells(daily.Address) + Cat_Cum
    End If

Next i

End Function

回顾工作表结构:

2列:每日费用,累计费用。 每张纸的结构相同。 累积量应该是同一单元格中每个先前工作表每日值的总和。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

IIUC你希望你的UDF是这样的:

Public Function Cat_Cum(daily As Range)
  Cat_Cum = daily.Value2
  If Application.caller.Parent.Name = "1" Then Exit Function

  Cat_Cum = Cat_Cum + _
    Worksheets(CStr(Application.caller.Parent.Name - 1)).Range(Application.caller.Address).Value2
End Function

所以在名为“1”,“2”,“3”等的每个工作表中,在您键入的累积列中,在第2行中填写=Cat_Cum(A2)并填写。如果它是另一列,则替换每日内容的列代替A