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中显示指定的文本。
是的,当然,这是可能的。
将此代码放在 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
来计算基于它的两个参数的矩形区域A
和B
并返回导致向右的细胞。您可以轻松修改此示例函数。
通过使用 VBA评估函数绕过了 Microsoft 对函数施加的限制。Evaluate 只是从 UDF 中触发 VBA 宏。对单元格的引用由 传递Application.Caller
。玩得开心!
UDF 限制文档:https : //support.microsoft.com/en-us/help/170787/description-of-limitations-of-custom-functions-in-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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10522 次 |
最近记录: |