这需要同时适用于Windows 7和Windows 10。我正在将一个客户端非常手动的基于Excel VBA的过程转换为通过ODBC将MS Access链接到他的MRP程序的Pervasive数据库后端的东西。
我发现了另一个线程,他们正在使用Access VBA解压缩文件,但我无法发布到该网站,即使我有登录帐户,所以我在这里发布:
https://answers.microsoft.com/en-us/office/forum/office_2007-access/how-do-i-extract-zip-files-through-ms-access/e3720f53-2413-409b-ad0b-bbfb67e823e4
该链接中使用的代码如下。我还没有运行它。我只是想知道如何合并加密的密码值以获得所需的结果:
Sub ImportZippedFile(ByVal sZipFileName As Variant)
Dim oApp As Object
Dim fileNameInZip As Variant
Dim sFileNameFolder As Variant
Dim vLocalZipName as Variant
vLocalZipName =sZipFileName
'use system temp folder to extract zipped file to.
sFileNameFolder = Environ("Temp") & "Excel_Tmp"
'Extract the file into the newly created folder
Set oApp = CreateObject("Shell.Application")
'list all the file names within the zip file
For Each fileNameInZip In oApp.Namespace(vLocalZipName ).items
msgbox filenameinzip
oApp.Namespace(sFileNameFolder).CopyHere _
oApp.Namespace(vLocalZipName ).items.item(CStr(fileNameInZip))
Next fileNameInZip
Set oApp = Nothing
End Sub
然而,该示例中的zip文件显然没有密码保护。我的客户端有一个目录,里面满是受密码保护的zip文件。他使用Excel VBA和一个数据库表,该表包含文件名和解压缩文件所需的加密密码。他的代码从Excel VBA外壳中调用WinZip,并将加密的密码作为参数提供给WinZip以便解压缩文件。
他目前的代码使用Windows7下的Winzip。我使用的是Windows 10,当我在机器上安装Winzip时,它冻结了文件资源管理器,我无法查看我的子目录或目录。当我卸载WInzip时,一切又好起来了。
如果我有加密的密码,什么代码可以让我只使用Access VBA解压缩文件?
加密密码是由他的Sage MRP程序生成的。
我在文章中介绍了压缩和解压缩"Windows资源管理器方式":
使用VBA压缩和解压缩文件和文件夹Windows资源管理器方式
但这些与加密的zip文件无关,因为您无法在本机中做到这一点。
但是,您可以使用WinZip命令行,方法是直接执行此操作,并向其传递适当的命令行。