如何在 VBA 中实现 Zip 功能?

Posted

技术标签:

【中文标题】如何在 VBA 中实现 Zip 功能?【英文标题】:How do I implement Zip functionality in VBA? 【发布时间】:2009-05-14 19:29:24 【问题描述】:

最近我一直在开发 vba 中的一个应用程序,它依赖于文档本身的 .docm 文件中包含的一些文件。最初,我使用 Windows XP 压缩文件夹功能以编程方式提取文档的内容。这是一个最佳解决方案,因为它内置于所有将使用它的 Windows XP 中,因此无需安装。但是,我遇到了一个障碍:似乎在我提取文档一定次数后,它开始出错说“错误,该文件已经存在”。最初,我以为我弄坏了一些东西并深入挖掘,结果发现我的代码中没有错误,而是压缩文件夹中的错误。

如果您在系统上的某个 zip 文件上收到“文件已存在”错误,压缩文件夹不再适用于任何同名文件,如果您重命名该文件,它会再次开始工作。所以这是我的问题:如何在没有压缩文件夹的情况下在 VBA 中实现 zip 功能?额外问题:如何修复压缩文件夹?

感谢您的宝贵时间。

-西莫

更新: 目前我使用压缩文件夹工作,我正在通过每次发生错误时将文件重命名为新文件来解决该错误。这工作正常,但我正在寻找更多的修复而不是解决问题。

【问题讨论】:

【参考方案1】:

This 或许能帮到你。看起来他正在使用脚本文件系统对象...

【讨论】:

非常感谢您的链接,它包含很多有用的信息。但是,他确实使用了计算机的集成 zip 功能: oShellApp.Namespace(UnzipFolder).CopyHere oShellApp.Namespace(SourceFile).items 但是此页面上还有其他内容可以帮助我解决其他问题。谢谢! 确切地说是压缩文件夹功能。【参考方案2】:

也许是一个额外问题的想法:您不能在将文件与 VBA 应用程序一起使用之前重命名文件 2 次吗?首先给它一个临时名称,然后将其重命名为原始名称。

编辑: 我只是在这里猜测,但似乎不太可能从您的应用程序中解决此问题,而是将其作为一种 Windows 补丁进行修复。这意味着您的应用程序将运行的每台计算机都必须安装此补丁才能正常工作。这不是您可以依赖的东西。所以我认为你应该坚持一种解决方法。

【讨论】:

这实际上是我现在正在做的,但它有点不理想,因为我必须随机生成新文件名,这对我来说很糟糕。 一个完全随机的文件名闻起来确实很糟糕。在检查具有该名称的现有文件时,您不能只用一个连续的数字扩展文件名吗?【参考方案3】:

似乎没有直接在 Windows 中访问 zip 功能的好方法。似乎唯一的好方法是使用其他答案中链接的 zip 文件夹复制方法。至于我遇到的问题,我会通过每次使用一个新的文件名来解决它。

【讨论】:

以上是关于如何在 VBA 中实现 Zip 功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在vba编程中实现当鼠标经过Listview控件中的item时,输出当前item的值?

如何在delphi中实现对文件进行base64编码

在 VBA 中实现接口的事件

VBA程序里面如何使用Lisp的选择集?

如何在现有的 bios 中实现新功能?

EXCEL VBA 窗体设计,如何实现查询前一条记录和后一条记录的功能。