4

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

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

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

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

4

2 回答 2

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

在工作表代码中:

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

这可以根据您的目的进行扩展。本质上,UDF 会更新公共变量,然后从Worksheet_Calculate事件中读取这些变量以执行...任何您喜欢的操作。

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

于 2012-09-19T23:58:29.610 回答
0

如果使用 UDF 函数中的方法调用其他函数,Application.Evaluate则可以更改工作表上的所有内容(值、钢等),因为 VBA 不知道调用了哪个函数。

例子:

Sub UDFfunction()
  Evaluate "otherfunc(""abc"")"
End Sub

Public Function otherfunc(ByVal str As String)
  ActiveSheet.Cells(1, 1).Value = str
End Function
于 2016-05-20T10:29:56.640 回答