So, I'm creating a search form that allows the user to search based on the fields in a data worksheet. There is a cover sheet to hide all the background stuff from the user. In the main form the data is read into a collection. Everytime I make a change like sorting, adding, updating etc., I erase the data and write the collection back to the worksheet. This is because, I'm using a rowsource for a listbox to get columns and even though I don't display the background steps, I still get a quick blink every time I make a change. This creates a few complexities when making changes to records when a filter is applied. To see what happens I've manually applied a filter and use the same code to read the records in. To my surprise, It reads all the records even though the filter is displaying about 2/3 of them. Even the listbox displays all of them. So, I tried applying the filter in the code and I get the same thing. Apparently, I'm not understanding something here. Maybe I'm just better off using Access.