【问题标题】:VBA function works for debugger but fails to run in excel sheet [duplicate]VBA函数适用于调试器,但无法在excel表中运行[重复]
【发布时间】:2022-02-07 19:23:20
【问题描述】:

我是 VBA 新手,我不知道这里发生了什么。我运行这样一个简单的函数:

    Function OnlyNumsRange(myRange As Range) As Range
       Dim cell As Range, newRange As Range

       Set newRange = myRange
    
       Dim rng As Range
       For Each rng In newRange
           rng.Value = rng.Value + 10
       Next
        
       Set OnlyNumsRange = newRange
    
    End Function

给定一个范围,该代码应该返回一个新范围,每个单元格上都有 +10。 这个函数非常适合 VBA 调试器,但是当我尝试在我的 excel 工作表上运行它时,它会引发 #VALUE!错误。提前谢谢你。

【问题讨论】:

  • 你到底想做什么?您正在使用的数据示例以及所需的输出将使您的问题更容易理解。另外,您如何在“完美运行”的调试器中运行它?也许查看“How to Ask”以及如何创建minimal reproducible example 也会有所帮助。
  • 从工作表调用的函数不应将值返回到其他单元格,只能返回到该函数所在的单元格。有一些方法可以绕过它,但这不是一个好习惯。
  • 我有一列的值为 20、30... 但我不应该对这些单元格进行任何更改。我只想创建另一个修改了值的列。但如果它不是很好的做法,我会尝试以不同的方式制作它。谢谢你们!
  • 如果您想要一个返回数组并因此溢出到多个单元格的函数,只需return an array
  • 谢谢,这是我第一次使用范围(和 vna),我不知道我没有使用正确的变量类型

标签: excel vba range


【解决方案1】:

要返回函数的值,请将值分配给函数名称,在本例中为 OnlyNumsRange。在这种情况下,您不使用 Set。

【讨论】:

  • You don't use Set in this case - 如果函数返回一个对象,Range 是,你绝对会这样做。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 2021-01-25
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多