Cells.find only reporting range in AutoFilter...

M

mark

Years ago, someone here recommended that I use this to find the intersection
of the last used row and column, independant of whether data had been deleted
since the last save, etc:

reallastrow = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row
reallastcol = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns,
xlPrevious).Column

I've just discovered that the reallastcol part doesn't work if an AutoFilter
is turned on.

Instead of the last used column in the worksheet, it reports the last used
column in the autofilter, ignoring the fact that columns may be used to the
right of the autofilter.

Suggestions?
 
J

Jim Cone

If objSheet.FilterMode Then objSheet.ShowAllData
--or--
If objSheet.FilterMode Then
MsgBox "Please turn off the auto filter"
Exit sub
End if
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins / Excel Programming)



"mark" <[email protected]>
wrote in message
Years ago, someone here recommended that I use this to find the intersection
of the last used row and column, independant of whether data had been deleted
since the last save, etc:

reallastrow = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows,
xlPrevious).Row
reallastcol = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns,
xlPrevious).Column

I've just discovered that the reallastcol part doesn't work if an AutoFilter
is turned on.
Instead of the last used column in the worksheet, it reports the last used
column in the autofilter, ignoring the fact that columns may be used to the
right of the autofilter.
Suggestions?
 
M

mark

If my intent were to turn off the auto-filter, then sure, I could do that, no
problem.

But that's not my intent. I guess I didn't state the problem well enough.

After the operations that my code will perform, I still want the autofilter
to be on; in fact, having it on will cause my code to need to do less work.

So, I don't want to turn it off. I could turn it off, find the cell
intersection, and then turn it back on, but then I'd have to write in an
array to remember what all the selected filters in the auto filter were, and
I wasn't in a mood to bother with that today, either.

I think I can do it by a combination of the usedrange.columns.count , and
the position of the first column in the used range (since Excel doesn't count
blank columns on the left as part of the used range, if there is nothing in
them).
 
J

Jim Cone

Sub GetLastCol()
MsgBox ReallyLastColumn
End Sub
'--
Function ReallyLastColumn()
Dim lngCol As Long
Dim N As Long
Dim lngRow As Long
With ActiveSheet.UsedRange
lngRow = .Rows(.Rows.Count).Row
End With
For N = 1 To lngRow
With ActiveSheet
lngCol = Application.Max(lngCol, .Cells(N, .Columns.Count).End(xlToLeft).Column)
End With
Next
ReallyLastColumn = lngCol
End Function
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins / Excel Programming)




"mark"
wrote in message
If my intent were to turn off the auto-filter, then sure, I could do that, no
problem.

But that's not my intent. I guess I didn't state the problem well enough.

After the operations that my code will perform, I still want the autofilter
to be on; in fact, having it on will cause my code to need to do less work.

So, I don't want to turn it off. I could turn it off, find the cell
intersection, and then turn it back on, but then I'd have to write in an
array to remember what all the selected filters in the auto filter were, and
I wasn't in a mood to bother with that today, either.

I think I can do it by a combination of the usedrange.columns.count , and
the position of the first column in the used range (since Excel doesn't count
blank columns on the left as part of the used range, if there is nothing in
them).
 
M

mark

yeah, that would work. thanks for the suggestion...

see what you're doing...

1) finding the number of rows use
2) walking down the rows and finding the right-most used cell
3) keeping the max of that until you get through the number of rows used.

that would do it.
 

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