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

时间:2013-11-26 16:17:28

标签: shell vba excel-vba extract excel

我有以下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中的文本文件解压缩到downloads目录。但是从VBA运行它似乎不起作用。

任何人都能解释一下吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

WinZip路径需要是绝对路径:

C:\ Program Files \ WinZip \ winzip32'

答案 2 :(得分:1)

检查您的WinZip路径。这需要很好地修复到WinZip的完整路径。

答案 3 :(得分:0)

使用this SO post中的逻辑,尝试以下代码:

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

如果有帮助,请告诉我们。