VBA输出写入单元格- #VALUE!错误



我试图使我的工作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是某个数值?

谢谢

正如你已经从

看起来问题是任何UDF都不允许编辑工作表,只返回单个值…因此,如果我想编辑另一个单元格作为同一过程的一部分,我需要使用子"

"

标准 UDF不能改变工作表。

但是关于你的后续评论

这是正确的,如果是这样,我该怎么做-函数中的sub或函数中的sub?我想让我的电子表格自动响应输入,因为它会与一个功能-不需要按钮或特殊的操作。

你可以使用Event

例如:

  • 你想要在一个输入
  • 上跟踪A1:A10
  • 如果使用该区域,则需要将Worksheets("Sheet1").Range("A1").Value设置为该值

问题1

  1. 右键单击要跟踪的工作表的标签
  2. 视图代码
  3. 复制并粘贴下面的代码4按"altf11"返回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调用SubFunction并尝试更改工作表,则此事件为真。它也会失败。

注意:有一个(相当难看的)解决方法:参见这个答案

相关内容

最新更新