从自定义 VBA 函数(非子函数)写入 Excel 工作表

Posted

技术标签:

【中文标题】从自定义 VBA 函数(非子函数)写入 Excel 工作表【英文标题】:Writing into Excel worksheet from custom VBA function (not sub) 【发布时间】:2013-12-25 01:40:17 【问题描述】:

非常感谢您帮助我将自定义 VBA 函数中的数据写入 Excel 工作表。我已经能够从自定义 VBA 子例程编写,但在执行 VBA 函数时出现错误。在示例代码中,“Sub write 2”和“Sub write 3”工作得很好。但是“功能测试 2()”会生成“值!”在它的单元格中并且 write3 没有被执行。

Sub write2(r As Integer, c As Integer, d As Double)
    Dim a, b As Integer
    For a = r To r + 1
        For b = c To c + 1
            Cells(a, b).Value = d
        Next b
    Next a
End Sub

Sub write3()
    Call write2(3, 60, 0.437)
End Sub

Function test2() As Double
    Call write3
    test2 = 1#
End Function

【问题讨论】:

Cannot VBA write data to cells in Excel 2007/2010 within a funtion的可能重复 这实际上是可能的 - 尽管很复杂 - 请参阅上面的链接,这与您的请求相同 你好@brettdj:谢谢!看起来我确实有同样的问题。不幸的是,解决方法似乎在代码中引入了很多复杂性。所以,我将把函数转换成一个子程序。 是的,更好的选择:) @user3133655:子程序确实是最好的方法。就个人而言,我会在这里写一个 Sub 和一个 Function。 Sub 遍历我的数据,将其输入到我的函数中,然后函数将值返回给 Sub,Sub 将其输出到我想要的任何地方。当然,这是假设您绝对必须使用函数。否则,一个大潜艇会切断它(或多个小潜艇互相呼叫)。 ;) 【参考方案1】:

根据Chip Pearson's great website:

UDF 只能向调用它的单元格返回一个值——它不能修改任何单元格的内容或格式,也不能修改 Excel 的操作环境。如果您尝试更改任何内容,该函数将立即终止并向调用单元格返回 #VALUE 错误。

【讨论】:

你好@Lance:谢谢。在这种情况下,您能帮我了解如何将数据从 UDF 传输到 Excel 工作表的多个单元格吗? @user3133655,你真的必须解释为什么你需要它,上下文对于解决方案很重要。您可能应该根据您想要完成的任务(但要具体)创建一个不同的问题。 然后使用正常的控件和正常的 subs 和函数,不需要 UDF。只需将其全部绑定到一个按钮(或对事件稍加工作)。 您好@LanceRoberts:我正在尝试完成以下工作:(1)将某些行中的数据读取到excel函数中(2)在函数中操作数据(3)将数据输出到excel表中。约束是:(i)函数在每一行上执行(ii)输入数据来自该行和所有前面的行。我想到的一些替代解决方案是将数据输出到文本文件或编写子例程(而不是 UDF),但我认为这两个没有那么优雅。这有帮助吗? 实际上,在这种情况下,UDF 并不优雅。使用一些 Active-X 控件调用的普通子程序。

以上是关于从自定义 VBA 函数(非子函数)写入 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

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

EXCEL 的自定义 VBA 函数中的用户定义警告

通过用户定义的函数VBA缩短excel公式

易失性用户定义函数未按预期重新计算(VBA/Excel)

VBA宏运行速度为啥比Excel自带函数慢

java 调用excel vba