22 abril, 2021

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!!

Comparte este post

6 comentario en “DESCOMPRIMIR ARCHIVOS .ZIP DESDE EXCEL CON VBA

  1. Perdón profe, pero el archivo ZIP que envió es extensión RAR: Icono de 3 libros horizontales. El icono de ZIP es una prensa comprimiendo 2 Cajones. Favor revisar

    1. Hola Emiro:

      Lo sé, pero es que cuando comprimimos con el programa WINRAR también podemos hacerlo como ZIP aunque el icono sea como el de RAR.

      Gracias por comentarlo, pensé que esto era conocido por los lectores. Lo aclararé también en el post.

      Saludos,

      1. Hola amigo, porque me saldra el error en el metodo NameSpace de objeto IShellDispatch???
        Dim origen, destinoo As Variant
        Set oAplica = CreateObject("Shell.Application")
        origen = "C:\Users\grupo\Dropbox\Limpiezas\CTQUI000O.RAR"
        Destino = "\\192.168.8.89\fotos1"

        oAplica.Namespace(Destino).CopyHere oAplica.Namespace(origen).items

        El programa funcionaba sin errores, el codigo sigue igual. me puedes asesorar?

  2. buen dia profe.... disculpe me interesaría saber como descomprimir archivos con la exención .rar no se si me podría orientar en como hacer dicha macro

Responder a Segu Cancelar respuesta

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies