使用VBA Shell命令提取文件夹中的所有.gz文件

4

我有以下VBA代码可以提取给定目录中的所有文件。

Sub extractAllFiles()

    Dim MyObj As Object, MySource As Object, file As Variant
    Dim shellStr As String

    file = Dir("C:\Downloads\")
    While (file <> "")
        If InStr(file, ".gz") > 0 Then
            shellStr = "winzip32 -e C:\Downloads\" & file & " C:\Downloads\"
            Call Shell(shellStr, vbHide)
        End If
        file = Dir
    Wend

End Sub

执行这个子程序时,我收到了一个运行时错误53,“找不到文件”的错误。当我复制shellStr到命令提示符并执行它时,例如:winzip32 -e C:\Downloads\file1.gz C:\Downloads\,它可以完美地工作!我成功将file1.gz中的文本文件提取到下载目录中。然而,在VBA中运行它似乎不起作用。请问有人能帮忙解决吗?
4个回答

4

您应该尝试使用完整的shell命令路径,像这样,这对我有效:

Sub extractAllFiles()

  Dim MyObj As Object, MySource As Object, file As Variant
  Dim shellStr As String

  file = Dir("C:\Downloads\")
  While (file <> "")
    If InStr(1, file, ".gz") > 0 Then
      shellStr = "C:\Program Files (x86)\WinZip\winzip32 -e C:\Downloads\" & file & " C:\Downloads\"
      Call Shell(shellStr, vbHide)
    End If
    file = Dir
  Wend

End Sub

我的winzip安装在C:\Program Files (x86)\WinZip\winzip32。你应该使用你自己的安装路径。

C:\Program Files\WinZip\winzip32

天啊,我简直不敢相信。我错过了Winzip的路径。只是尝试了一下,就像魔法一样奏效了。不过有一个问题,我该如何防止Windows资源管理器在解压后弹出来显示目录内容? - JTFRage
1
没事了,我搞定了。这是WinZip解压选项中的一个设置问题。 - JTFRage
这更像是Winzip的行为。当我从Access VBA启动Winzip时,它是有用的,可以看到目录。我不知道如何做。 - jacouh

1

WinZip路径需要是绝对路径:

C:\Program Files\WinZip\winzip32'


1

请检查您的WinZip路径。这需要被修正为完整的WinZip路径。


0

使用这篇Stack Overflow帖子中的逻辑,尝试以下代码:

Sub ExtractAllFiles()
    Dim FileName As String
    Dim ShellStr
    FileName = Dir("C:\Downloads\*.gz")
    Do While Len(FileName) > 0
        ShellStr = "winzip32 -e " & FileName & " C:\Downloads"
        Call Shell(ShellStr, vbHide)
        FileName = Dir
    Loop
End Sub

请告诉我们这是否有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接