Решение с использованием установленного WinRAR:
<hr />
Основная процедура
Dim DPath As String
Dim Pass As String, APath As String, AName As String
DPath = "C:\Users\Acer\Desktop\Desktop\" ' - директория, куда распаковать
APath = "C:\Users\Acer\Desktop\" ' - директория, где расположен архив
AName = "Desktop.rar"
Pass = "1"
ShellAndWait "cmd /c rd /S/Q """ & DPath & """", vbHide ' Удаляем временную папку для распаковки (чтобы очистить ее)
MkDir DPath ' а теперь создаем ее
Call Распаковать_документ(APath, AName, DPath, Pass)
' Теперь можно обращаться к распакованным файлам по заданной директории
' после чего удалить папку с распакованными файлами
<hr />
Sub Распаковать_документ(MyArhivPath, MyArhivName, MyDocPath, Password As String)
Const ZipFullName = "D:\WinRAR\WinRAR.exe" ' Путь к установленному WinRAR-у
Dim ShellArgument As String, ZipPathCommand As String
Dim ZipSwitches As String
ZipPathCommand = ZipFullName & " e "
If Dir(ZipFullName) = "" Then
MsgBox "Не найден файл WinRAR.exe" & Chr(10) & ZipFullName
Exit Sub
End If
ZipSwitches = " -p" & Password 'если архив запаролен
ZipSwitches = ZipSwitches & " -o " & MyDocPath ' Директория, куда извлекаем файл
ZipSwitches = ZipSwitches & " *.jpg " ' шаблон имен извлекаемых файлов
ZipSwitches = ZipSwitches & " -aoa " ' перезаписать существующие файлы при извлечении
ShellArgument = ZipPathCommand & MyArhivPath & MyArhivName & ZipSwitches
ShellAndWait (ShellArgument), vbHide ' Параметр vbHide установлен для того, чтобы диалоговые окна WinRAR-а не появлялись
End Sub
<hr />
Sub ShellAndWait(cmd As String, WindowStyle As VbAppWinStyle)
'Процедура выполнения команды cmd и создания задержки до тех пор, пока команда не выполнится
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
If WindowStyle = Null Then WindowsStyle = 1
wsh.Run cmd, WindowStyle, waitOnReturn
End Sub