{"id":16315,"date":"2021-08-03T22:34:20","date_gmt":"2021-08-04T03:34:20","guid":{"rendered":"https:\/\/www.perucontable.com\/excelcontable\/?p=16315"},"modified":"2023-11-14T21:43:12","modified_gmt":"2023-11-15T02:43:12","slug":"determinar-si-existe-una-hoja-en-un-libro-mediante-vba","status":"publish","type":"post","link":"https:\/\/www.perucontable.com\/excelcontable\/determinar-si-existe-una-hoja-en-un-libro-mediante-vba\/","title":{"rendered":"DETERMINAR SI EXISTE UNA HOJA EN UN LIBRO MEDIANTE VBA"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn-cncpj.nitrocdn.com\/gkdvojhMvnKjykwCtiHGICbspfYiwVAa\/assets\/static\/optimized\/rev-aa7480e\/wp-content\/uploads\/2020\/11\/4-22.png\" alt=\"\" width=\"485\" height=\"273\"\/><\/figure><\/div>\n\n\n<p>Visual Basic es un lenguaje de programaci\u00f3n orientado a eventos desarrollado por Microsoft. Visual Basic es simple y r\u00e1pido de aprender y es muy popular por su desarrollo r\u00e1pido en aplicaciones y capacidades de automatizaci\u00f3n. El lenguaje VB se incluye en una serie de productos de Microsoft, incluyendo Visual Basic 6, .NET y Microsoft Office. Los programadores pueden escribir programas utilizando VB y el editor de VB para programar Microsoft Excel y comprobar si existen ciertas hojas de c\u00e1lculo en sus documentos de Excel.<\/p>\n\n\n\n<p>Y es que cuando estamos programando en VBA y necesitamos leer o insertar datos en alguna hoja de un libro ser\u00e1 una buena pr\u00e1ctica el&nbsp;<strong>comprobar si existe la hoja de Excel&nbsp;<\/strong>antes de realizar cualquier acci\u00f3n ya que, en caso de no existir se generar\u00e1 un error en tiempo de ejecuci\u00f3n. La siguiente imagen muestra un mensaje t\u00edpico para este tipo de error:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/cdn.exceltotal.com\/wp-content\/uploads\/2014\/11\/comprobar-si-existe-una-hoja-de-excel-desde-vba-01.png\" alt=\"Comprobar si existe una hoja de Excel desde VBA\"\/><\/figure><\/div>\n\n\n<h2><strong>COMPROBAR SI EXISTE UNA HOJA DE EXCEL<\/strong><\/h2>\n\n\n\n<p>Sabemos que la colecci\u00f3n Worksheets contiene todas las hojas de un libro y una opci\u00f3n para comprobar la existencia de cualquiera de ellas ser\u00eda recorrer dicha colecci\u00f3n hasta encontrarla. Considera el c\u00f3digo de la siguiente funci\u00f3n:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"610\" height=\"271\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image.png\" alt=\"\" class=\"wp-image-16316\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image.png 610w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-300x133.png 300w\" sizes=\"(max-width: 610px) 100vw, 610px\" \/><\/figure><\/div>\n\n\n<p>La funci\u00f3n BuscarHoja1 devolver\u00e1 el valor falso o verdadero en base al resultado de la b\u00fasqueda de la hoja cuyo nombre sea especificado como argumento. Para probar esta funci\u00f3n he agregado un bot\u00f3n de comando en la Hoja1 y he escrito el siguiente c\u00f3digo en su evento Click:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"483\" height=\"275\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-1.png\" alt=\"\" class=\"wp-image-16317\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-1.png 483w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-1-300x171.png 300w\" sizes=\"(max-width: 483px) 100vw, 483px\" \/><\/figure><\/div>\n\n\n<p>Al pulsar el bot\u00f3n se realizar\u00e1 la b\u00fasqueda de la hoja tomando en cuenta el nombre indicado en la celda B1. Si para nuestro ejemplo colocamos el nombre \u201cHoja4\u201d obtendr\u00e9 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\/2014\/11\/comprobar-si-existe-una-hoja-de-excel-desde-vba-02.png\" alt=\"Comprobar si existe hoja de calcula con VBA\"\/><\/figure><\/div>\n\n\n<p>Como puedes observar, el libro tiene la Hoja1, Hoja2 y Hoja3 as\u00ed que al buscar la Hoja4 obtendr\u00e9 un mensaje indicando que dicha hoja no existe. Aunque este m\u00e9todo funciona adecuadamente, considero que tiene una desventaja ya que entre m\u00e1s hojas contenga el libro, mayor ser\u00e1 el tiempo que se demore en realizar la b\u00fasqueda.<\/p>\n\n\n\n<h2><strong>OTRO M\u00c9TODO PARA VALIDAR SI EXISTE UNA HOJA<\/strong><\/h2>\n\n\n\n<p>El m\u00e9todo que prefiero para comprobar la existencia de una hoja de Excel es controlando el error que pueda surgir en caso de que la hoja no exista. En este caso hacemos uso de la instrucci\u00f3n&nbsp;<em>On Error Resume Next<\/em>&nbsp;cuyo objetivo es ignorar el error y continuar con la ejecuci\u00f3n del c\u00f3digo en la siguiente l\u00ednea.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"615\" height=\"149\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-2.png\" alt=\"\" class=\"wp-image-16318\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-2.png 615w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-2-300x73.png 300w\" sizes=\"(max-width: 615px) 100vw, 615px\" \/><\/figure><\/div>\n\n\n<p>La segunda l\u00ednea de c\u00f3digo de esta funci\u00f3n compara el nombre de la hoja solicitada con una cadena vac\u00eda. Si la hoja existe, dicha comparaci\u00f3n ser\u00e1 verdadera y por lo tanto la hoja existir\u00e1, pero si la comparaci\u00f3n es falsa querr\u00e1 decir que la hoja no existe.<\/p>\n\n\n\n<p>Para probar esta funci\u00f3n crear\u00e9 un segundo bot\u00f3n de comando que tendr\u00e1 el mismo c\u00f3digo que el primer bot\u00f3n con la diferencia de que se utilizar\u00e1 la funci\u00f3n BuscarHoja2. Al hacer la b\u00fasqueda de la Hoja8 con este segundo m\u00e9todo 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\/2014\/11\/comprobar-si-existe-una-hoja-de-excel-desde-vba-03.png\" alt=\"C\u00f3mo determinar si existe una hoja en un libro de trabajo con VBA\"\/><\/figure><\/div>\n\n\n<p>Cualquiera de los dos m\u00e9todos anteriores funcionar\u00e1 correctamente para conocer si una hoja existe dentro de un libro aunque personalmente prefiero el segundo m\u00e9todo por la sencillez del c\u00f3digo y la ausencia del bucle For.<\/p>\n\n\n\n<h2><strong>CREAR LA HOJA SI NO EXISTE<\/strong><\/h2>\n\n\n\n<p>Las funciones que hemos creado nos ayudar\u00e1n a conocer la existencia de una hoja, pero en m\u00e1s de una ocasi\u00f3n necesitaremos crear dicha hoja aun cuando no exista. La creaci\u00f3n de una hoja desde VBA es muy sencilla utilizando el m\u00e9todo&nbsp;<em>Worksheets.Add<\/em>&nbsp;de la siguiente manera:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"873\" height=\"317\" src=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-3.png\" alt=\"\" class=\"wp-image-16319\" srcset=\"https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-3.png 873w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-3-300x109.png 300w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-3-768x279.png 768w, https:\/\/www.perucontable.com\/excelcontable\/wp-content\/uploads\/2021\/08\/image-3-696x253.png 696w\" sizes=\"(max-width: 873px) 100vw, 873px\" \/><\/figure><\/div>\n\n\n<p>He decidido dejar este procedimiento como una funci\u00f3n para poder devolver un valor verdadero en caso de que la hoja ya exista o un valor falso en caso de que haya sido creada por la funci\u00f3n.&nbsp; Ese resultado se almacena en la variable&nbsp;<em>existe<\/em>&nbsp;que es evaluada para saber si debemos utilizar el m\u00e9todo&nbsp;<em>Worksheets.Add<\/em>&nbsp;para indicar la creaci\u00f3n de la nueva hoja la cual tendr\u00e1 por nombre el valor indicado en el argumento&nbsp;<em>nombreHoja<\/em>.<\/p>\n\n\n\n<p>El argumento&nbsp;<em>After<\/em>&nbsp;utilizado en el m\u00e9todo&nbsp;<em>Worksheets.Add<\/em>&nbsp;nos sirve para indicar que la nueva hoja sea creada al final de las hojas existentes. Para probar esta funci\u00f3n agregar\u00e9 un tercer bot\u00f3n a la hoja y el c\u00f3digo de su evento Clck ser\u00e1 id\u00e9ntico a los anteriores. Si especificamos el nombre Hoja4 en la celda B1, al pulsar dicho bot\u00f3n 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\/2014\/11\/comprobar-si-existe-una-hoja-de-excel-desde-vba-04.png\" alt=\"Verificar si una hoja ya existe con VBA\"\/><\/figure><\/div>\n\n\n<p>Ya que la Hoja4 no exist\u00eda, nuestra funci\u00f3n hace la creaci\u00f3n de la hoja y la coloca al final de las hojas existentes. Si vuelves a hacer clic en el bot\u00f3n para intentar crear de nueva cuenta la Hoja4, se mostrar\u00e1 la advertencia de que la hoja ya existe. De esta manera hemos forzado la creaci\u00f3n de una hoja en caso de que no exista.<\/p>\n\n\n\n<p>De esta manera podemos identificar si existe una hoja en nuestro libro de trabajo o no; podemos usar UDF o subrutina seg\u00fan nuestra conveniencia.<\/p>\n\n\n\n<p><strong>Art\u00edculo que te recomendamos leer:<\/strong><br><strong><a href=\"https:\/\/www.perucontable.com\/excelcontable\/concatenar-salto-de-linea-en-excel\/\" data-type=\"URL\" data-id=\"https:\/\/www.perucontable.com\/excelcontable\/concatenar-salto-de-linea-en-excel\/\">CONCATENAR SALTO DE L\u00cdNEA 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>Visual Basic es un lenguaje de programaci\u00f3n orientado a eventos desarrollado por Microsoft. Visual Basic es simple y r\u00e1pido de aprender y es muy popular por su desarrollo r\u00e1pido en aplicaciones y capacidades de automatizaci\u00f3n. El lenguaje VB se incluye en una serie de productos de Microsoft, incluyendo Visual Basic 6, .NET y Microsoft Office. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":16323,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[108,2,67,25],"tags":[],"yst_prominent_words":[461,122,174],"_links":{"self":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16315"}],"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=16315"}],"version-history":[{"count":3,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16315\/revisions"}],"predecessor-version":[{"id":16827,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/posts\/16315\/revisions\/16827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/media\/16323"}],"wp:attachment":[{"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/media?parent=16315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/categories?post=16315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/tags?post=16315"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/www.perucontable.com\/excelcontable\/wp-json\/wp\/v2\/yst_prominent_words?post=16315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}