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

  1. 右键单击要跟踪的工作表的选项卡
  2. 查看代码
  3. 复制并粘贴到下面的代码中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并且试图改变表单,这个事件就会成立。 它也会失败。

注意:有一个(相当丑陋的)解决方法:看到这个答案