VBA - 通过用户定义的函数更新其他单元格

use*_*104 4 excel events vba handlers excel-vba

我在VBA中有一个UDF(用户定义函数),需要在Excel上修改单元格范围.

由于UDF无法做到这一点,我尝试使用事件调用.

当我提出自定义事件并尝试写入单元格时,我得到#Value错误.另一方面,Application事件 Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)可以写入单元格.

我的问题是如何通过调用UDF更新其他单元格?

Dan*_*iel 9

这是一种可以规避约束的方法,你必须间接地做到这一点.从Excel复制的方法- 如何从用户定义的函数填充单元格?:

在标准模块中:

Public triggger As Boolean
Public carryover As Variant
Function reallysimple(r As Range) As Variant
    triggger = True
    reallysimple = r.Value
    carryover = r.Value / 99
End Function
Run Code Online (Sandbox Code Playgroud)

在工作表代码中:

Private Sub Worksheet_Calculate()
    If Not triggger Then Exit Sub
    triggger = False
    Range("C1").Value = carryover
End Sub
Run Code Online (Sandbox Code Playgroud)

这可以扩展为您的目的.从本质上讲,UDF会更新公共变量,然后从Worksheet_Calculate事件中读取...您喜欢的任何内容.

另一个更复杂的方法是从您的函数编写一个vbscript文件,该文件将尝试自动化Excel并通过Shell运行它.但是,我上面列出的方法更可靠.