我正在计算过去一个月的数据。
Function Monthly_volume_given_velocity() As Double
Dim velocity As Double
Dim ind_vit As Integer
Dim ind_today As Integer
velocity= ActiveCell.Offset(0, -1).Value
With Sheets("2022")
ind_vel = .Range("A5:A13").Find(What:=velocity).Row
Dim rng As Range
rng = .Rows("1").Find(What:=Date, LookIn:=xlFormulas)
If Not rng Is Nothing Then ind_today = rng.Column: Debug.Print ind_today
Monthly_volume_given_velocity = Application.WorksheetFunction.Sum(.Range(.Cells(ind_vel , ind_today - 30), .Cells(ind_vel , ind_today )))
End With
End Function
我得到了一个#值!错误,尽管在调试模式下我得到了正确的Monthly_volume_given_velocity
值。
将ind_today
替换为它的期望值不会产生错误,所以我猜它来自Range.Find
过程。我从不同的线程得到了If Not rng...
,但它并没有解决这个问题。
2条答案
按热度按时间rta7y2nd1#
当UDF在任何错误上运行时,它将返回一个错误,在工作表中显示为
#VALUE
。现在很难判断函数中到底什么地方失败了,但我看到了一些问题:
ActiveCell
(或ActiveSheet
)。Excel会处理重新计算,如果包含公式的单元格未处于活动状态,则会触发重新计算。将单元格作为参数传递。Find
可能很棘手,请参阅Range.Find on a Date That is a Formula。我建议你手动搜索日期。Set
。int_today
将为0,并且下面的Sum
将获得一个无效的范围作为参数。我修改了你的功能。当然,
Debug.Print
-语句可以在函数工作后删除。如前所述,您必须将单元格作为公式中的参数传递,例如=Monthly_volume_given_velocity(B1)
。sg24os4d2#
范围是一个对象,因此必须使用Set定义,因此必须
如果你不知道的话,再加上一句关于.Find方法的注解:args(LookIn、LookAt等)是静态的,即如果在新调用中没有另外定义,则从最后一个调用中记住它们。这还包括使用用户界面中的“查找”对话框。为了安全起见,每次调用都应该提供所有参数。