Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA输出写入单元格-#值!错误_Excel_Vba_Alt_F11 - Fatal编程技术网

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

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 这模拟了我的真实函数,它有一个赋值

我正在尝试创建一个我的自定义函数(在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
这模拟了我的真实函数,它有一个赋值给它,在下一个单元格输出行之前没有任何问题,该行没有执行。我相信这与
#值有关返回的错误,即使我使用了
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