VBA输出写入单元格 – #VALUE! 错误
我试图做一个我的UDF的工作(在Excel 2003中),debugging后,这个问题似乎在我的函数的凝聚版本中总结:
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
这模拟了我的实际function,它有一个值分配给它没有问题之前的单元格输出行不执行。 我相信这是与#VALUE!
错误我得到作为一个回报,即使我使用了一个MsgBox
,它显示函数确实有一个数值。
任何人都可以阐明这一点吗?
另外:有什么区别
Worksheets("Sheet1").Cells(1, 1) = B
和
Sheets("Sheet1").Range("A1").Value = B
其中B是一些数值?
谢谢
就像你已经意识到的那样
它看起来像问题是任何UDF不允许编辑工作表,只返回一个值…所以如果我想编辑另一个单元作为同一过程的一部分,我需要使用一个子“
一个标准的 UDF不能改变纸张。
但就你的后续评论而言
这是正确的,如果是这样的话,我将如何去处理 – 在子函数或函数内的子函数? 我希望我的电子表格能够像input函数一样自动对input做出反应 – 无需button或特殊的操作。
你可以使用一个事件
举个例子:
- 您想要在某个表格上跟踪A1:A10以进行input
- 如果使用此区域,则需要将
Worksheets("Sheet1").Range("A1").Value
设置为此值
问题1
- 右键单击要跟踪的工作表的选项卡
- 查看代码
- 复制并粘贴到下面的代码中4按alt f11返回到Excel
码
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
他们是相同的。
你是对的(在你的评论中)UDF不能改变工作表,只返回一个值。
如果你从UDF中调用一个Sub
或者Function
并且试图改变表单,这个事件就会成立。 它也会失败。
注意:有一个(相当丑陋的)解决方法:看到这个答案