Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA函数。跨多个工作表运行累积成本_Vba_Excel - Fatal编程技术网

VBA函数。跨多个工作表运行累积成本

VBA函数。跨多个工作表运行累积成本,vba,excel,Vba,Excel,很久了,第一次 我正在为油气田工作中的修井机创建一张工作表。每张图纸的结构相同,但代表不同的工作日。当需要新的工作日时,我有添加和减少工作表的按钮,这使我的主要问题变得复杂: 我需要创建一个函数来计算工作簿中截至该工作表的各种类别的累计成本。我需要一种方法来引用与包含函数的单元格相邻的单元格(包含当天的成本)以及上一张工作表的累积成本(或上一张工作表的每日成本,在同一单元格中,一张工作表后面)以创建新的累积值。我希望每张表的累计到当天为止都是累计的 一个子程序将更有利于实现这一点,但我不希望有人

很久了,第一次

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

我需要创建一个函数来计算工作簿中截至该工作表的各种类别的累计成本。我需要一种方法来引用与包含函数的单元格相邻的单元格(包含当天的成本)以及上一张工作表的累积成本(或上一张工作表的每日成本,在同一单元格中,一张工作表后面)以创建新的累积值。我希望每张表的累计到当天为止都是累计的

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

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

回顾工作表结构:

2列:每日成本、累计成本。 每张纸的结构都相同。 累计值应为同一单元格中每个前一张工作表的每日值的总和


谢谢你的帮助

IIUC您希望您的自定义项如下所示:

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

函数名是我建议开发人员不要缩写标识符的众多原因之一。使用auto complete/intellisense/无论你想叫什么,长(描述性)名称不再是问题。哈,我甚至没有注意到这一点。Cum加上一个长u,是石油和天然气行业中经常使用的一个词,用来代替累积值。这是一个有趣的组合。谢谢你,这是完美的。application.caller.address部分是关键,我以前从未见过。
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