DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA

Hola a todos!

En nuestro trabajo es muy habitual que recibamos archivos con extensión .zip, es decir, que han sido comprimidos previamente para reducir su tamaño y poder así enviarlos más fácilmente.

Aunque actualmente esta información se suele subir a la “nube” para evitar problemas de envío y tamaño de archivos, lo cierto es que se sigue usando habitualmente la compresión.

En Internet hay multitud de códigos en VBA y otros lenguajes para extraer los archivos o carpetas en ZIP. Haciendo un muestreo de dichos códigos y tras volver a programar algunos métodos para hacerlos más eficientes, os dejo la siguiente macro:

Sub DESCOMPRIMIR_ZIP()
'Definimos variables
Dim objShell As Object
Dim iArchivo As Variant, Nombre_Carpeta As Variant
Dim Ruta As String, i As Long
Dim objScripting, objCarpeta
'Seleccionamos archivos zip
iArchivo = Application.GetOpenFilename(filefilter:="Archivos ZIP (*.zip), *.zip", MultiSelect:=True)
'Si no seleccionamos nada, salimos del proceso
If IsArray(iArchivo) = False Then Exit Sub
'Indicamos el directorio actual de nuestro archivo o donde queremos crear o guardar nuestros archivos
Ruta = Application.ActiveWorkbook.Path & "\"
'Nombramos la carpeta en la que vamos a descomprimir los ZIP
Nombre_Carpeta = Ruta & "ARCHIVOS EXTRAIDOS " & Replace(Date, "/", "_") & " " & Format(Now, "hh_mm_ss") & "\"
'Creamos la carpeta con el nombre anterior
Set objScripting = CreateObject("Scripting.FileSystemObject")
Set objCarpeta = objScripting.CreateFolder(Nombre_Carpeta)
'Procedemos a copiar los archivos y carpetas de los ZIP seleccionados a nuestra nueva carpeta
Set objShell = CreateObject("Shell.Application")
For i = LBound(iArchivo) To UBound(iArchivo)
objShell.Namespace(Nombre_Carpeta).CopyHere objShell.Namespace(iArchivo(i)).items
Next i
Set objScripting = Nothing
Set objCarpeta = Nothing
Set objShell = Nothing
End Sub

Cuando ejecutamos el código, se nos abrirá una ventana de diálogo para seleccionar los archivos ZIP. Para este ejemplo he comprimido la carpeta con los archivos de mi última entrada:

* Aunque la imagen parece un archivo .RAR no lo es, en WinRAR podemos comprimir también en ZIP. Solo que el icono no es de siempre, sino el de WinRAR, pero la extensión es .ZIP.

DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA3

Cuando pulsamos en Abrir, la macro generará una capeta en el directorio que hemos especificado en el código, (en este caso en el mismo lugar en el que hayamos guardado el archivo Excel con la macro. La carpeta se nombrará con el nombre “ARCHIVOS EXTRAIDOS” y con la fecha y hora del momento, así no tendremos problemas por duplicidad en el nombre de las carpetas. Así:

DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA1

Y dentro de esta carpeta, estará la información que tenemos en el ZIP:

DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA2

Obviamente, podemos indicar cualquier otro destino para la creación de la carpeta, por ejemplo, si queremos que se cree en el escritorio, debemos indicarlo en la macro (en mi equipo sería así:

Ruta = "C:\Users\Segu\Desktop" & "\"

Por otra parte, también he implementado con otro método más eficiente que MKDir la manera de crear una carpeta:

Set objScripting = CreateObject("Scripting.FileSystemObject")
Set objCarpeta = objScripting.CreateFolder(Nombre_Carpeta)

Ojo, este código sirve únicamente para extensiones .ZIP no para .RAR (que espero programar y mostrar en breve).

Y esto ha sido todo, espero que os sea de utilidad para ahorra tiempo en vuestros procesos.

Descarga el archivo de ejemplo pulsando en: DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA

 
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Anuncios