据我所知,VBA函数只能改变调用它们的单元格的内容。也就是说,我无法弄清楚为什么这段代码不起作用:
Function Test() As Double
ActiveCell.Offset(0, -3).Activate
Test = ActiveCell.Value
End Function
所以我的问题是,一旦我使用函数程序找到要激活的正确单元格,我该如何让函数将该单元格的值返回到调用函数的单元格?
答案 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)
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