Sort error?

M

mc

I don't know what the difference is between these 2 pieces of code. The
first piece works but the second is giving the error message of "Error: 1004
- The sort reference is not valid. Make sure that it's within the data you
want to sort, and the first Sort By Box isn't the same or blank".

First piece of coding:
xl_WksheetData.Range("A1").Select
Range("A1:p" & CStr(intLastRow)).Sort Key1:=Range("C2"),
Order1:=xlAscending, Key2:=Range _
("E2"), Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal

2nd piece of coding:
xl_WksheetData.Range("A1").Select
xl_WksheetData.Range("A1:p" & CStr(intLastRow)).Sort Key1:=Range("C2"),
Order1:=xlAscending, Key2:=Range _
("E2"), Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
 
J

Jim Thomlinson

The two pieces of code are essentially identical. The only difference is your
reference to the sheet in your sort, which is completely unnecessary. When
the sheet is omitted as in your first piece of code the default value is
activesheet. Since you did a select immediately prior we know that xl
_WksheetData is the active sheet. To that end my guess is that there is more
to this than you have posted. If I were writing that piece of code here is
what I would have...

With xl_WksheetData
.Range(.Range("A1"), .Cells(.Rows.Count, "P").End(xlUp)).Sort _
Key1:=.Range("C2"), Order1:=xlAscending, _
Key2:=.Range("E2"), Order2:=xlAscending, _
Key3:=.Range("D2"), Order3:=xlAscending, _
Header:=xlYes
End With

A few things to note. I got ride of many of the sort arguments as they are
not necessary. I changed the header from xlGuess to xlYes. I got rid of the
intLastRow as you probably don't need it unless you are using it other
places. I also qualified all of the ranges (note the dot in front of the word
range) which means that every range is explicitly from the sheet
xl_WksheetData. That means that I can run this code even if xl_WksheetData is
not the active sheet.
 
M

mc

Thanks, it worked.

Jim Thomlinson said:
The two pieces of code are essentially identical. The only difference is your
reference to the sheet in your sort, which is completely unnecessary. When
the sheet is omitted as in your first piece of code the default value is
activesheet. Since you did a select immediately prior we know that xl
_WksheetData is the active sheet. To that end my guess is that there is more
to this than you have posted. If I were writing that piece of code here is
what I would have...

With xl_WksheetData
.Range(.Range("A1"), .Cells(.Rows.Count, "P").End(xlUp)).Sort _
Key1:=.Range("C2"), Order1:=xlAscending, _
Key2:=.Range("E2"), Order2:=xlAscending, _
Key3:=.Range("D2"), Order3:=xlAscending, _
Header:=xlYes
End With

A few things to note. I got ride of many of the sort arguments as they are
not necessary. I changed the header from xlGuess to xlYes. I got rid of the
intLastRow as you probably don't need it unless you are using it other
places. I also qualified all of the ranges (note the dot in front of the word
range) which means that every range is explicitly from the sheet
xl_WksheetData. That means that I can run this code even if xl_WksheetData is
not the active sheet.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top