iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
0
自我挑戰組

Access VBA的眉眉角角系列 第 15

Access VBA 的眉眉角角Day15: 使用WinRAR進行壓縮

  • 分享至 

  • xImage
  •  

相信不少人習慣於撰寫批次檔或者是其他自動化軟體來處理程序,這裡我要提到之前我撰寫的「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的說明文件:
http://ithelp.ithome.com.tw/upload/images/20161213/200072216aafH43uSx.png

網站:
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

希望今天的介紹對您有所幫助。


上一篇
Access VBA 的眉眉角角Day14: 關於多頁切換的SQL語法與應用
下一篇
Access VBA 的眉眉角角Day16: 匯入外部資料庫以AS/400為例
系列文
Access VBA的眉眉角角30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言