Two things I'd suggest:
1. Step through your macro in the VB Editor line-by-line to see where things fall apart. Click your mouse anywhere inside the macro code and press F8 to move line-by-line. You'll be able to see things happen and to hover over variable names as they change value.
2. You're using multiple workbooks, worksheets and ranges. When doing so, it is always best to fully qualify each object (whether it be range, defined name, etc).
For example:
Wherever you use Range, you should also be specifying the workbook and worksheet rather than relying on Activate and Select events (which are unnecessary to begin with 99% of the time).
To save some typing you could always use the With/EndWith construct. Just be careful when nesting With statements to make sure you're referring to the proper object.
Bookmarks