jueves, 25 de febrero de 2016

Seleccionar Hoja de Cálculo desde un UserForm


Cuando echamos a volar nuestra imaginación y nos decidimos a crear algún complemento que expanda la funcionalidad de Excel, siempre requerimos de ciertas rutinas para gestionar nuestros datos de una forma ágil y eficiente.


Hace unos días, un seguidor, Percy Pérez Huacchillo, me solicitaba una rutina para seleccionar hojas de cálculo, desde un listado desplegable incrustado en una hoja de cálculo, mediante la herramienta"Validación de datos", en la pestaña DATOS... pues esta es la respuesta a su petición, a la cual, decidí hacerlo de diferente manera, es decir, desde un formulario y mediante un ComboBox.

El propósito es seleccionar desde el ComboBox, la hoja de cálculo que deseamos establecer como hoja de cálculo activa. Con esto podríamos complementar otras rutinas, como el ingreso de datos desde un formulario, con destino a la hoja seleccionada.

Muy bien, iniciemos insertando un UseerForm en el Editor de Visual Basic, al cual le agregaremos una etiqueta y un ComboBox... te tiene que quedar de la siguiente manera:


El ComboBox agregado, lo he dejado con su nombre predeterminado "ComboBox1"... ahora insertamos un módulo al cual le vamos a pegar el siguiente código:

Sub Proceso()
    Dim Hoja As Worksheet
    For Each Hoja In Worksheets
       If Hoja.Name = UserForm1.ComboBox1.Value Then
            Hoja.Select
        End If
    Next Hoja
End Sub

Así te tiene que quedar el código insertado:


Observa que he declarado la variable Hoja con el tipo de objeto Worksheet, para poder tener control sobre las diferentes hojas de cálculo.
Mediante el bucle con la instrucción For... Next, realizo el recorrido sobre las diferentes hojas de cálculo, identificando cada nombre que tiene asignado cada una de las hojas... que si encuentra coincidencia con el nombre seleccionado en el ComboBox, nos enviará a la hoja de cálculo seleccionada.
Para hacer funcionar la rutina "Proceso", tienes que agregar esta línea: "Call Proceso", dentro del evento Change del ComboBox en el UserForm... lo cual te quedará así:



Ahora bien... visualicemos la interfaz de usuario y las hojas de cálculo según como las dispuso nuestro buen amigo Percy, para poder seleccionarlas.


Como habrás notado, en la imagen tenemos diferentes hojas de cálculo a seleccionar. La última hoja, que es la hoja "datos", es donde tenemos el listado de cada una de las hojas de cálculo, con el propósito de manejar dicha información desde el ComboBox. Puedes ver que he seleccionado dicho listado para asignarle un nombre de rango, al cual le he puesto "DATA"... este nombre lo colocaremos en las propiedades del ComboBox según lo puedes ver en la siguiente imagen:


Noten que he seleccionado el ComboBox y en el panel de propiedades he seleccionado "RowSource", en donde he escrito el nombre del rango que establecimos anteriormente, es decir, "DATA"

Y eso es todo... no olvides guardar tu proyecto como archivo de Excel habilitado para macros.

Sin embargo, aquí te dejo el archivo ya terminado, para que lo puedas descargar.

Si esto te ha sido de utilidad, compártelo con tus amigos en las diferentes redes sociales.

Nos vemos en la próxima entrega.

Saludos cordiales!




12 comentarios:

  1. Profesor Otto, extraño el audio en este video interesante. De todas formas, le estoy muy agradecido por compartirlo.

    ResponderEliminar
  2. Muchas gracias de nuevo , es un aporte muy simple y a la vez útil cuando se quieren tener las hojas ocultas.

    ResponderEliminar
  3. Muchas gracias, amigo otto, gracias por compartir sus conocimientos, agradesco profundamente su consejo, saludos y exitos

    ResponderEliminar
  4. Me a servido de mucha utilidad, lo compartiré, muy agradecido, atte Percy P.

    ResponderEliminar
  5. Gracias profesor Otto por compartir sus conocimientos.

    ResponderEliminar
  6. gracias profesor, si quisieramos hacerlo con lista desplegable seria igual el código?

    ResponderEliminar
  7. HOLA PROFESOR LO ADMIRO POR LO QUE REALIZA EN EXCEL, ESTOY APRENDIENDO MUCHO DE USTED, ME PUDIERA AYUDARE EN UN PROBLEMITA, (EN UNA BASE DE DATOS DE CUENTAS POR PAGAR, ME GUSTARIA SABER COMO PUEDO HACER PARA IDENTIFICAR QUE NUMERO DE COMPROBANTE Y EL VALOR ME FALTA DE PAGAR.) SI NO TANTO LA MOLESTIA LE PEDIRIA ESE FAVOR, MUCHAS GRACIAS BUEN DIA, CUIDESE, ESPERO ME PUEDA COLABORAR......

    ResponderEliminar
  8. PROFESOR LO ADMIRO MUCHO,,APRENDO MUCHO DE USTED, ES MUY
    INTERESANTE Y PRACTICO CON LO QUE SE PUEDE REALIZAR EN EXCEL,, PRACTICO MUCHO EN
    EXCEL PERO NO UN NIVEL SUPER AVANZADO. SABE ME GUSTARIA QUE
    ME AYUDARA CON UN (!GESTOR DE CUENTAS POR PAGAR, Y PODER
    CONSULTAR LOS MOVIMIENTOS POR PROVEEDOR Y SALDOS POR MES...,"),
    BUENO SI HUBIESE ESA POSOBILIDAD EN BRINDARME SU AYUDA.,

    BUEN DIA, CUIDESE, Y LO SIGO,

    ResponderEliminar
  9. Que tal saludos desde Mexico.
    Tengo la duda de como podría "no agregar" alguna hoja que no me interesara poner en el ComboBox. Como lo e realizado es en dejando las hojas que no quiero mostrar al final en el libro, y en el ciclo: For i = 1 To Sheets.Count - 4, de esta forma elimino las ultimas 4 hojas y no las carga en el ComboBox.
    Pero existe alguna forma de que no cargue X nombre de Hoja? Gracias y espero puedan ayudarme

    ResponderEliminar
  10. Hola. le agradezco que comparta sus conocimientos y habilidades, es muy gentil de su parte, le digo que el enlace para bajar este ejemplo no está funcionando!

    ResponderEliminar