Почему использование «Debug.Print» приводит к ошибке «Переполнение»? - PullRequest
0 голосов
/ 17 декабря 2018

Я создаю функцию для суммирования всех ячеек в диапазоне следующим образом:

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

Когда я запускаю функцию в непосредственном окне, она жалуется на ошибку времени выполнения «Переполнение», и очень странно, что ошибкасообщение исчезает после комментирования строки «Debug.Print».Функция Dbbug.Print относится к двойной инициализации переменной?И почему здесь происходит переполнение (я просто назначаю ноль переменной с Double типом данных)?


Дополнительная информация добавлена:

Я проверяю функцию сразуокно как ?Sumtest(Range("A1:C1")) (диапазон A1:C1 заполнен тривиальными данными теста 1 2 3).И версия Excel - Office365 для Mac.


Чтобы упростить тест, я использую другую более короткую программу, такую ​​как:

Function SumTest2() As Double

  Dim s As Double

  Debug.Print "SumTest2"
  s = 0  ' ---> Still "Overflow" here
  SumTest2 = s
End Function

После тестирования нескольких программЯ рассматриваю это, возможно, ошибка для Excel 2016 на Mac.Кажется, что если вы используете Debug.print, тогда вы не можете присвоить значение (0 или другое значение) переменной с типом данных Double (целочисленные, строковые или другие типы данных в порядке ...).Ниже приведена еще одна типичная тестовая программа:

Sub DoubleTest2()
  Dim a As Double

  a = 0
  Debug.Print a  ' when this line appears, next assignment to variable `b` will complain `overflow` error message.

  Dim b As Double
  b = 100# ' *overflow error message*
  Debug.Print b
End Sub

1 Ответ

0 голосов
/ 17 декабря 2018

Источник: Документы Microsoft : переполнение возникает, когда вы пытаетесь выполнить назначение, которое превышает ограничения цели назначения.Эта ошибка имеет следующие причины и решения:

  • Результат присвоения, вычисления или преобразования типа данных слишком велик, чтобы быть представленным в диапазоне значений, разрешенных для этого типа переменной.

    • Присвойте значение переменной типа, которая может содержать больший диапазон значений.
  • Присвоение свойству превышаетмаксимальное значение, которое может принять свойство.

    • Убедитесь, что ваше назначение соответствует диапазону для свойства, к которому оно относится.

Решение :

Измените код, как показано ниже, и вы больше не увидите ошибку.

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
...