【问题标题】:Extract all .gz file in folder using VBA Shell command使用 VBA Shell 命令提取文件夹中的所有 .gz 文件
【发布时间】:2013-12-11 21:46:48
【问题描述】:

我有以下 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 运行它似乎不起作用。

谁能解释一下?

【问题讨论】:

    标签: shell vba excel extract


    【解决方案1】:

    您应该尝试使用对我有用的 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 资源管理器在解压后弹出显示目录内容?
    • 没关系,我明白了。这是 WinZip 中解压缩选项下的设置。
    • 这是一种 Winzip 行为。当我从 Access VBA 启动 winzip 以查看目录时,它很有用。我不知道怎么做。
    【解决方案2】:

    WinZip 路径必须是绝对路径:

    C:\Program Files\WinZip\winzip32'

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        使用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
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-26
          • 2013-08-13
          • 1970-01-01
          • 2022-12-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-26
          • 1970-01-01
          相关资源
          最近更新 更多