Я пробовал вышеупомянутую функцию Sub UnZipFile(...)
в Excel 2010, и она не работала: ошибка времени выполнения '91' (переменная объекта или блок не установлен) в строке
Set objArchive = objApp.Namespace(strArchive).Items()
и строка
Set objDest = objApp.Namespace(strDest)
молча также не работает: после выполнения objDest
все равно ничто!
Microsoft .Namespace()
принимает в качестве параметра объект, строковую константу или строковую переменную. Со строковыми переменными часто возникают подозрительные проблемы, требующие обхода:
Set objArchive = objApp.Namespace(**CStr(** strArchive **)**).Items()
Set objDest = objApp.Namespace(**CStr(** strDest **)**)
или альтернативный обходной путь
Set objArchive = objApp.Namespace(**"" &** strArchive).Items()
Set objDest = objApp.Namespace(**"" &** strDest)
И строка objDest.CopyHere objArchive
также не работала: папка назначения оставалась пустой!
Вот версия, которая работает в Excel 2010 и, скорее всего, также в других средах:
Sub UnZipFile(strZipArchive As String, strDestFolder As String)
Dim objApp As Object
Dim vItem As Variant
Dim objDest As Object
Set objApp = CreateObject("Shell.Application")
Set objDest = objApp.Namespace(CStr(strDestFolder))
For Each vItem In objApp.Namespace(CStr(strZipArchive)).Items
objDest.CopyHere vItem
Next vItem
End Sub