从 VBA 运行时命令行不起作用



我正在尝试通过我的VBA代码解压缩文件。我正在使用 7z 命令行解压缩文件。但是,该命令在从普通命令提示符运行时有效,但在通过VBA代码运行时,相同的命令不起作用。

Command:
"C:Program Files7-Zip7z.exe" x "C:UsersPublicAppDataLocalTempSample.zip"

为了进一步理解,我正在尝试提取一个docx文件,这就是为什么我将其重命名为.zip然后提取的原因。

Sub tst()
Dim MyFile As String, Outdir As String, Cmdstr As String
MyFile = Chr(34) & "c:TMPratings.gz" & Chr(34)
Outdir = Chr(34) & "c:tmp" & Chr(34)
Cmdstr = "c:Program Files7-Zip7z.exe" & " e " & MyFile & " -o" & Outdir
Debug.Print Cmdstr
Call Shell(Cmdstr, 1)
End Sub

我使用这种类型的函数(类似)来解压缩文件。

缺少正确的引用,应该是

Cmdstr = """c:Program Files7-Zip7z.exe""" & " e " & MyFile & " -o" & Outdir

7-Zip命令行版本7za.exe 而不是 7z.exe

我不确定是否使用Shell方法运行 CLI 应用程序,但接下来可以工作:

Cmdstr = "cmd /D /C " & """full path to 7za7za.exe""" & " e " & MyFile & " -o" & Outdir

编辑。要保留文件夹结构,请将 7zx命令一起使用,而不是e命令。当 e 命令将所有提取的文件复制到一个目录时,z 命令从存档中提取文件,这些文件的完整路径位于当前目录或输出目录中(如果指定)。因此,您可以按如下方式定义Cmdstr

Cmdstr = """c:Program Files7-Zip7z.exe""" & " x " & MyFile & " -o" & Outdir

最新更新