Excel VBA输出写入单元格-#值!错误
我正在尝试创建一个我的自定义函数(在Excel 2003中),调试后,问题似乎总结在我的函数的压缩版本中:Excel VBA输出写入单元格-#值!错误,excel,vba,alt,f11,Excel,Vba,Alt,F11,我正在尝试创建一个我的自定义函数(在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 这模拟了我的真实函数,它有一个赋值
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
这模拟了我的真实函数,它有一个赋值给它,在下一个单元格输出行之前没有任何问题,该行没有执行。我相信这与#值有关代码>返回的错误,即使我使用了MsgBox
,这表明函数确实有一个数值
有人能解释一下吗
还有:两者的区别是什么
Worksheets("Sheet1").Cells(1, 1) = B
及
在哪里
B是数值吗
谢谢(在您的评论中)您是对的,自定义项不能更改工作表,只返回一个值
如果您从UDF调用Sub
或函数
,并尝试更改工作表,则此事件为真。它也会失败
注意:有一个(相当难看的)解决方法:请参见您已经意识到的
问题似乎是,任何自定义项都不允许编辑工作表,只返回一个值…因此,如果我想在同一过程中编辑另一个单元格,我需要使用sub“
标准自定义项不能更改工作表
但就你的后续评论而言
这是正确的吗?如果是的话,我该怎么做?函数中的sub或sub中的函数?我希望我的电子表格能够像函数一样自动对输入做出反应-无需按钮或特殊操作
您可以使用事件
例如:
- 您希望在某个工作表上跟踪输入的A1:A10
- 如果使用此区域,您希望将
工作表(“Sheet1”).Range(“A1”).Value
设置为此值
问题1
在要跟踪的图纸的选项卡上单击鼠标右键
视图代码
复制并粘贴下面的代码
4按返回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
它们是相同的。您想从VBA代码还是从工作表单元格调用函数?另外,您可以检查,问题似乎是任何自定义项都不允许编辑工作表,只返回一个值…因此,如果我想在同一过程中编辑另一个单元格,我需要使用sub。是的,您不能从func操作单元格如果您从excel单元格调用此函数…如果您需要将值返回到多个单元格,请使用Sub
。如果您需要作为任何操作的结果来执行此操作,您可以探索事件
。非常感谢大家。一个好的答案是,这启发了我在特定于工作表的子例程中调用此函数,因此它可以在任何时候运行目标被改变了。
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