1

我在模块中有一个功能。函数定义如下:

Public Function CourseSetup(ByVal SROfferId As Integer) as string

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

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

失败并出现错误 1004。

子(宏)中的同一行有效。CourseName是一个名为 ranged 的​​单元格。获取上述范围的值是可行的。

在即时窗口中:

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

返回范围内的当前值。

4

3 回答 3

2

从工作表调用的函数不能操作除了输入公式的活动单元格之外的工作表对象。

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

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

一个例外是从子例程中调用的 UDF可以操作工作表对象,但这可能不是一个好习惯。将您的函数限制为将值返回到变量/单元格,并使用子例程来操作对象。

进一步阅读:

使 Excel 函数影响“其他”单元格

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

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

于 2013-04-19T12:23:32.170 回答
2

从单元格调用的用户定义函数只能将值返回到调用它们的单元格。因此,您的 UDF 不允许将值写入定义的名称。

于 2013-04-19T08:05:37.417 回答
-1

几天前我遇到了这个问题并找到了这个答案。从函数转换为子解决了这个问题。但是,如果我在即时窗口中调用该函数,它会按预期执行。觉得这很奇怪。

于 2018-08-09T18:23:49.183 回答