2015-07-15 8 views
6

Ho un foglio di lavoro con 70.000 righe di dati e una semplice macro che conta il numero totale di righe:VBA Integer Overflow a 70.000

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

Ciò restituisce un errore di overflow. La modifica di LastRow a Long restituisce il valore corretto di 70.000.

In base a Microsoft's website, un numero VBA dovrebbe essere in grado di contenere valori compresi tra -2.147.483.648 e 2.147.483.647. Il mio risultato è all'interno di questo intervallo, quindi perché fallirebbe?

Grazie!

risposta

17

Questo è Visual Studio (.NET). VBA Integer è 32.768. Usa un lungo.

Una variabile lunga VBA contiene numeri interi da -2.147.483.648 a 2.147.483.647 e utilizza 4 byte (32 bit) di memoria.

Dim LastRow as Long 
+0

Gah! Certo che stavo guardando la pagina sbagliata. Grazie per la risposta rapida. +1 – DixieFlatline

+1

@DixieFlatline Solo una FYI, puoi anche accedere all'ultima riga in qualsiasi momento da SourceSheet.UsedRange.Rows.Count e l'ultima colonna da SourceSheet.UsedRange.Columns.Count – MatthewD

+0

Grazie per il suggerimento! L'ho confrontato con il metodo che stavo usando e ho notato che il mio conta solo le righe con i dati, e il tuo conta anche le righe con la formattazione. – DixieFlatline