Excel VBA从用户定义的函数分配值到命名范围失败错误1004

我有一个模块的function。 该function定义如下:

Public Function CourseSetup(ByVal SROfferId As Integer) as string 

当调用该函数时,以下行失败:

 Worksheets("CourseEvaluation").Range("CourseName").value = "1234" 

失败,错误1004。

子(macros)中的同一行起作用。 CourseName是一个名为ranged的单元。 获得上述范围的价值。

在直接窗口中:

 ?Worksheets("CourseEvaluation").Range("CourseName").value 

返回范围中的当前值。

从工作表中调用的函数不能操作input公式的活动单元格以外的工作表对象。

这保留了公式中的依赖关系,防止循环引用错误等

作为一般规则 ,使用子例程来操作对象,并使用公式来返回值(无论是单元格引用还是variables)。

一个例外是子例程中调用的UDF 可以操作工作表对象,但这可能不是一个好习惯。 保持你的函数限于将值返回给variables/单元格,并使用子例程来操作对象。

进一步阅读:

使Excelfunction影响“其他”单元格

http://www.excelforum.com/excel-programming-vba-macros/477157-changing-cell-values-from-within-udf.html

http://www.ozgrid.com/Excel/free-training/ExcelVBA1/excelvba1lesson21.htm

从单元中调用的用户定义的函数只能将值返回给它们被调用的单元。 所以你的UDF不允许将值写入一个定义的名字。