2015-07-15 15 views
6

Mam arkusz z 70.000 wierszy danych i prostego makra, które liczy się jako całkowitą liczbę wierszy:VBA Integer Overflow przy 70.000

Dim LastRow as Integer  
LastRow = SourceSheet.Cells.Find(what:="*", searchdirection:=xlPrevious, searchorder:=xlByRows).Row 
MsgBox (LastRow) 

ta zwraca błąd przepełnienia. Zmiana LastRow na Long zwraca poprawną wartość 70 000.

Zgodnie z Microsoft's website, liczba całkowita VBA powinna być w stanie utrzymać wartości między -2,147,483,648 i 2 147 483 647. Moje wyniki są w tym zakresie, więc dlaczego miałoby to zawieść?

Dzięki!

Odpowiedz

17

To jest Visual Studio (.NET). VBA Integer to 32 768. Użyj długiego.

Zmienna długa VBA przechowuje liczby całkowite od -2,147,483,648 do 2 147 483 647 i wykorzystuje 4 bajty (32 bity) pamięci.

Dim LastRow as Long 
+0

Gah! Oczywiście patrzyłem na niewłaściwą stronę. Dzięki za szybką odpowiedź. +1 – DixieFlatline

+1

@DixieFlatline Tylko FYI, Możesz także uzyskać dostęp do ostatniego wiersza w dowolnym momencie przez SourceSheet.UsedRange.Rows.Count i ostatnia kolumna SourceSheet.UsedRange.Columns.Count – MatthewD

+0

Dzięki za napiwek! Porównałem to z metodą, z której korzystałem i zauważyłem, że moja liczy tylko wiersze z danymi, a twoje zlicza również wiersze z formatowaniem. – DixieFlatline