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

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

由于UDF不能做到这一点,我尝试使用事件调用。

当我提出一个自定义事件,并尝试写入单元格,我得到#Value错误。 另一方面,诸如Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)应用程序事件可以写入单元格。

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

这是一种可以绕开克制的方式,你必须间接地做。 从这个网站复制的方法:

在标准模块中:

 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 

在工作表代码中:

 Private Sub Worksheet_Calculate() If Not triggger Then Exit Sub triggger = False Range("C1").Value = carryover End Sub 

这可以扩大你的目的。 从本质上讲,UDF更新公共variables,然后从Worksheet_Calculate事件中读取公共variables来做任何你喜欢的事情。

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

如果在您的UDF函数中使用Application.Evaluate方法调用其他函数。 你可以改变表单中的所有内容(值,钢等)因为VBA不知道哪个函数被调用。