The way I do it using VBA is as follows:
I use a report wrapper process that has a sheet which contains the following:
Sheet name, Visible, Retrieve, Server, App, Db, Range, Date/Time
This is used by a retrieve macro, which then calls a replace zero macro.
The retrieve macro gets the data, having first set the retreive value for Missing to be #Missing.
The replace macro is as follows:
application.DisplayAlerts = False
application.ScreenUpdating = False
selection.Replace What:="#Missing", Replacement:="0", LookAt:=xlPart, _
application.DisplayAlerts = True
application.ScreenUpdating = True
If you want to see the whole workbook, just post me your e-mail address