【问题标题】:Why do I get a 1004 Error when I try to write into a range passed as parameter in a function?当我尝试写入作为函数参数传递的范围时,为什么会出现 1004 错误?
【发布时间】:2014-05-28 00:37:27
【问题描述】:

我正在编写一个 Excel 函数,我希望它可以选择将第二个结果写入

Public Function foo(A As String, B As String, C As String, Optional optionalRes As Range = Nothing)

...
If not optionalRes is Nothing then
     optionalRes.Value="Result!"
End If

End Function

不幸的是,这不起作用我收到此错误:模块 fooBar 的过程 foo 中的错误 1004(应用程序定义或对象定义错误)。

我想要做的至少是可能的吗?

提前感谢您和我一起研究这个问题!

【问题讨论】:

  • 通常不可能使用从工作表调用的 UDF 以任何方式操作工作表对象。 stackoverflow.com/a/15671691/1467082
  • Re: 以上,有一些技巧可以解决这个限制,但我不建议这样做。

标签: excel vba


【解决方案1】:

您应该使用 Sub 而不是 UDF。

UDF 用于返回值,而不是通过副作用更改单元格。

【讨论】:

    【解决方案2】:

    这里有几点需要考虑...

    请注意函数定义中的拼写错误,这可以通过使用 Option Explicit 来避免。 optionaRes != optionalRes。但我认为应该提高 424,而不是 1004。

    另外,值得注意的是:It's generally not possible to use a UDF called from the worksheet to manipulate the worksheet objects in any manner whatsoever

    这可能不适用于您,如果您是从 VBA 代码的其他地方调用此函数(并且 不是 从用户定义的工作表函数),但我仍然建议不要使用函数来操作对象。这应该由子程序完成,并使用函数来返回值或评估表达式等。

    【讨论】:

    • 谢谢,我更正了错字以使事情更清楚。但实际上,我认为有一个可以从函数返回另一个结果的目标会很方便。也许更好的解决方案是数组公式,但我从未创建过这样的函数......有什么想法吗?
    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多