【问题标题】:Overwrite file when copying into zip file using Microsoft Shell COM Library使用 Microsoft Shell COM 库复制到 zip 文件时覆盖文件
【发布时间】:2014-06-04 01:55:08
【问题描述】:

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

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

【问题讨论】:

  • 是的,您可以删除文件只要您有权限这样做。在 VBA 中,您知道您可以禁用弹出窗口,在大多数(所有?)情况下,这些弹出窗口对您来说都是“是”
  • 删除的方法是什么,因为我已经在类型库上转储了整个 IDL,但我什么也找不到。我不认为权限/特权是一个问题。此外,弹出窗口是由 Shell dll 而不是 Excel 引发的,它看起来与 Windows 资源管理器对话框完全一样,根本不像 Excel 对话框,因此 Application.DisplayAlerts = False 很遗憾无济于事。
  • 确认Application.DisplayAlerts = False 无法修复。不过感谢您的建议。
  • 这将有助于显示您现有的 VBA 代码。

标签: excel vba shell com scripting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    以下是使用 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

    【讨论】:

    • 是的,我得到了链接中的答案。在添加新版本之前,我只是使用 MoveHere 方法将旧项目移开。谢谢。
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 2013-01-27
    • 2011-05-12
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多