使用Microsoft Shell COM Library复制到zip文件时覆盖文件

我正在使用VBA中的Microsoft Shell Controls And Automation COM库。 我有一个zip文件,我正在复制一个文件到zip文件。 问题是该文件已经存在,它会抛出一个对话框,说:“你已经有一个在这个位置具有相同名称的文件,你想a)复制和replace或b)不要复制”。 我想以编程方式说复制和replace(覆盖!)。

我认为在.NET框架上的等价物有一个文档页面在http://msdn.microsoft.com/en-us/library/windows/desktop/ms723207%28v=vs.85%29.aspx但我已经尝试了多种这些。

此外,我会接受删除原来的项目,使添加成功没有问题; 可悲的是我找不到删除项目的方法。

我正在使用Windows 8,64位版本。 我在Excel(14)VBA(7)和我正在使用的库是在C:\ Windows \ SysWOW64 \ shell32.dll

这是我正在谈论的types库的IDL的头

// Generated .IDL file (by the OLE/COM Object Viewer) // // typelib filename: shell32.dll [ uuid(50A7E9B0-70EF-11D1-B75A-00A0C90564FE), version(1.0), helpstring("Microsoft Shell Controls And Automation") ] library Shell32 { // TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} 

我的首选答案是使用MoveHere方法在添加之前移动旧的方法。 这样没有对话框被抛出。 谢谢大家。

以下是如何使用Shell从zip中删除文件:

 Sub DeleteFromZip() Dim fldr, zpath, itm, vrbs, vrb zpath = "C:\_stuff\test\test.zip" Set fldr = CreateObject("Shell.Application").Namespace(zpath) For Each itm In fldr.items If itm.Name = "IMG_0000322_2014.03.11.jpg" Then itm.invokeverb "Delete" Exit For End If Next itm End Sub 

这确实提出了一个确认对话框 – 看看这个链接如何避免它:

FolderItem.InvokeVerb(“删除”)没有确认