我有以下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运行它似乎不起作用。
任何人都能解释一下吗?
答案 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
如果有帮助,请告诉我们。