相信不少人習慣於撰寫批次檔或者是其他自動化軟體來處理程序,這裡我要提到之前我撰寫的「Excel VBA 的眉眉角角Day21: 執行外部程式」內容,因為RunCMD這部份的程式也可共用,而本篇要提到的WinRAR也是用此方式呼叫,這裡我對原有程式進行加強,加入bnSilent參數使用,讓想自動化執行不受錯誤影響而卡住的程序使用此方式呼叫,子程式名稱我改名為RunCMD2:
Function RunCMD2(strCMD As String, bnSilent As Boolean, waitOnReturn As Boolean, windowStyle As Integer) As Boolean
'若無法執行,須引用 "Windows Script Host Object Model"
' (工具 > 設定引用項目 >勾選)
' 使用 WScript.Shell 方式
' 參數:
' strCMD 執行字串
' bnSilent 是否使用安靜模式,Ture的話不會顯示錯誤訊息
' waitOnReturn 是否等待返回
' windowStyle 視窗樣式,1為顯示 0不顯示
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim errorCode As Integer
Debug.Print strCMD
errorCode = wsh.Run(strCMD, windowStyle, waitOnReturn)
If errorCode = 0 Then
RunCMD2 = True
Else
If errorCode <> 0 And bnSilent = False Then
MsgBox "Program exited with error code: " & errorCode & " - " & strCMD
End If
RunCMD2 = False
Exit Function
End If
End Function
關於壓縮軟體WinRAR相信很多人都不陌生,筆者也使用多年,其中的命令列模式的指令可以說是多到嚇人,仔細專研後會發現,使用指令還真方便,尤其是自動化執行時,再加上這些指令真的是如虎添翼。相關指令說明,可參考WinRAR的說明文件:
網站:
RARLAB官方網站 http://www.rarsoft.com/
WinRAR國際中文版 https://rar.tw/
接下來,我們介紹主程式:
Function WinRAR(strProcess, strDes As String, strSrc As String, strPassword As String, strOption) As Boolean
'strProcess 處理方式,如a,m,x等指令
'strDes 壓縮檔目的地
'strSrc 要壓縮的原始資料
'strPassword 密碼
'strOption 其他選項
Dim strCMD As String
strCmd = """" & Environ("ProgramFiles") & "\WinRAR\winrar.exe""" & " " & _
strProcess & " """ & strDes & """ """ & strSrc & """ " & stamp_way
If Len(strPassword) > 0 Then strCMD = strCMD & " -p" & strPassword
If Len(strOption) > 0 Then strCMD = strCMD & strOption
Debug.Print strCMD
WinRAR = RunCMD2(strCMD, True, True, False)
End Function
使用自製的模組來呼叫WinRAR,可以有助於減少程式開發的時間,不然的話,也可以用RunCMD2來直接呼叫,只是指令撰寫就要全手動執行了。
完成後,可以試著找個東西壓看看:
Sub WinRAR測試()
Debug.Print WinRAR("a", "d:\test.rar", "d:\test.eml", "123", "")
End Sub
希望今天的介紹對您有所幫助。