11

I have a worksheet with 70,000 rows of data and a simple macro that counts the total number of rows:

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

This returns an overflow error. Changing LastRow to Long returns the correct value of 70,000.

According to Microsoft's website, a VBA integer should be able to hold values between -2,147,483,648 and 2,147,483,647. My output is well within this range, so why would it fail?

Thanks!

1 Answer 1

32

The website you are looking at is for Visual Studio (.NET) .

VBA Integer is 32,768. You need to use a long.

A VBA Long variable holds whole numbers from -2,147,483,648 to 2,147,483,647 and uses 4 bytes (32 bits) of memory.

Dim lLastRow as Long
Sign up to request clarification or add additional context in comments.

4 Comments

Gah! Of course I was looking at the wrong page. Thanks for the quick answer. +1
@DixieFlatline Just an FYI, You can also access the last row at anytime by SourceSheet.UsedRange.Rows.Count and the last column by SourceSheet.UsedRange.Columns.Count
Thanks for the tip! I compared that with the method I was using and I noticed that mine only counts rows with data, and yours also counts rows with formatting.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.