Another thought Neil.
If you step through the code one line at a time and it works OK then it is a timing issue. Placing a delay after requesting an object to be created should fix it. Another option is to loop until the object has been created with code such as
oFld = ''
DO WHILE TYPE('oFld') <> 'O'
oFld = oShell.NameSpace(ZipFileName)
ENDDO
If on stepping through the code it still fails, then it is an installation problem. It could be that some badly written install code has overwritten a DLL with an older version.
There is stuff about this on the net, referring to versions of shdoc401.dll (which I don't have), shdocvw.dll, shell32.dll (v4.71 or higher), scrrun.dll (v5.6.0.6626) and so ad infinitum. It could be worth trying out the code on different PCs.
For some other zip stuff see XPZipHandler in the Downloads section.