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!




10 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. 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
  8. 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