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不知道哪个函数被调用。