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

时间:2014-06-03 15:21:45

标签: excel vba shell com scripting

我正在使用VBA的Microsoft Shell控件和自动化COM库。我有一个zip文件,我正在将文件复制到zip文件中。问题是文件已经存在并且它会抛出一个对话框,上面写着"在这个位置已经有一个同名的文件你想要a)复制和替换或b)不要复制和#34 ;.我想以编程方式说复制和替换(覆盖!)。

我认为.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

以下是类型库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}

2 个答案:

答案 0 :(得分:1)

我的首选答案是使用MoveHere方法在添加之前将旧的方法移出。这样就不会抛出任何对话框。谢谢大家。

答案 1 :(得分:0)

以下是使用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("Delete") without confirmation