Jeanna,
Before you read the rest of this message, scroll down to the line that starts with: OOOOOOOOOOOOOOOOOPS! and read that first. The rest may be extraneous after that.
Could you tell me which specific line of code is highlighted when it fails on Title? It really looks to me like the sample data above would go through the code just fine, but maybe if I know what line it failed on, we will know more.
Also, it's probably time for an advanced lesson. You know that I told you that to run the code, you just press <F5>. Well, if you want to step through the code one line at a time, and really see what it's doing, you can press <F8>, instead. The next line of code that will be executed is highlighted, and each time you press <F8>, that single line of code will execute, and the highlight will move to the next line. This is called (for obvious reasons), single instructing. The good part of it is, that while you're single instructing, you can just put the cursor over any variable, and its contents will be displayed beside the cursor. Now I'm going to suggest that you do exactly that, and be sure that the module is really stopping on the first "Title:", or is it ripping way down through the recordset and then stopping?
Now, as to the tricks. The first one is "Select * from NewTable where 1 = 2;" What this does is to create a recordset object that has the exact same configuration as NewTable, but without any rows in it, because we both know that 1 is never equal to 2.
The "xxx" is just a way of dealing with null fields in a Select Case statement. You probably noticed that I changed the select case from:
Select case rstIN.Fields("A"

to
Select Case Nz(rstIN.Fields("A"

, "xxx"
What the Nz function does is, if a field is null, it returns the argument after the comma instead of returning a null. In other words, every time rstIn.Fields("A"

is null, the Nz of rstIN.Fields("A"

is xxx. If rstIN.Fields("A"

is not null, the Nz of rstIN.Fields("A"

returns whatever value rstIN.Fields("A"

actually has.
Nz stands for Null Zero, and one of the most common uses for it is when you're doing math on database fields. For instance, if you're calculating speed, and you have a field called Distance, and a field called Time, and Distance is null, when you do Distance/Time, the answer is Null. However, if you do Nz(Distance,0)/Time, and distance is still null, the answer is zero (0/Time). This can be really convenient in long calculations, because Null, when part of a calculation, always causes the answer to be null.
In our case, xxx just tells us that we came to a row where A is null, (which we assume to be an Address2 row).
There is a possibility that when we changed the select statement, the rows are no longer being returned into the recordset in the order that they occur in the OldTable. (I've been concerned about that.)
OOOOOOOOOOOOOOOOOPS!
I just saw a booboo in my code. You need to change the SQL statement that says:
"Select * from OldTable where A Is Not Null and C Is Not Null"
to:
"Select * from OldTable where A Is Not Null OR C Is Not Null"
That AND is trimming out the "Name:" rows and the Address2 rows from the rstIN recordset. My dumb.
I agree about the fun part. I can't imagine not being a programmer.
Paul