当我尝试写入函数中作为参数传递的范围时,为什么会出现1004错误?

时间:2014-05-27 15:55:04

标签: excel-vba vba excel

我正在编写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(应用程序定义的或对象定义的错误)。

我至少可以尝试做什么?

提前感谢您与我一起查看此问题!

2 个答案:

答案 0 :(得分:1)

您应该使用 Sub 而不是 UDF。

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

答案 1 :(得分:0)

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

注意函数定义中的拼写错误,可以通过使用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代码中的其他地方调用此函数(并且不是来自用户定义的工作表函数),但我仍然建议不要使用函数来操作对象。这应该由子程序完成,并使用函数返回值或计算表达式等。