VBA:如何通过函数更改另一个单元格的值?

时间:2010-10-02 07:27:59

标签: excel vba excel-vba

我是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中显示指定的文本。

4 个答案:

答案 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根据其两个参数AB计算矩形区域,并在右侧的单元格中返回结果。

您可以轻松修改此示例功能。该工作由秘密的未公开的VBA函数Evaluate完成。玩得开心!

这是Microsoft设置的UDF限制的链接。 https://support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel