• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1097
  • Last Modified:

Select next Empty row in a filtered table: Excel VBA

Help, help, help.  I'm driving myself crazy!

I have a table of data which several people use.
I have developed a process to add rows of data at the bottom of the table.
If the table is left filtered by the last user, the code that I use to select the next row does not work.

(I know there are work-arounds, such as ShowAllData, or remove autofiltermode.  I would like to know if there is a way to do it without resorting to that, though, keeping the integrity of the filter.)

My code:
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select

Open in new window

works fine if the filter is set to show all data.
However, if the data is fitered, it will obviously only work if the bottom row is included in the filter.

I have tried the following:
selection.SpecialCells(xlCellTypeVisible).Offset(1, 0).Select

Open in new window

but that just returns an application or object defined error

I have also tried:
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).SpecialCells(xlCellTypeVisible).Select

Open in new window

.  That, however, selects all cells EXCEPT for the filtered cells

I am missing something obvious, perhaps. Can't see the wood for the trees.

Sample table attached
Thanks very much
David
FilteredTable-Sample.ExpExch.140.xlsm
0
David Phelops
Asked:
David Phelops
2 Solutions
 
SteveCommented:
OK, I would suggest converting your table to an actual "Table"
Highlighting the data and using Insert > Table.

Then the table can be manipulated far easier in VBA.
To add a row use:
    Range("Table1").ListObject.ListRows.Add AlwaysInsert:=True

Open in new window


See attached copy of your file.
FilteredTable-Sample.ExpExch.140.xlsm
0
 
David PhelopsAuthor Commented:
Thanks Steve, that looks like a leap forward in technique.

I am still really intrigued, however, as to how to select the next empty row, if the list is filtered (without converting to a listobject).

Cheers
David
0
 
broro183Commented:
hi David,

I wrote a "AttemptAtARobustLastCellFinder_v4 function" & it was accepted as the solution in this thread. It may help you in your current situation. The function is powered by "Application.CountA" to identify blank or non-blank rows/columns even if the specific cell is hidden, eg by a filter.

If there is no other data below your filtered range, you can probably use my function "as is". If there is data below the range, you could just make use of the concept & use "Application.CountA" within your code.

hth
Rob
0
 
David PhelopsAuthor Commented:
Apologies for a long absence!

Thanks very much for posting this potential solution.  I have to admit that a lot of it is a bit over my head at my stage.  I will try and understand what it is doing.  

The work-around that I used was to identify the filter and then remove and replace it as necessary, making it easy to find the last row.

Not a robust and technically elegant solution, I grant you, but simple for me!

I do really appreciate the trouble that everyone takes to answer questions, so again an apology for a long absence.
0
 
Martin LissOlder than dirtCommented:
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now