Есть ли ограничения для Range.Cells.Count? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть простой счетчик строк.

Total = Sheets("support").Range("A1", Sheets("support").Range("A1").End(xlDown)).Cells.Count

Он отлично работает, пока я не считаю больше десяти тысяч строк, потому что в этом случае я получаю это сообщение об ошибке:

Переполнение С чем это связано и как я могу сосчитать, например, более ста тысяч строк?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы должны использовать свойство CountLarge вместо Count, т.е.

.Cells.CountLarge
0 голосов
/ 29 июня 2018

.Cells является избыточным, вызов участника .Count может быть выполнен непосредственно из объекта Range, возвращенного предыдущим вызовом члена Range.End.

Тем не менее, это зависит от того, что Total объявлено как. Если это Integer, то у него есть только 16 бит для хранения целого числа со знаком, что означает, что его верхний предел составляет 32 767, т.е. 2^15-1.

Dim Total As Integer ' 16-bit 

Использование целого числа Long даст ему 32 бита, чтобы сделать то же самое, сделав верхний предел 2^31-1, которого должно быть более чем достаточно для большинства применений.

Dim Total As Long ' 32-bit

Если вы переполните Long, VBA7 на 64-битных системах даст вам LongLong, 64-битный целочисленный тип со знаком, который не будет переполнен, пока не будет отключен 2^63-1.

Dim Total As LongLong ' 64-bit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...