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

Van*_*mex 3 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
Run Code Online (Sandbox Code Playgroud)

我的希望是...当我=Test(E6)在单元格E1中键入内容时,Excel将在E6中显示指定的文本。

Prz*_*min 6

是的,当然,这是可能的。

在此处输入图片说明

将此代码放在 VBA 编辑器的 Module1 中:

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
Run Code Online (Sandbox Code Playgroud)

此示例 UDF 的结果在另一个相邻单元格中返回。用户定义的函数UDF_RectangleArea来计算基于它的两个参数的矩形区域AB并返回导致向右的细胞。您可以轻松修改此示例函数。

通过使用 VBA评估函数绕过了 Microsoft 对函数施加的限制。Evaluate 只是从 UDF 中触发 VBA 宏。对单元格的引用由 传递Application.Caller。玩得开心!

UDF 限制文档:https : //support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-excel


Cha*_*ams 5

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
Run Code Online (Sandbox Code Playgroud)