2015-07-15 13 views
6

Ich habe ein Arbeitsblatt mit 70.000 Zeilen von Daten und einem einfachen Makro, das die Gesamtzahl der Zeilen zählt:VBA Integer Überlauf bei 70.000

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

Dies gibt einen Überlauffehler. Wenn LastRow in Long geändert wird, wird der korrekte Wert von 70.000 zurückgegeben.

Gemäß Microsoft's website sollte eine VBA-Ganzzahl Werte zwischen -2.147.483.648 und 2.147.483.647 enthalten können. Meine Leistung liegt in diesem Bereich, warum sollte es also scheitern?

Danke!

Antwort

17

Das ist Visual Studio (.NET). VBA Integer ist 32.768. Verwenden Sie eine lange.

Eine VBA-Long-Variable enthält ganze Zahlen von -2.147.483.648 bis 2.147.483.647 und verwendet 4 Byte (32 Bit) Speicher.

Dim LastRow as Long 
+0

Gah! Natürlich habe ich auf die falsche Seite geschaut. Danke für die schnelle Antwort. +1 – DixieFlatline

+1

@DixieFlatline Nur ein FYI, Sie können auch jederzeit auf die letzte Zeile zugreifen von SourceSheet.UsedRange.Rows.Count und die letzte Spalte von SourceSheet.UsedRange.Columns.Count – MatthewD

+0

Danke für den Tipp! Ich habe das mit der Methode verglichen, die ich verwendet habe, und mir ist aufgefallen, dass meins nur Zeilen mit Daten zählt und deins auch Zeilen mit Formatierung zählt. – DixieFlatline

Verwandte Themen