I don't really understand when you say:
"In the existing Macro sheet create a variable with the filename based on the invoice, and use it as the 'SaveAs' filename,
Pass this variable to a VBA subroutine, in a fixed location such as Personal.xls"
Currently, I pick up teh template invoice file names INVSALE.XLS Run a series of macros to pick up teh next Invoice number, populate it with products, quantities, print a packing sheet and write to a log file. This file is then saved as a new file using the invoice number. So INVSALE.XLS beccomes 10058.XLS. Same for teh next invoice, and so on 10059.XLS, 10060.XLS ....
In the second stage, and this is where the VBA code is called, I pick up the file 10059.XLS add in posting details and postage costs, use a series of macros to write to other log files, and print final invoice copies. Part of thsi process calls a VB code from teh Macro sheet. (We sorted this problem now and teh Macro CALLS teh VB rather than RUNs. However, the macro directs teh call to a VB that references the template file INVSALE.XLS.
I have not understood the first part of your instructions how I will overcome this constantly changing location reference.
I have not got past this point to be able to say anything about the following stages you gave me... Sorry amy be I am being a bit thick here.