Aas*_*han 3 excel vba excel-vba with-statement udf
我试图在vba中移动平均值编码,但以下各处返回相同的值.
Function trial1(a As Integer) As Variant
Application.Volatile
Dim rng As Range
Set rng = Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row - a + 1, 2))
trial1 = (Application.Sum(rng)) * (1 / a)
End Function
Run Code Online (Sandbox Code Playgroud)
小智 6
该ActiveCell属性,因为没有在UDF属于它的变化.有时,它甚至不在同一个工作表上.
如果需要在工作表中引用自定义UDF函数所在的单元格,请使用Application.Caller方法.该Range.Parent属性可以用来明确识别的工作表(并避免进一步的混乱)在用......结束与声明.
Function trial1(a As Integer) As Variant
Application.Volatile
Dim rng As Range
with Application.Caller.Parent
Set rng = .Range(.Cells(Application.Caller.Row, 2), _
.Cells(Application.Caller.Row - a + 1, 2))
trial1 = (Application.Sum(rng)) * (1 / a)
end with
End Function
Run Code Online (Sandbox Code Playgroud)
您已应用Application.Volatile¹方法但允许通过不明确指定父工作表将范围平均为默认为ActiveSheet属性.
使用Excel Application对象计算平均值,返回SUM函数的结果和一些数学.使用工作表的AVERAGE函数可以在一个命令中返回相同的内容,但空白单元格的处理方式不同.
trial1 = Application.Average(rng)
Run Code Online (Sandbox Code Playgroud)
¹ 当整个工作簿中的任何内容发生变化时,不仅在影响其结果的某些内容发生变化时,易失性函数都会重新计算.