利用VBA解壓縮excel檔至某個資料匣,在網路上參考了其他人的寫法,已可以順利處理為副檔名=zip的檔案,但副檔名為.tar則無法成功,下方是我的程式碼:
Sub ExtractAllFiles()
Dim File As String
Dim ShellStr
File = Dir("C:\test")
While (File <>"")
if Instr(1,File,".tar")>0 then
ShellStr = "C:\Program Files\PKWARE\PKZIPW -e C:\test\ " & File & " C:\test\"
Call Shell(ShellStr, vbHide)
File = Dir
DoEvents
Loop
End Sub
結果出現run-time error 53~不知那裡有問題?
是我的解壓縮檔的路徑有錯?還是那裡有漏掉..感謝各位的幫忙
你可以用 MsgBox 先把檔案字串印出來,
確認看看名稱有沒有錯誤,
先確定是哪個步驟的問題.
Sub ExtractAllFiles()
Dim File As String
Dim ShellStr
File = Dir("C:\test\*.tar")
Do Until File = ""
DoEvents
ShellStr = "C:\Program Files\PKWARE\PKZIPW -e C:\test\" & File & " C:\test\"
Call Shell(ShellStr, vbHide)
File = Dir
Loop
End Sub
用Shell去執行程式,跟用[命令字元]一樣,如果程式的路徑和參數內含有空格,就要用引號去括起來,否則空格便被誤以為是參數的分隔符。
在你的程式裏,PKZIPW的路徑上有空格,因此出現run-time error 53(即是找不到PKZIPW檔案)。 tar檔案名內也可能含有空格,因此這些檔案也無法成功。
針對這個問題,你的程式可以作以下的修改:
'用雙引號包圍字串
Function Quoted(s As String)
Quoted = Chr(34) & s & Chr(34) 'Chr(34) 是雙引號字元
End Function
Sub ExtractAllFiles()
Dim workDir As String: workDir = "C:\test\"
Dim appPath As String: appPath = "C:\Program Files\PKWARE\PKZIPW"
Dim tarFilename As String: tarFilename = Dir(workDir & "*.tar")
While tarFilename <> ""
Dim tarPath As String: tarPath = workDir & tarFilename
Dim shellCmd As String: shellCmd = Quoted(appPath) & " -e " & Quoted(tarPath) & " " & Quoted(workDir)
Call Shell(shellCmd, vbHide)
tarFilename = Dir
DoEvents
Wend
End Sub
另外,你的程式還有2大問題:
[問題1] 把全部解壓後的檔案放在同一個目錄內
如果來自不同tar檔的解壓檔有相同路徑和檔名,新、舊的解壓檔會產生衝突(或者會被覆蓋)。
[問題2] 用vbHide(隱藏視窗)去執行程式,而且不理執行的狀況和結果
程式不一定會解壓成功,遇到問題時,還可能停下來要用戶輸入。但是視窗被隱藏而無法得知狀況或作出回應,更糟的是程式在背後永遠佔用資源。
謝謝各位的幫忙,
今天試的結果:執行階段錯誤'5':
程序呼叫或引數不正確
請你打開[命令字元]視窗,運行以下的指令,然後把結果的截圖放上來。
指令的{file}要換為在C:\test目錄內其中一個zip檔名(例如:abc.zip)。
"C:\Program Files\PKWARE\PKZIPW" -e "C:\test\{file}" "C:\test"
這是在家裡自行安裝的解壓縮檔,真正要解壓縮.tar檔是在公司,家裡或公司皆出現一樣的錯誤訊息,謝謝各位的幫忙~
你家的peazip跟你公司的pkzip,解壓程式和路徑完全不同。但是你只把peazip的資料放上來,對了解在你公司的pkzip問題有甚麽幫助?!
就你家的解壓程式而言,PeaZip只是一個目錄的名稱,真正要運行的程式是在這個目錄內的peazip.exe。
peazip跟pkzip是不同的應用程式,參數定義完全不同,怎可以把pkzip的參數用在peazip上面?!
如果用PeaZip去解壓C:\test\python.tar檔案,在[命令字元]的指令應診是
"C:\Program Files\PeaZip\peazip.exe" -ext2folder "C:\test\python.tar"
[備註]peazip的用法和參數定義,可以在PeaZip目錄內的peazip_help.pdf檔內找到。
就你公司的解壓程式而言,如果要解壓C:\test\python.tar檔案,在[命令字元]的指令估計是
"C:\Program Files\PKWARE\PKZIPW" -e "C:\test\python.tar"
在你公司裏,請在[命令字元]運行以上指令,然後把結果的截圖放上來。
建議你先去報讀一些基楚電腦課程,然後才去學寫程式。