VBA:如何通过函数更改另一个单元格的值?
我是一个Excel VBA新手 如何通过用户定义的函数更改指定单元格的值?此代码有什么问题:VBA:如何通过函数更改另一个单元格的值?,vba,excel,Vba,Excel,我是一个Excel VBA新手 如何通过用户定义的函数更改指定单元格的值?此代码有什么问题: Function Test(ByVal ACell As Range) As String ACell.Value = "This text is set by a function" Test := "Result" End Function 我的愿望是。。。当我在单元格E1中键入=Test(E6)时,Excel将在E6中显示指定的文本。Excel VBA将不允许用户定义的函数更改另一单元格
Function Test(ByVal ACell As Range) As String
ACell.Value = "This text is set by a function"
Test := "Result"
End Function
我的愿望是。。。当我在单元格E1中键入
=Test(E6)
时,Excel将在E6中显示指定的文本。Excel VBA将不允许用户定义的函数更改另一单元格的值。
UDF唯一可以做的事情(除了一些小的例外)是将值返回到调用它的单元格。那么为什么不在E6中键入公式呢?这就是Excel逻辑:将公式放在希望结果显示的位置。VBA UDF可以用作数组函数,将结果返回到多个相邻单元格。 在E1和E2中输入公式,然后按Ctrl-Shift-Enter键创建多单元格数组公式。您的UDF将如下所示:
Public Function TestArray(rng As Range)
Dim Ansa(1 To 2, 1 To 1) As Variant
Ansa(1, 1) = "First answer"
Ansa(2, 1) = "Second answer"
TestArray = Ansa
End Function
是的,当然有可能 将此代码放入VBA编辑器的模块1中:
Function UDF_RectangleArea(A As Integer, B As Integer)
Evaluate "FireYourMacro(" & Application.Caller.Offset(0, 1).Address(False, False) & "," & A & "," & B & ")"
UDF_RectangleArea = "Hello world"
End Function
Private Sub FireYourMacro(ResultCell As Range, A As Integer, B As Integer)
ResultCell = A * B
End Sub
此示例UDF的结果在另一个相邻单元格中返回。用户定义函数UDF_RectangleArea
根据其两个参数A
和B
计算矩形面积,并在右侧单元格中返回结果。您可以轻松地修改此示例函数
使用VBA函数可以绕过Microsoft对函数施加的限制。Evaluate仅从UDF中触发VBA宏。对单元格的引用由Application.Caller
传递。玩得开心
UDF限制文档:我正在创建一个长函数,它将返回两个结果。由于它是一个很长的函数,并且结果只能计算一次,因此从不同的单元格调用两次会降低显示结果时工作表的速度。但是,如果我的问题的答案是不可能的,我想,我会再添加一个参数,指定需要哪一个结果。啊哈,这也是一个很好的解决方案。谢谢@Charles,我很感激。:-)酷!我想
Rectangle=“Hello world”
应该是UDF\u RectangleArea=“Hello world”
,不是吗?@vpprof我没有收到你的评论。我看不到您正在引用的Rectangle=“Hello world”
。它在您的函数UDF\u RectangleArea
中,就在函数结束之前…@vpprof是的,您是对的。我已在答复中更正了它。非常感谢。