Subscript Out of Range When clearing contents

upobDaPlaya
upobDaPlaya used Ask the Experts™
on
I have noticed when I occasionally run the below code from the VBA panel I get Subscript Out of Range.  This only seems to happen if I were last in the worksheet called "REPORT-JAN".  If I then manually go to another worksheet and re-run the SUB then I do not have this issue..Any ideas why I get this message...Why should it matter what worksheet I am in when clearing a worksheet ?

Also if I want to clear everything in A-R, then what is the syntax for this...I fear that one day my data may go beyond row 5,000..Should I just find the LastRow or is there an easier way...

With Sheets ("REPORT-JAN")
.RANGE("A1:R5000").Clear Contents
End With
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2008

Commented:
Check the name of the worksheet (tab name). If it isn't spelled exactly the same you will get that error.

Kevin
Top Expert 2008

Commented:
I'm sure this is not your problem and only a typing mistake, but this:

Clear Contents

should be:

ClearContents

Kevin

Author

Commented:
I checked and the TabName is spelled correctly and I have ClearContents
HTML5 and CSS3 Fundamentals

Build a website from the ground up by first learning the fundamentals of HTML5 and CSS3, the two popular programming languages used to present content online. HTML deals with fonts, colors, graphics, and hyperlinks, while CSS describes how HTML elements are to be displayed.

Top Expert 2008
Commented:
Are you working with multiple workbooks? If so, try this:

With ThisWorkbook.Sheets ("REPORT-JAN")
.RANGE("A1:R5000").Clear Contents
End With

Kevin

Author

Commented:
No..I am just working with 1 workbook relative to the code.  However, I did have multiple workbooks open at the time..

Whats the rule when you need to include Workbook...
Top Expert 2008

Commented:
You should always include it. Otherwise you are depending on Excel to determine where the Sheets collection is. I always use fully qualified references to ensure I get exactly what I am looking for.

So my code change did not help?

Kevin

Author

Commented:
It works now, however I was able to get it to work prior to my post, but occasionally it I would get the subscript msg.  Now that I have qualified the WS lets see if I no longer get any errors..I will run it multiple times tomorrow pm and let u know..thx
byundtMechanical Engineer
Most Valuable Expert 2013
Top Expert 2013
Commented:
Further to Kevin's suggestion if you might go beyond 5000 rows of data, I often use the Intersect method to restrict the range to only those rows being used:
With ThisWorkbook.Worksheets("REPORT-JAN")
    Intersect(.UsedRange, .Range("A:R")).ClearContents
End With

Open in new window

Brad
Rob HensonFinance Analyst
Commented:
When clearing the data, is column R the full extent of the data or is there is anything beyond R which you are keeping?

If R is the full extent you can use the "Cells.Select" statement to select everything. I assume therefore that you could use "Cells.ClearContents" to clear everything.

Thanks
Rob H

Author

Commented:
Some very good feedback indeed. I do have data beyond col R, however I only want to delete thru col r, thus it sounds like the Intersect method would be the best ?
byundtMechanical Engineer
Most Valuable Expert 2013
Top Expert 2013

Commented:
All of the methods suggested will clear the contents of A1:R5000. The Intersect method will go beyond row 5000 should data exist in those rows.

I assume by "delete" that you really mean to clear the contents. Actually deleting those cells (and moving up replacement cells from the bottom of the worksheet) would mess up any formulas that referenced the deleted cells.
Top Expert 2008

Commented:
That part of the code is fine. Only clear what you want to clear. If you want to clear from row 1 to the bottom of the worksheet then use:

    .RANGE("A:R").ClearContents

The ClearContents method is not frequently used so any decrease in speed clearing all rows versus the first 5,000 rows (which will be minimal anyway) will not be noticed.

Kevin

Author

Commented:
I appreciated the multiple solutions and the forward thing questions.  Much appreciated.

Author

Commented:
Hi byundt..I am using the intersect method and it works great with the exception of what if I do not want the header row cleared..thus the range starts at A2..how then do I handle the part of your code that has ...... .Range("A:R")).ClearContents
byundtMechanical Engineer
Most Valuable Expert 2013
Top Expert 2013

Commented:
How about:
    Intersect(.UsedRange, .Range("A2:R" & .Rows.Count)).ClearContents

Open in new window

Author

Commented:
Brilliant! Thanks

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial