Неверное значение при подсчете ячеек в разных версиях Excel

Я видел, как некоторые пользователи SO сталкивались с проблемой при попытке использовать некоторые варианты Cells.Count; код VBA в некоторых случаях выдает ошибку переполнения.

Для справки см. комментарии к этому ответу:

I think this will work, but I get an "overflow" error and it points me to the code "If Master.Cells.SpecialCells(xlCellTypeVisible).Count > 0 Then" --- it seems like it's not filtering for anything in particular – user1556069

и этот ответ:

Is this onyl working (and Cells.Count didnt work) because the latter used an integer, 16 bits, max value of 65,536 and the whole spreadsheet returned a numbr greater? – fast_code


I'm assuming that somewhere behind the scenes VBA is trying to coerce the cell count to a small Integer (16-bit) or Long integer (32-bit). The cell count of an Excel 2007 worksheet would overflow both of those datatypes. Unfortunately I can't isolate it right now because I don't have a copy of Excel 2007 handy and cannot actually reproduce your error. – mwolfe02

Пытаясь понять это, я попытался воспроизвести себя и получил переполнение при попытке присвоить Cells.Countкак целое число. Это имеет смысл, так как значение слишком велико для типа данных Integer.

Используя приведенный ниже код как в Excel 2003, так и в 2010, я получил числовой результат при попытке назначить значение Long или Variant.

Option Explicit

Sub testInteger()
    Dim i As Integer
    i = Cells.Count 'Overflow
    Debug.Print i 'Doesn't get this far...
End Sub

Sub testLong()
    Dim l As Long
    l = Cells.Count
    Debug.Print l 'Prints 16777216 in both versions
End Sub

Sub testVariant()
    Dim v As Variant
    v = Cells.Count
    Debug.Print v 'Prints 16777216 in both versions
End Sub

Как вы можете видеть в моих комментариях, значение Cells.Countравно 16777216(. что верно для 2003 ), но одинаково для обеих версий , и это не имеет для меня смысла. Чтобы процитировать mwolfe02 из одного из приведенных выше -связанных ответов:

Excel 2007 worksheets have 1,048,576 rows and 16,384 columns for a total of 17,179,869,184 cells.

Это говорит мне о том, что значение, напечатанное в 2010 году, должно быть не менее (. Я считаю, что оно действительно должно быть таким же )17,179,869,184..

Так почему же это число печатается неправильно/почему значение 2003 года возвращается в 2010 году?

5
задан Community 23 May 2017 в 10:28
поделиться