Poprzedni wpis zawierał informację, jak skompresować pliki do archiwum ZIP to teraz dwa słowa o dekompresji.
Tutaj znów moglibyśmy skorzystać z jakiegoś zewnętrznego programu, ale już wcześniej pisałem o wadach tego rozwiązania.
Oto prosta funkcja rozpakowująca całe archiwum do wskazanego folderu:
' Inspiracja:
' https://www.rondebruin.nl/win/s7/win002.htm
Public Function UnZip(ByVal ZIPname, ByVal ExtractFolder) As Boolean
On Error GoTo UnZip_Error
Dim oApp As Object
Set oApp = CreateObject("Shell.Application")
oApp.Namespace(ExtractFolder).CopyHere oApp.Namespace(ZIPname).Items
UnZip = True
UnZip_Error2:
Set oApp = Nothing
Exit Function
UnZip_Error:
MsgBox Err.Description, vbExclamation, "UnZip"
Resume UnZip_Error2
End Function
Z kolei jeśli chciałbyś rozpakować tylko jeden plik z archiwum to możesz użyć tej oto funkcji:
Public Function UnZipOneFile(ByVal ZIPname, ByVal ExtractFolder, ByVal FileToExtract) As Boolean
On Error GoTo UnZipOneFile_Error
Dim oApp As Object
Set oApp = CreateObject("Shell.Application")
oApp.Namespace(ExtractFolder).CopyHere oApp.Namespace(ZIPname).Items.Item(FileToExtract)
UnZipOneFile = True
UnZipOneFile_Error2:
Set oApp = Nothing
Exit Function
UnZipOneFile_Error:
MsgBox Err.Description, vbExclamation, "UnZip"
Resume UnZipOneFile_Error2
End Function
Przykład wywołania funkcji:
Sub TestUnZip()
Dim Ret As Boolean
Ret = UnZip("v:\pliki.zip", "v:\pliki\")
'Ret = UnZipOneFile("v:\pliki.zip", "v:\pliki\", "readme.txt")
If Ret = True Then
MsgBox "Rozpakowano", vbInformation
Else
MsgBox "Wystapił błąd", vbExclamation
End If
End Sub
Uwaga: funkcja nie posiada za bardzo obsługi błędów. Warto jest wcześniej sprawdzić, czy np. plik zip istnieje, czy folder do którego chcemy rozpakować pliki istnieje a także np. czy mamy prawa do zapisu do tego folderu itp.
Wskazówka: jeśli rozpakowujemy pliki do folderu w którym są już jakieś inne pliki, pojawi się standardowy windowsowy komunikat, co zrobić z plikami o takich samych nazwach.