我正在尝试制作我的UDF工作(在Excel 2003中),并且在调试之后,问题似乎在我的函数的这个精简版本中进行了总结:
Function btest(b_1 As Double) As Double
btest = 1
Worksheets("Sheet1").Range("A1").Value = b_1
'^this is the bit I want to work but doesn't^
End Function
这模拟了我的实际函数,它在下一个不执行的单元格输出行之前没有问题地赋值给它。我相信这与我得到的#VALUE!
错误相关,即使我使用MsgBox
表明函数确实有数值。
有人能说清楚这个吗?
另外:
之间有什么区别Worksheets("Sheet1").Cells(1, 1) = B
和
Sheets("Sheet1").Range("A1").Value = B
,其中 B是一些数值?
由于
答案 0 :(得分:1)
正如您已经意识到的那样
看起来问题是任何UDF都不允许编辑工作表,只返回一个值...所以如果我想编辑另一个单元作为同一个进程的一部分,我需要使用一个子“
标准 UDF无法更改工作表。
但就你的后续评论而言
这是否正确,如果是这样,我将如何处理 - sub中的函数或函数内的sub?我希望我的电子表格能够像输入函数一样自动对输入作出反应 - 无需按钮或需要特殊操作。
您可以使用活动
举个例子:
Worksheets("Sheet1").Range("A1").Value
设置为此值问题1
<强>码强>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Set rng1 = Intersect(Target, Range("a1:10"))
If rng1 Is Nothing Then Exit Sub
Application.EnableEvents = False
Worksheets("Sheet1").Range("A1").Value = rng1.Value
Application.EnableEvents = True
End Sub
问题2
它们完全相同。
答案 1 :(得分:0)
您(在评论中)您是否正确更改工作表,只返回一个值。
如果您从UDF调用Sub
或Function
并尝试更改工作表,则此操作成立。它也会失败。
注意:有一个(非常难看)的解决方法:见this answer