Nieprawidłowa wartość podczas liczenia komórek w różnych wersjach programu Excel

Widziałem, jak niektórzy użytkownicy SO napotkali problem podczas próby użycia jakiejś odmianyCells.Count; kod VBA generuje błąd przepełnienia w niektórych przypadkach.

Dla odniesienia patrz komentarze na tematta odpowiedź:

Myślę, że to zadziała, ale otrzymuję błąd „przepełnienia” i wskazuje mi kod „If Master.Cells.SpecialCells (xlCellTypeVisible) .Count> 0 Then” --- wygląda na to, że nie filtruje niczego w szczególności - użytkownik1556069

ita odpowiedź:

Czy to działa onyl (a Cells.Count nie działał), ponieważ ten drugi używał liczby całkowitej, 16 bitów, maksymalnej wartości 65 536, a cały arkusz zwrócił liczbę większą? - fast_code

Zakładam, że gdzieś za kulisami VBA próbuje zmusić liczbę komórek do małej liczby całkowitej (16-bitowej) lub długiej liczby całkowitej (32-bitowej). Liczba komórek arkusza Excel 2007 przepełniłaby oba te typy danych. Niestety nie mogę go teraz wyizolować, ponieważ nie mam przydatnej kopii programu Excel 2007 i nie mogę odtworzyć Twojego błędu. - mwolfe02

Próbując to zrozumieć, próbowałem się odtworzyć i dostałem przepełnienie przy próbie przypisaniaCells.Count jako liczba całkowita. Ma to sens, ponieważ wartość jest zbyt duża dla typu danych Integer.

Używając poniższego kodu w Excel 2003 i 2010, otrzymałem numeryczny wynik, gdy próbowałem przypisać go jako Długi lub Wariant.

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

Jak widać w moich komentarzach,Cells.Count wartosc jest16777216 (co jest poprawne w 2003 r.), ale jest takie samodla obu wersjii to nie ma dla mnie sensu. Cytowaćmwolfe02 z jednej z powyższych odpowiedzi:

Arkusze Excel 2007 mają 1 048 576 wierszy i 16 384 kolumny, co daje w sumie 17 179 869 184 komórek.

Co mówi mi, że wartość wydrukowana w 2010 roku powinna być przynajmniej (uważam, że powinna być taka sama)17,179,869,184.

Dlaczego więc ten numer nie jest drukowany poprawnie / dlaczego wartość z 2003 r. Jest zwracana w 2010 r.?

questionAnswers(1)

yourAnswerToTheQuestion