如何获得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 
  1. 您应该使用error handling,因为单元格范围可能无效
  2. 为了更新这个函数,你需要通过添加一个像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