I find that treating Kix at the same level as a batch file during development - running from a command prompt and seeing the results immediately (inclluding nasty errors) is easier than trying to manage popups. I reserve those for the finished product that might be run by those less technical. ;\)

I was getting the same result - blank file. When I printed the @SERROR (as in my last example) I got a COM error - "Null()-Null() blah-blah...". I tested it with Office 2K3 and got the same result, so it's something related to how the cell is referenced. I'll tinker with it more tonight, along with correcting the example in the UDF code.

Putting the whole thing in a function would be good, since you've got 3 files to process. I'm glad to see you working with one file and raw code first to get the kinks worked out before moving to a function, though. Good building-block approach. With a function you could pass file and tab names, along with the XL object pointer. Handle the file open/create/close outside the function, and the tab create/select/write in the function.

Glenn
_________________________
Actually I am a Rocket Scientist! \:D