为什么使用“ Debug.Print”会导致“溢出”错误?

时间:2018-12-17 04:56:47

标签: excel vba excel-vba excel-vba-mac

我创建了一个函数,对以下范围内的所有单元格求和

sys.path

当我在立即窗口中运行该函数时,它抱怨运行时错误“溢出”,并且在注释“ Debug.Print”行后该错误消息消失了,这很奇怪。函数Function SumTest(rg As Range) As Double Debug.Print "SumTest..." Dim s As Double s = 0 ' ------> Show runtime error "Overflow" at this line Dim i As Range For Each i In rg.Cells s = s + i.Value2 Next i SumTest = s End Function 是否与双变量初始化有关?又为什么在这里发生溢出(我只是将零分配给数据类型为Dbbug.Print的变量)?


添加了更多信息:

我在Double的即时窗口中测试该功能(范围?Sumtest(Range("A1:C1"))中填充了琐碎的测试数据A1:C1)。 Excel版本是Mac上的Office365。


为了简化测试,我使用了另一个较短的程序,如下所示:

1 2 3

在测试了一些程序之后,我正在考虑这可能是Mac上Excel 2016的错误。似乎一旦使用Function SumTest2() As Double Dim s As Double Debug.Print "SumTest2" s = 0 ' ---> Still "Overflow" here SumTest2 = s End Function ,就无法再将值(0或其他值)分配给数据类型为Debug.print(可以使用Integer,String或其他数据类型)的变量。以下是另一个典型的测试程序:

Double

1 个答案:

答案 0 :(得分:-2)

来源:Microsoft Docs:当您尝试进行的作业超出了作业目标的限制时,将导致溢出。该错误具有以下原因和解决方法:

  • 赋值,计算或数据类型转换的结果太大,无法在该类型的变量允许的值范围内表示。

    • 将值分配给可以容纳更大范围值的类型的变量。
  • 对属性的分配超出了该属性可以接受的最大值。

    • 确保您的分配适合其所属属性的范围。

解决方案

按如下所示修改您的代码,您将不会再看到该错误。

Function SumTest(rg As Range) As Double
  Debug.Print "SumTest..." 

  Dim s As Double
  Dim i As Range
  For Each i In rg.Cells
      s = s + CDbl(i.Value2)
  Next i

  SumTest = s
End Function