【发布时间】:2013-06-15 16:27:43
【问题描述】:
我正在尝试使用 vba,但收效甚微。我想实现一个简单的函数,它根据年初到今天对一系列单元格的内容求和。不幸的是,当我调用该函数时,我得到了一个“循环引用”错误,我就是不明白为什么。任何帮助将不胜感激。
Public Function til2day(r As Integer) As Long ''supposed to receive cell("row") as parameter
Dim c As Integer
Dim c1 As Integer
Dim c_here As Integer
Application.Volatile True
c_here = ActiveCell.Column
c = 0
c1 = 34 ''column contains 1/1/2013 date
Range("AH4:OM4").Activate ''contains a timeline
Do While ActiveCell.Offset(0, c).Value <> Date
c = c + 1
Loop
If ActiveCell.Offset(0, c).Value = Date Then
c = ActiveCell.Offset(0, c).Column
End If
til2day = Application.WorksheetFunction.Sum(Range(Cells(r, c1).Address, Cells(r, c).Address))
Range(Cells(r, c_here).Address).Activate
End Function
【问题讨论】:
-
您应该能够使用 VBA 调试器跟踪问题。 F8 键将逐步引导您完成程序。在每一步,将光标悬停在变量上以查看它们的值。但是有一个问题,为什么在 DO 循环之外的 Value = Date 上有 IF?看起来很奇怪。
-
if 真的是多余的,我只是在仔细检查我所在的列是否有今天的日期作为值。至于使用调试器,问题是即使有检查点,用 F8 运行它,它也不会显示错误并正确计算。问题是,当我从单元格调用函数时(我可能应该提到这一点,我的错)
-
你是如何运行这个函数的?你有样品表吗?
-
嗯,我不知道如何做样表。布局很简单,我在顶部有一个全年的时间线,还有几个项目排成一行,有点像甘特图风格。然后我在结果网格中输入小时数(数字格式)。我希望能够通过调用此函数来填充一列,让函数识别行并对相应的值求和,并将其返回到我放置函数的单元格中( =til2day() )。如果这个解释不清楚,请告诉我(这听起来确实让我感到困惑,但我不知道如何做得更好,抱歉)谢谢
-
从工作表公式调用的函数无法以任何方式更改工作表(因此您的
.Activate将静默失败,并且结果(如果有)将无法预测)。
标签: excel circular-reference vba