Thing is, I'm only outputting a single invoice (and at this stage it is only one page), so while I'm grateful for your efforts (and apologise to the brain cells for the rough treatment! ), I'm not sure how it applies.

However I'm wondering if putting in a sleep somewhere prior to the code moving on from the report (not sure just where at this point) might be worth a try.

Actually at this point anything is worth a try!

For the record, I've listed out the various steps the code seems to go through in the COM interface (where the darn thing seems to mostly happen... which I can't debug ):

Method               Print To Preview    EMail
======               ================    =====
ComReportClose          X                  X        (only if the report has been called before in this run)
ComReportOpen           X                  X
ComPDFExportOptions     XX                 XX       (happens twice in both cases)
ComReportRefresh        X                  X
ComReportPreview        X
(at this point in the preview case, I manually select the "Export" option)
ComPDFExportOptions     X
ComReportExport         X                  X
ComReportCancel         X                           (on closing the previewer)