【问题标题】:Pushing 2-d Variant data into FormulaArray将二维变量数据推送到 FormulaArray
【发布时间】:2011-12-06 06:56:56
【问题描述】:

我最初有一个返回二维变量数组的 VBA 函数:

Public Function SplitIntoCells(some_data As String) As Variant()
End Function

我使用公式数组语法从另一个 vba 函数中调用它:

Public Function MyWrapper() as Variant
    MyWrapper = SplitIntoCells("somestring")
End Function

在 Excel 中,如果我选择了足够大的范围然后执行:

=MyWrapper()

按 CTRL+SHIFT+ENTER 后,数据会很好地拆分到该范围内的每个单独的单元格中。

但是为了自动化,如果我将 MyWrapper 更改为:

Public Function MyWrapper()
    ActiveSheet.Range("A1:E20").Select
    Selection.FormulaArray = SplitIntoCells("somestring")
End Function

以上行不通。我看到 Excel 中没有显示任何内容。

我做错了什么?

更新:

只是为了测试,如果我将 MyWrapper() 稍微修改为:

Public Function MyWrapper()
    Dim variant_temp() as Variant
    variant_temp = SplitIntoCells("somestring")
    ActiveSheet.Range("A1:E20").Select
    Selection.FormulaArray = variant_temp
End Function

variant_temp 在从 SplitIntoCells 返回后可以预见地具有二维数组,但即使在分配之后,后续的 Selection.FormulaArray 仍然没有任何内容。我确信我遗漏了一些非常明显的东西。

【问题讨论】:

    标签: excel vba array-formulas


    【解决方案1】:

    VBA 用户定义函数不能修改调用它的单元格或范围:它只能返回一个值。

    【讨论】:

    • 有没有其他方法可以实现我想要的?
    • 是的:您可以从 worksheet_change 或 worksheet_selectionchange 之类的事件中运行它。或者只是把它放在一个普通的 Sub 中并用一个按钮调用它......最佳方法取决于您的具体需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2019-11-23
    • 2014-12-24
    • 2021-08-16
    • 2015-07-15
    相关资源
    最近更新 更多