Aprire file .ZIP in VBA
Richiesta di un visitatore
Non riesco a 'unzippare' i files .ZIP con VBA, (Office XP su WIndows XP PRO) esiste qualche modo?
Risposta, forse parziale
Francamente mi sembra una richiesta "borderline" rispetto agli scopi del VBA. Per estrarre file zippati il modo più veloce penso che sia quello di cliccare sul file .zip, con quel che segue.
Comunque l'unica keyword che mi viene in mente è Shell, che lancia i più semplici programmini.
Nella fattispecie, provi l'istruzione seguente:
Shell ("C:\Utility\WinZip\WINZIP32.EXE C:\MioZip.zip")
Dove ciascuno dovrà inserire il path del suo PC nonché il nome preciso dell'eseguibile e il path dell’ipotetico MioZip.zip.
Per rendere più decente la faccenda si potrebbe pensare a una Sub con argomento:
Sub UnZippa (ZipFile As String)
Const MioZip = "C:\Utility\WinZip\WINZIP32.EXE"
Shell(MioZip & " " & ZipFile & ".zip")
End sub
Tale routine tuttofare (o quasi) si può lanciare in vari modi:
Unzippa "C:\MioZip"
Unzippa "C:\TuoZip"
E così via.
Altro non so dire, e probabilmente deluderò chi si attende miracoli, in particolare il successivo trattamento programmatico dei file estratti dal .zip…
Un’altra cosa che confesso di essere venuto a sapere solo da poco è che l’apertura dei file zippati è possibile in Windows Xp anche se nel PC non è installato WinZip.
Ma come richiamare tale utility "nativa"? Se qualcuno lo sa lo dica!
ULTIMA (o penultima) ORA
Da un certo Ennius (ennius@interfree.it) mi perviene poi questo messaggio:
[ lo scopo si ottiene ] usando le librerie di sistema (Shell.dll o Shell32.dll)e non la funzione Shell. Ci pensa il S.O. ad aprire l'eseguibile associato all'apertura dei file .zip:
Sub ApritiSesamoZip()
Set MyShell = CreateObject("WScript.Shell")
Percorso = "C:\TuoFile.zip"
MyShell.Run Chr(34) & Percorso & Chr(34)
End Sub
Segnalazione molto interessante, che volentieri accodo in questo post.
Ma alla fin fine che cosa cambia rispetto alla soluzione con la funzione Shell del Visual Basic? Di primo acchitto non me n'ero accorto, ma il vantaggio è chiaro: non ci si deve preoccupare dell'indirizzo di Winzip e la cosa equivale, in ambito manuale, a un clic sul file .zip. Concludo, pro tempore, con una routine con argomento:
Sub ApriZipFile(FileZip As String)
Set MyShell = CreateObject("WScript.Shell")
MyShell.Run Chr(34) & FileZip & ".zip" & Chr(34)
End Sub
Sub TestApriZipFile
ApriZipFile FileZip:="C:\MioZip"
End Sub
Penso che questo metodo funzioni con qualunque applicativo associato coi file .zip nel s.o. o, magari, anche laddove tale associazione sfrutta la specifica feature "nativa" di Windows Xp.
Il prode Ennius o qualcun altro ce lo fa sapere? Grazie.
?>
?>
?>