{"id":16206,"date":"2021-07-23T20:10:41","date_gmt":"2021-07-24T01:10:41","guid":{"rendered":"https:\/\/www.perucontable.com\/excelcontable\/?p=16206"},"modified":"2023-11-14T22:07:29","modified_gmt":"2023-11-15T03:07:29","slug":"listar-archivos-de-carpetas-y-subcarpetas-con-macro-vba","status":"publish","type":"post","link":"https:\/\/www.perucontable.com\/excelcontable\/listar-archivos-de-carpetas-y-subcarpetas-con-macro-vba\/","title":{"rendered":"LISTAR ARCHIVOS DE CARPETAS Y SUBCARPETAS CON MACRO VBA"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"572\" height=\"314\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-137.png\" alt=\"\" class=\"wp-image-16210\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-137.png 572w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-137-300x165.png 300w\" sizes=\"(max-width: 572px) 100vw, 572px\" \/><\/figure><\/div>\n\n\n<p>Es bastante frecuenta tener que listar los archivos y subcarptetas de un directorio, tambi\u00e9n es com\u00fan&nbsp;listar archivos en un combobox; con el objeto de ser usado en una macro, este ejemplo precisamente hace eso&nbsp;<strong>Lista los archivos y subcarpetas<\/strong>&nbsp;de Windows, presionando el bot\u00f3n que se encuentra en el ejemplo, que se puede descargar desde el link del final, se corre una macro que lo que hace es&nbsp;<strong>listar todas las carpetas y subcarpetas&nbsp;<\/strong>que se encuentran en el directorio seleccionado, en este caso el listado se copia en una hoja de Excel, no obstante tambi\u00e9n se podr\u00eda agregar la lista de archivos y subcarptetas a un combobox.<\/p>\n\n\n\n<h2><strong>ARCHIVOS DE CARPETA Y SUBCARPETAS<\/strong><\/h2>\n\n\n\n<p>Como ejemplo utilizaremos una estructura de archivos como la siguiente:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"249\" height=\"369\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-138.png\" alt=\"\" class=\"wp-image-16211\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-138.png 249w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-138-202x300.png 202w\" sizes=\"(max-width: 249px) 100vw, 249px\" \/><\/figure><\/div>\n\n\n<p>Se ha colocado la carpeta principal directamente en la unidad C: de mi equipo de manera que la ruta para dicha carpeta ser\u00e1 C:\\Carpeta.<\/p>\n\n\n\n<p>La carpeta principal contiene 5 archivos y 2 subcarpetas. Cada una de las subcarpetas contiene 5 archivos a la vez por lo que en total tenemos 15 archivos entre la carpeta principal y las&nbsp; subcarpetas. Nuestro objetivo ser\u00e1 crear una macro para listar todos los archivos tanto de la carpeta principal como de sus subcarpetas.<\/p>\n\n\n\n<h2><strong>EL OBJETO FILESYSTEMOBJECT<\/strong><\/h2>\n\n\n\n<p>El objeto&nbsp;<em>FilsSystemObject<\/em>&nbsp;es de gran utilidad para tener acceso al sistema de archivos de cualquier equipo. Este objeto nos permite manipular archivos, carpetas, sus rutas de acceso e inclusive podemos obtener informaci\u00f3n del sistema de archivos. Para crear este tipo de objeto en VBA utilizamos la siguiente instrucci\u00f3n:<\/p>\n\n\n\n<p><code>Set fs = CreateObject(\"Scripting.FileSystemObject\")<\/code><\/p>\n\n\n\n<p>Con esta instrucci\u00f3n habremos creado un objeto&nbsp;<em>FileSystemObject<\/em>&nbsp;el cual podremos acceder a&nbsp; trav\u00e9s de la variable fs. A lo largo del c\u00f3digo de nuestra macro utilizar\u00e9 algunos m\u00e9todos del objeto&nbsp;<em>FileSystemObject<\/em>&nbsp;y para cada uno dar\u00e9 una breve explicaci\u00f3n que te permita comprender su funcionamiento.<\/p>\n\n\n\n<h2><strong>MACRO PARA LISTAR ARCHIVOS DE CARPETAS Y SUBCARPETAS<\/strong><\/h2>\n\n\n\n<p>A continuaci\u00f3n se encuentra el c\u00f3digo de la macro que crea un listado de los archivos contenidos en la carpeta y subcarpetas.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"655\" height=\"596\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-140.png\" alt=\"\" class=\"wp-image-16213\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-140.png 655w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-140-300x273.png 300w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-140-462x420.png 462w\" sizes=\"(max-width: 655px) 100vw, 655px\" \/><\/figure><\/div>\n\n\n<p>En la secci\u00f3n 1 de c\u00f3digo observar\u00e1s la declaraci\u00f3n de las variables utilizadas en la macro as\u00ed como la creaci\u00f3n del objeto&nbsp;<em>FilsSystemObject<\/em>&nbsp;y su asignaci\u00f3n a la variable fs. La secci\u00f3n 2 analiza el par\u00e1metro&nbsp;<em>ruta<\/em>&nbsp;de la subrutina para saber si dicha cadena de texto est\u00e1 vac\u00eda y en tal caso salir del procedimiento. De lo contrario se revisa que dicha&nbsp;<em>ruta<\/em>&nbsp;termine con una diagonal invertida y de no ser as\u00ed se hace una concatenaci\u00f3n de dicho car\u00e1cter.<\/p>\n\n\n\n<p>El objetivo del c\u00f3digo de la secci\u00f3n 3 es el de crear un objeto de tipo&nbsp;<em>Folder<\/em>&nbsp;que nos permita analizar el contenido de la carpeta. Esto se logra utilizando el m\u00e9todo&nbsp;<em>GetFolder<\/em>&nbsp;del objeto&nbsp;<em>FileSystemObject<\/em>&nbsp;y el resultado es guardado en la variable&nbsp;<em>carpeta<\/em>. Es con el uso del m\u00e9todo&nbsp;<em>GetFolder<\/em>&nbsp;que podemos obtener un error en VBA en caso de que la ruta indicada sea inv\u00e1lida por lo que he agregado la instrucci\u00f3n&nbsp;<em>On Error GoTo<\/em>&nbsp;para que en caso de obtener un error, la macro ejecute el c\u00f3digo de la etiqueta&nbsp;<em>ErrHandler<\/em>&nbsp;que se encuentra al final del c\u00f3digo y que imprimir\u00e1 el mensaje \u201cRuta inexistente\u201d.<\/p>\n\n\n\n<p>En la secci\u00f3n 4 utilizamos la instrucci\u00f3n&nbsp;<em>For Each<\/em>&nbsp;para recorrer todos los archivos devueltos por el m\u00e9todo&nbsp;<em>Files<\/em>&nbsp;y que est\u00e1n contenidos en la carpeta principal. Para cada archivo encontrado se concatena su ruta y su nombre y se asigna al valor de la celda activa. Posteriormente activamos la celda inferior a la celda activa de manera que la selecci\u00f3n quede lista para el siguiente archivo.<\/p>\n\n\n\n<p>La secci\u00f3n 5 obtiene las subcarpetas con el m\u00e9todo&nbsp;<em>SubFolders<\/em>&nbsp;y para cada una de ellas se vuelve a ejecutar la macro&nbsp;<em>Mostrar_Archivos<\/em>&nbsp;lo cual ocasionar\u00e1 que se repita todo el proceso hasta imprimir todos los archivos contenidos en cada una de ellas.<\/p>\n\n\n\n<p>Finalmente la secci\u00f3n 6 se encarga de auto ajustar el ancho de la columna de la celda activa de manera que se puedan visualizar correctamente todos los nombres de archivos. Finalmente se ejecuta la instrucci\u00f3n&nbsp;<em>Exit Sub<\/em>&nbsp;para salir del procedimiento.<\/p>\n\n\n\n<h2><strong>EJECUTANDO LA MACRO<\/strong><\/h2>\n\n\n\n<p>Para probar esta macro se agrego un bot\u00f3n ActiveX a la hoja y colocar\u00e9 el siguiente c\u00f3digo en su evento Click:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.exceltotal.com\/wp-content\/uploads\/2015\/03\/macro-para-listar-archivos-de-carpetas-y-subcarpetas-02.png\" alt=\"Listar archivos en Excel de carpetas y subcarpetas\"\/><\/figure><\/div>\n\n\n<p>Utilizamos la funci\u00f3n&nbsp;<em>InputBox<\/em>&nbsp;para permitir al usuario que ingrese la ruta de la carpeta de la cual se desean mostrar los archivos.<\/p>\n\n\n\n<p>Para iniciar la prueba debo seleccionar la celda donde deseo que se listen los archivos ya que la macro comenzar\u00e1 a insertar los nombres a partir de la celda activa. Posteriormente hago clic en el bot\u00f3n y se mostrar\u00e1 el cuadro de di\u00e1logo solicitando la ruta de la carpeta.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"363\" height=\"156\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-141.png\" alt=\"\" class=\"wp-image-16214\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-141.png 363w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/07\/image-141-300x129.png 300w\" sizes=\"(max-width: 363px) 100vw, 363px\" \/><\/figure><\/div>\n\n\n<p>Ingreso la ruta de la carpeta que contiene los archivos y al hacer clic en el bot\u00f3n Aceptar se ejecutar\u00e1 la macro y obtendremos el siguiente resultado.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.exceltotal.com\/wp-content\/uploads\/2015\/03\/macro-para-listar-archivos-de-carpetas-y-subcarpetas-04.png\" alt=\"Listar archivos en Excel de carpetas y subcarpetas\"\/><\/figure><\/div>\n\n\n<p>Si se compara el contenido de las celdas de la columna A con los archivos mostrados en la imagen al inicio de este blog podr\u00e1s comprobar que se han listado todos los archivos de la carpeta principal y de sus subcarpetas.<\/p>\n\n\n\n<p><strong>Art\u00edculo que te recomendamos leer:<\/strong><br><strong><a href=\"https:\/\/www.perucontable.com\/excelcontable\/imprimir-paginas-pares-o-impares-en-excel\/\" data-type=\"URL\" data-id=\"https:\/\/www.perucontable.com\/excelcontable\/imprimir-paginas-pares-o-impares-en-excel\/\">IMPRIMIR P\u00c1GINAS PARES O IMPARES EN EXCEL<\/a><\/strong><\/p>\n\n\n\n<p><strong>\u00bfQu\u00e9 te pareci\u00f3 nuestra blog? Com\u00e9ntanos.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es bastante frecuenta tener que listar los archivos y subcarptetas de un directorio, tambi\u00e9n es com\u00fan&nbsp;listar archivos en un combobox; con el objeto de ser usado en una macro, este ejemplo precisamente hace eso&nbsp;Lista los archivos y subcarpetas&nbsp;de Windows, presionando el bot\u00f3n que se encuentra en el ejemplo, que se puede descargar desde el link [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":16219,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[108,67,25],"tags":[],"yst_prominent_words":[329,414],"_links":{"self":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16206"}],"collection":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/comments?post=16206"}],"version-history":[{"count":6,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16206\/revisions"}],"predecessor-version":[{"id":16834,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16206\/revisions\/16834"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/media\/16219"}],"wp:attachment":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/media?parent=16206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/categories?post=16206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/tags?post=16206"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/yst_prominent_words?post=16206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}