Borrar carpetas vacías.

Dudas sobre código
DEMON777
Nivel 2
Mensajes: 50
Registrado: Vie Jun 09, 2017 6:40 am

Borrar carpetas vacías.

Mensajepor DEMON777 » Jue Oct 31, 2019 10:54 pm

Saludos a todos.

Quisiera por favor me ayuden con un código para eliminar las subcarpetas vacías que estén dentro de una carpeta principal.
La carpeta principal tiene un nombre fijo y está en la carpeta de Documentos, pero de las que están en su interior puede variar el nombre y también puede variar la cantidad de ellas. La cuestión es que, en el manejo de los datos, algunas van quedando vacías y me interesa que queden solamente las que contienen archivos.
Si aquí en el foro ya existe un tema al respecto, basta con que por favor me lo indiquen, sucede que por alguna razón que desconozco, cuando uso la opción de buscar Tema, no me aparecen resultados, ni aún los que yo mismo he subido. :shock: Raro verdad.

Muchas gracias de antemano.

Jilo
Nivel 2
Mensajes: 29
Registrado: Mié Dic 02, 2015 11:05 am

Re: Borrar carpetas vacías.

Mensajepor Jilo » Vie Nov 01, 2019 9:10 am

Hola Demon777
Bueno para eliminar archivos y carpetas una manera sería con el objeto File System Object (FSO).

Una Idea
Pega este codigo en un modulo

Código: Seleccionar todo

Sub EliminaSubcarpetas(RutaCarpetaPrincipal As String)
Dim fso  As Object, Carpeta   As Object, f1
Dim Ruta As String
Dim SubCarpeta As Object
     Set fso = CreateObject("Scripting.FileSystemObject")
     Set Carpeta = fso.GetFolder(Ruta)
     Set SubCarpeta = Carpeta.SubFolders
     For Each f1 In SubCarpeta
         Debug.Print f1.name, f1.type
         f1.Delete
     Next
End Sub

Y cuando quieras borrar las subcarpetas de una TUCARPETA2 la llamas asi
Call EliminaSubcarpetas("C:\TuCARPETA1\TUCARPETA2")
Ya sabes las prueba con la gaseosa ;)

DEMON777
Nivel 2
Mensajes: 50
Registrado: Vie Jun 09, 2017 6:40 am

Re: Borrar carpetas vacías.

Mensajepor DEMON777 » Sab Nov 02, 2019 12:34 am

Gracias por tu ayuda Jilo.
He probado tu código y me salta el error 76, que no encuentra la ruta de acceso, la que para fines de prueba puse
Call EliminaSubcarpetas("C:\2")
El error me lo marca en "Set Carpeta" que marqué con negrita, también marqué con negrita los cambios que hice.
Incluso probé la alternativa, la que te señalo con un asterisco, pero sigue igual.

Sub EliminaSubcarpetas(RutaCarpetaPrincipal As String)
Dim fso As Object, Carpeta As Object, f1 As Object
Dim Ruta As String
Dim SubCarpeta As Object
Ruta = RutaCarpetaPrincipal

Set fso = CreateObject("Scripting.FileSystemObject")
Set Carpeta = fso.GetFolder(Ruta)
* Set Carpeta = fso.GetFolder(RutaCarpetaPrincipal)
Set SubCarpeta = Carpeta.SubFolders
For Each f1 In SubCarpeta
Debug.Print f1.name, f1.type
f1.Delete
Next
End Sub

Seguiré probando. Gracias.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1122
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Borrar carpetas vacías.

Mensajepor Sveinbjorn » Lun Nov 04, 2019 11:09 am

Buenas!

El código que te propone Jilo tiene un pequeño error: en vez de ser fso.GetFolder(Ruta) tendría que ser fso.GetFolder(RutaCarpetaPrincipal), como bien te has dado cuenta.

Lo que no es un error es dejar Dim f1 a secas, aunque tal como lo has puesto tú (Dim F1 As Object) funciona igualmente.

El error que te da (el número 76) te dice que esa carpeta no existe. Tendrás que comprobarlo, porque el código sí funciona.

Lo único que habría que añadirle es un criterio para que borre solo las subcarpetas vacías y no todas, como hace ahora, algo que podrías hacer con:

Código: Seleccionar todo

If Dir(f1.Path & "\*.*") = "" Then f1.Delete


Ojo que así solo comprueba que la subcarpeta no tenga archivos. Si tu carpeta contiene otras carpetas (tengan o no archivos) también las borrará.

Otra opción sería usar RmDir, en tal caso, si la carpeta no está vacía te saltaría un error que puedes gestionar con un control de errores. Te recomiendo que ojees los capítulos 16 y 17 del Curso VBA de la web de Neckkito y ahí encontrarás más información sobre manejo de directorios y archivos, y seguramente algunas ideas para tu aplicación.

Un saludo
Sveinbjorn El Rojo

DEMON777
Nivel 2
Mensajes: 50
Registrado: Vie Jun 09, 2017 6:40 am

Re: Borrar carpetas vacías.

Mensajepor DEMON777 » Lun Nov 04, 2019 8:17 pm

Saludos a todos.
Debo aclarar que el error 76 que me lanzaba era totalmente mi culpa. Dejé el par de comillas al momento de llamar al proceso, cuando usaba una variable para construir la ruta larga. Ya corregido corrió a la perfección.

De ahí en adelante, tu opción Jilo de eliminar todo, y la tuya Sveinbjorn de eliminar todos los archivos a excepción de las carpetas, ambas me sirven para otros fines. Al final, y que era la precisa en este caso, me sirvió RmDir, ya que busco borrar sólo las subcarpetas completamente vacías.
Acá está la línea que usé:

RmDir (f1.Path)

Sveinbjorn, inmolándome en público, confieso que hace un par de años descargué los 23 tomos del curso Vba de Neckito, pero casi siempre corriendo y sin tiempo, y otras veces por holgazán (como en mis pasadas vacaciones), no he podido estudiarlo. Es cuando llegan estos momentos de desconocimiento, que me digo Amalaya con tres lastimeros golpes de pecho.

Agradezco a ambos por su ayuda. Sólo esto me faltaba para dar por terminado mi programita.


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados