6 febrero, 2025

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

13 comentarios 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

  3. Hola segu,
    un articulo muy util y perfectamente explicado 🙂

    tengo 2 dudas al respecto a ver si me las puedes resolver(aunque veo que es un articulo bastante antiguo):
    si el ZIP tiene contraseña, se la puedo pasar de algun modo??

    a la hora de crear las variable mediante concatenacion no se buen la diferencia entr el & y el *, se puede usar este último para ccrear las variables??¿hay alguna mejora o diferencia? Ruta = «C:\Users\Segu\Desktop» + «\»

    Gracias segu,
    saludos 🙂

  4. Hola Nowe,

    Utilizando el objeto Shell.Application no se pueden aplicar contraseñas, tendría que estudiarlo con calma y utilizar otro procedimiento. Siendo no poder ayudarte por ahora,.

    PAra concatenar, siempre &

    Saludos

    1. Gracias por la respuesta Segu 🙂

      Una alternativa que se me ocurre a la descompression con contraseña podria ser pasrle el comando a la instruccion shell(), pero no me termina de funcionar ¿se podria? Aunque esto lo haria dependiente de la app externa

      Saludos Segu 🙂

    1. Solo tienes que reemplazar la parte de la ruta por eso.

      Ruta = Mid(iArchivo(1), 1, Len(iArchivo(1)) - Len(Dir(iArchivo(1))))

      Te dejará el archivo en la misma ruta que has seleccionado el zip

  5. Gracias por la macro. Si fuera posible me podrías decir ¿cómo se podrían renombrar los archivos descomprimidos? Es que tengo el problema de que los Zip contienen archivos que se llaman igual, entonces se sobrescriben unos encima de los otros al descomprimir con la macro.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

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