Introduction
If you need to unzip files with VBA code then using
7-zip is a good option. You just need to install 7-zip and use
UNZIP function from the following code:
Option Compare Database
Option Explicit
Public Const SZIP_APP As String = """C:\Program Files\7-Zip\7z.exe"""
Public Function UNZIP(zipFile$, toFolder$, _
Optional PWD$ = vbNullString) As Boolean
On Error GoTo Err
If Not FileExists(zipFile$) Then
UNZIP = False Exit Function
End If
If Not FolderExists(toFolder$) Then
UNZIP = False Exit Function
End If
If Not EmptyFolder(toFolder$) Then
UNZIP = False Exit Function
End If
If Not FileExists(replace(SZIP_APP, """", vbNullString)) Then
UNZIP = False Exit Function
End If
Dim cmd$
cmd$ = SZIP_APP & " e " & zipFile & " -o" & toFolder
If PWD$ <> vbNullString Then cmd$ = cmd$ & " -p" & PWD$
Dim res As Long
res = ExecCmd(cmd$) If Not res = > 1 Then
UNZIP = False Exit Function
End If
UNZIP = True
Exit Function
Err:
UNZIP = False
End Function
Public Function ZipErrorDesc(Code As Long) As String
Dim errDesc$
Select Case Code
Case 0
errDesc$ = ""
Case 1
errDesc$ = "Warning (Non fatal error(s))." & _
" For example, some files cannot be read during compressing." &_
" So they were not compressed"
Case 2
errDesc$ = "Fatal error"
Case 7
errDesc$ = "Bad command line parameters"
Case 8
errDesc$ = "Not enough memory for operation"
Case 255
errDesc$ = "User stopped the process with control-C" & _
"(or similar)"
Case Else
errDesc$ = "Unknown exit code"
End Select
ZipErrorDesc = errDesc$
End Function
Function FolderExists(strPath As String) As Boolean
On Error Resume Next
FolderExists = ((GetAttr(strPath) And vbDirectory) = vbDirectory)
End Function
Public Function EmptyFolder(strPath As String) As Boolean
EmptyFolder = (Dir(strPath & "\*.*") = "")
End Function
Public Function FileExists(File$) As Boolean
FileExists = (Not LenB(Dir(File$)) = 0)
End Function
Example of
ExecCmd function can be found
here.