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

时间:2012-09-19 19:43:46

标签: excel events vba excel-vba handlers

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

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

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

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

2 个答案:

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