Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Cells.find only reporting range in AutoFilter...
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? |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Cells.find only reporting range in AutoFilter...
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" 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? |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
Cells.find only reporting range in AutoFilter...
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). "Jim Cone" wrote: 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" 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? |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
Cells.find only reporting range in AutoFilter...
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). |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
Cells.find only reporting range in AutoFilter...
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. "Jim Cone" wrote: 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). |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
formula to find a range of cells = to a value | Excel Worksheet Functions | |||
autofilter is hiding cells outisde of the range I am trying to fil | Excel Discussion (Misc queries) | |||
Error proof way to find first blank Row after Autofilter Range | Excel Programming | |||
Find a range of values in a range of cells | Excel Worksheet Functions | |||
Reporting of Empty Cells | Excel Worksheet Functions |