Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA Shell命令提取文件夹中的所有.gz文件_Shell_Vba_Excel_Extract - Fatal编程技术网

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

使用VBA Shell命令提取文件夹中的所有.gz文件,shell,vba,excel,extract,Shell,Vba,Excel,Extract,我有以下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

我有以下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
Sub-extractAllFiles()
Dim MyObj作为对象,MySource作为对象,文件作为变量
暗壳串
file=Dir(“C:\Downloads\”)
While(文件“”)
如果InStr(文件“.gz”)>0,则
shellStr=“winzip32-ecc:\Downloads\”和文件&C:\Downloads\”
调用Shell(shellStr、vbHide)
如果结束
file=Dir
温德
端接头
当我执行这个子程序时,我得到一个运行时错误53,“未找到文件”错误。当我复制shellStr时。。。示例:
winzip32-ec:\Downloads\file1.gz C:\Downloads\
并在命令提示符下执行,它工作得非常好!我将file1.gz中的文本文件解压缩到下载目录。然而,从VBA运行它似乎不起作用

有人能解释一下吗?

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

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

让我们知道这是否有帮助。

您应该尝试使用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:\ProgramFiles\WinZip\winzip32'

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

天哪,我简直不敢相信。我错过了winzip的路径。只是试了一下,效果很好。不过有一个问题,如何防止windows资源管理器在目录被提取后弹出显示目录的内容?没关系,我知道了。这是WinZip中“解压缩选项”下的一个设置。这相当于WinZip行为。当我从Access VBA启动winzip以查看目录时,它非常有用。我不知道怎么做。
C:\Program Files\WinZip\winzip32