我在VBA中有一个UDF(用户定义函数),需要在Excel上修改单元格范围。
由于UDF无法做到这一点,我尝试使用事件调用。
当我举起自定义事件并尝试写入单元格时,我收到#Value错误。另一方面,应用程序事件如
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
可以写入单元格。
我的问题是如何通过调用UDF来更新其他单元格?
答案 0 :(得分:9)
这是一种可以规避约束的方法,你必须间接地做到这一点。从Excel - How to fill cells from User Defined Function?复制的方法:
在标准模块中:
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会更新公共变量,然后从Worksheet_Calculate
事件中读取这些变量以执行任何您喜欢的事情。
另一个更复杂的方法是从您的函数编写一个vbscript文件,该文件将尝试自动化Excel并通过Shell运行它。但是,我上面列出的方法更可靠。
答案 1 :(得分:-1)
如果在UDF函数中使用Application.Evaluate方法调用其他函数。 您可以更改工作表上的所有内容。(值,钢等)因为VBA不知道调用了哪个函数。