如何在Excel中获取VBA函数以返回活动单元格的值?

时间:2015-05-23 06:06:09

标签: excel vba excel-vba

据我所知,VBA函数只能改变调用它们的单元格的内容。也就是说,我无法弄清楚为什么这段代码不起作用:

Function Test() As Double

ActiveCell.Offset(0, -3).Activate
Test = ActiveCell.Value

End Function

所以我的问题是,一旦我使用函数程序找到要激活的正确单元格,我该如何让函数将该单元格的值返回到调用函数的单元格?

3 个答案:

答案 0 :(得分:2)

我不会使用活动单元格 - 活动单元格很容易返回不正确的值。

试试这个测试:

在单元格D1中输入您的函数 = Test()

在单元格A1中输入此公式 = D3

在单元格A3中输入任意值。

在单元格D3中输入一个与A3中的值不同的值。

公式返回活动单元格左侧的值3,即D3,因此返回您在单元格A3中输入的值而不是A1中的值(这与您在D3中输入的值重复)。

Application.Caller 是对调用该函数的单元格的引用:

Function Test() As Double

    Test = Application.Caller.Offset(, -3).Value

End Function

答案 1 :(得分:0)

"调用函数的单元格#34;是ActiveCell

您已将ActiveCell设置为该函数内的其他内容(Offset(0,-3))(使用ActiveCell.Offset(0, -3).Activate)。

简单地说,不要调用Activate命令,它应该可以工作;

Function Test() As Double
Test = ActiveCell.Offset(0, -3).Value
End Function

答案 2 :(得分:0)

  1. 您应该使用错误处理,因为单元格范围可能无效
  2. 为了使函数更新,您需要通过在Rand中添加Test等函数或在函数内使用Application.Volatile来使函数变为volatile,如下所示< / LI>

    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