Проблемы с ошибкой времени выполнения VBA ‘6’: переполнение

#excel #vba #runtime

#excel #vba #время выполнения

Вопрос:

Я застрял с этой проблемой на VBA… Мне нужно создать комбинации, но когда N> 22 и K = 5, VBA возвращает ошибку времени выполнения ‘6’: переполнение. Я пытался исправить это, сохранив файл с .xlxs, но проблема все еще остается. Итак, я попытался переключить переменные на 32-разрядные, но, честно говоря, я не знаю, как изменить код.

Пожалуйста, найдите это здесь ниже:

 Public col(100), r, n, nr As Integer
Function comb(k)

col(k) = col(k - 1)
While col(k) < n - r   k

col(k) = col(k)   1
If k < r Then
comb (k   1)
Else
nr = nr   1
For i = 1 To r
Cells(nr, i) = col(i)
Next
End If

Wend


End Function
  

Комментарии:

1. Public col(100), r, n, nr As double

Ответ №1:

 Public col(100), r, n, nr As Integer
  

Вы, должно быть, присваиваете большее значение, чем может обработать целое число. Используйте Single или по причинам отладки объявляйте их по отдельности внутри функции таким образом, если ошибка сохраняется, она выделит переменную с ошибкой.

Не используйте double, поскольку для вывода может потребоваться формат, double = десятичные дроби и т.д. (Как указано enderland в комментариях).

Ответ №2:

Числа становятся слишком большими для int или long обработки. для небольших чисел вы можете использовать прямую формулу, а для больших чисел вы можете использовать либо приближение Стирлинга, либо формулу Рамануджана для факториала и сохранить ее в double

http://www.johndcook.com/blog/2012/09/25/ramanujans-factorial-approximation/