Widziałem, jak niektórzy użytkownicy SO napotykają problem przy próbie użycia wersji Cells.Count
; kod VBA generuje błąd przepełnienia w niektórych przypadkach.Niepoprawna wartość podczas liczenia komórek w różnych wersjach programu Excel
Dla porównania, zobaczyć komentarze na this answer:
myślę, że to będzie działać, ale pojawia się błąd "overflow" i wskazuje mi do kodu „Jeśli Master.Cells.SpecialCells (xlCellTypeVisible) .Count> 0 Wtedy”--- wydaje się, że to nie jest filtrowany za nic w szczególności - user1556069
i this answer:
Czy to działa onyl (a Cells.Count nie działało), ponieważ ten ostatni użył liczby całkowitej, 16 bitów, wartość maksymalna 65 536, a cały arkusz kalkulacyjny zwrócił wartość większą? - fast_code
Jestem zakładając, że gdzieś za kulisami VBA próbuje zmusić morfologii do małej Integer (16-bit) lub długi Integer (32-bit). Liczba komórek arkusza kalkulacyjnego programu Excel 2007 spowoduje przepełnienie obu tych typów danych . Niestety nie mogę tego teraz wyizolować, ponieważ nie mam pod ręką kopii programu Excel 2007 i nie mogę odtworzyć błędu . - mwolfe02
Próbując zrozumieć to, starałem się odtworzyć siebie i dostał przepełnienia gdy próbuje przypisać Cells.Count
jako liczba całkowita. Ma to sens, ponieważ wartość jest zbyt duża dla typu danych Integer.
Korzystając z poniższego kodu zarówno w programie Excel 2003, jak i 2010, otrzymałem wynik liczbowy podczas próby przypisania jako Long lub 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
Jak widać w moich komentarzach, wartość Cells.Count
jest 16777216
(który jest właściwy dla roku 2003), ale to jest taka sama dla obu wersji , i że nie ma sensu do mnie. Zacytować mwolfe02 z jednego z wyżej połączone odpowiedzi:
Excel 2007 arkusze mają 1,048,576 wierszy i kolumn 16384 w sumie 17,179,869,184 komórek.
Co mi mówi, że wartość wydrukowana w 2010 powinna być co najmniej (uważam, że tak naprawdę powinna być taka sama) 17,179,869,184
.
Dlaczego więc ten numer nie jest drukowany poprawnie/dlaczego wartość 2003 została zwrócona w 2010 roku?
16777216 to "0x1000000", a 17179869184 to "0x400000000" w postaci szesnastkowej tylko FYI. – TheZ
Czy działa program Excel 2010 w trybie zgodności lub patrząc na plik zapisany w formacie 2003? –
@TimWilliams Zacząłem od otwarcia nowej sesji programu Excel 2010, która domyślnie miała postać Book1, w której wkleiłem powyższy kod. Jak ustalić, czy jestem zgodny. tryb? – Gaffi