如何获得Excel中的VBA函数来返回活动单元格的值?
我知道VBA函数只能改变调用它们的单元格的内容。 这就是说,我不明白为什么这个代码不起作用:
Function Test() As Double ActiveCell.Offset(0, -3).Activate Test = ActiveCell.Value End Function
所以我的问题是,一旦我使用一个函数的过程来find正确的单元格激活,然后如何获得函数返回该单元格的值调用该函数的单元格?
“调用函数的单元”是ActiveCell
您将ActiveCell
设置为该函数内的其他位置( Offset(0,-3)
)(使用ActiveCell.Offset(0, -3).Activate
)。
简单地说,不要调用Activate
命令,它应该工作;
Function Test() As Double Test = ActiveCell.Offset(0, -3).Value End Function
我不会使用活动单元格 – 活动单元格可以很容易地返回一个不正确的值。
试试这个testing:
在D1单元格中input你的函数= Test()
在单元格A1中input此公式= D3
在单元格A3中input任何值。
在单元格D3中input一个不同于A3中的值。
公式将返回值D3作为D3的活动单元格的左侧,因此将返回单元格A3中input的值,而不是A1中的值(与D3中input的值相同)。
Application.Caller是调用函数的单元格的引用,所以:
Function Test() As Double Test = Application.Caller.Offset(, -3).Value End Function
- 您应该使用error handling,因为单元格范围可能无效
- 为了更新这个函数,你需要通过添加一个像
Rand
一样的函数或者在你的函数中使用Application.Volatile
来实现函数的volatile。
码
Function Test() Application.Volatile Dim rng1 As Range On Error Resume Next Set rng1 = ActiveCell.Offset(0, -3) On Error GoTo 0 If Not rng1 Is Nothing Then Test = rng1.Value Else Test = "Invalid range" End If End Function