In regards to the answer to the question here by Hans Passant... Clean up Excel Interop Objects with IDisposable ...
He enlightened me to the fact that I don't need to follow the two dot rule... declaring all com objects so I can release via Marshal.ReleaseComObject when done with them. So now I understand I can just call GC.Collect and GC.WaitForPendingFinalizers after my Excel code and all objects will be released properly. For one, I think that is great and will reduce the length of macros I write in c# but I was in the habit of releasing objects as soon as I was done with them to minimize memory usage while the macro ran. Should I be concerned with cleaning up objects as I go or is it ok to just do a cleanup at the end of the macro like Hans suggested? I usually work with huge files and my macros will create many com objects to complete a task.