我是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中显示指定的文本。
答案 0 :(得分:4)
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
答案 1 :(得分:3)
Excel VBA不允许用户定义的函数更改另一个单元格的值。 UDF被允许做的唯一事情(除了一些小的例外)是将值返回给它所调用的单元格。
答案 2 :(得分:0)
为什么不在E6中键入你的公式呢?这就是Excel逻辑:将您的公式放在您想要显示结果的位置。
答案 3 :(得分:0)
是的,当然可以。将此代码放入VBA编辑器的Module1中:
Function Rectangle(A As Integer, B As Integer)
Evaluate "Adjacent(" & Application.Caller.Offset(0, 1).Address(False, False) & "," & A & "," & B & ")"
Rectangle = "Area:"
End Function
Private Sub Adjacent(CellToChange As Range, A As Integer, B As Integer)
CellToChange = A * B
End Sub
此示例UDF的结果在另一个相邻的单元格中返回。用户定义的函数Rectangle
根据其两个参数A
和B
计算矩形区域,并在右侧的单元格中返回结果。
您可以轻松修改此示例功能。该工作由秘密的未公开的VBA函数Evaluate
完成。玩得开心!
这是Microsoft设置的UDF限制的链接。 https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel