You are on page 1of 11

jueves, 8 de diciembre de 2011

VBA: ListBox con varias columnas y encabezados.


Continuando con algn post anterior en el que veamos como trabajar con un Formulario (UserForm), explicar hoy como incluir
un ListBox en un formulario con datos extraidos de nuestra hoja de clculo, pero con varias columnas de datos y respetando la
cabecera de rtulos:
Lo ms cmodo e importante para emezar a trabajar ser convertir nuestro rango de datos en una Tabla de Excel(Ctrl+q para Excel
2007 y Ctrl+t para Escel 2010). Veamos nuestro origen de datos nombrada como Tabla1:

Con nuestra Tabla1 creada, ya podemos irnos al Editor de VBA (Alt+F11) e insertar un UserForm (Formulario), buscaremos en la
ventana de controles la opcin Cuadro de lista, y lo desplegaremos dentro del Formulario donde deseemos::

Una vez incluido el ListBox en nuestro formulario, deberes configurarlo para que recoja los registros de nuestra Tabla1 de la Hoja
de clculo como elementos del recien creado ListBox1, adems deberemos definirlo de tal forma que el encabezado de la Tabla1
aparezca como cabecera de nuestro ListBox1, por supuesto, cada campo deber aparecer en una columna independiente.
Para ello deberemos trabajar con distintas propiedades de este ListBox, como son:
ColumnCount: en el que indicaremos cuantas columnas vamos a crear, para nuestro ejemplo, le asignaremos un valor de
tres (una por cada campo 'Producto', 'Unidades' y 'Precio')
ColumnHead: donde seleccionaremos True o False dependiendo de si queremos mostrar encabezado o no.
Ojo, por que en este caso, es importante para evitar posibles fallos, haber definido nuestro origen de datos, en la Hoja de
clculo, como Tabla Lista.
RowSource: donde le indicaremos dnde se encuentra el origen de datos, para nosotros ser 'Tabla1'.
Estas propiedades del ListBox se pueden definir bien desde la Ventana de propiedades, o bien directamente con cdigo.
Veamos cmo definimos estas propiedades con cdigo VBA, para ello haremos doble click sobre nuestro UserForm y aadiremos el
cdigo:
view plainprint?
1. Private Sub UserForm_Initialize()
2. 'le decimos cuntas columnas tendr
3. ListBox1.ColumnCount = 3
4. 'que s que tiene encabezado
5. ListBox1.ColumnHeads = True
6. 'el origen de datos en nuestra hoja de clculo
7. ListBox1.RowSource = "Tabla1"
8.
9. End Sub

Con la intruccin Private Sub UserForm_Initialize() conseguimos que el ListBox se cargue cada vez que iniciamos el formulario.
El resultado del Formulario lo podemos ver al ejecutarlo:

Veamos cmo definimos estas mismas propiedades desde la Ventana de propiedades activa para nuestro ListBox1:

Por supuesto el resultado ser el mismo que el expuesto en el mtodo anterior:

A partir de nuestro ListBox podremos trabajar bien sobre otros cdigos o bien directamente sobre nuestra Hoja de clculo... pero
eso ser en posteriores entradas.

Utilizar un ComboBox como lista de bsqueda en Excel


Published on 15 February, 2010 by Sergio Alejandro Campos in Excel vba
En ocasiones tenemos una lista con decenas o a veces hasta centenas de items que se nos hace difcil buscar una coincidencia
exacta y no una aproximada. El siguiente desarrollo permite aadir a un ComboBox la lista que tenemos y encontrar el dato tal y
como est en la lista.
Instrucciones:
1.- Asignamos un nombre a la lista (recomendado).

2.- Entramos al editor de Visual Basic para Aplicaciones con Alt + F11. I
3.- Insertamos un UserForm y le aadimos un control de ComboBox, un Label y dos botones (Buscar y Cerrar)

4. Damos doble click en una parte del formulario (no en algn objeto). Se podr automticamente el mtodo Activate. Ponemos
el siguiente cdigo:
Private Sub UserForm_Activate()
Asignamos como fuente la lista previamente creada
Me.cmbAsesores.RowSource = "lstAsesores"
Le damos el foco al ComboBox
cmbAsesores.SetFocus
End Sub
5.- Ahora damos doble click al botn Buscar y agregamos el siguiente cdigo:
Private Sub CommandButton1_Click()
Si existe algn error se brinca a la etiqueta Fin
On Error GoTo Fin
Para tener este cdigo, se puede utilizar la grabadora de macros
Cells.Find(What:=cmbLista, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
cmbLista.SetFocus
Cierra el formulario
Unload Me
Sale del procedimiento sin necesidad de llegar a la etiqueta Fin
Exit Sub
Fin:
Si el dato escrito no est en la lista arroja el siguiente error
MsgBox "El dato " & cmbLista & " no se encuentra en esta hoja", vbInformation, "Excel e Info"
cmbLista = ""
cmbLista.SetFocus
End Sub

6.- El cdigo para el botn Cerrar ser:


Private Sub CommandButton2_Click()
Unload Me
End Sub
La imagen de ejemplo

Dependiendo del diseador la lista puede estar oculta y para lanzar el formulario se podr hacer por cualquier mtodo que desee.
:: Descarga el ejemplo
Por qu tantos formatos

LISTAS DESPLEGABLES DEPENDIENTES (VALIDACIONES DEPENDIENTES EN EXCEL)

El dia de ayer por la noche estaba pensando en como


validar listas dependientes, me quede hasta muy tarde para una simple solucin como asi? supongamos que tenemos una lista de
ciudades y cada ciudad tiene sus distritos, cmo podemos organizar esta informacin de tal forma que al seleccionar una ciudad
aparesca su lista de distritos? en internet existen formas de como hacerlo, yo me base en alguna que encontr por ah, pero
encontr la forma nica de darle un toque mas profesional.
Acontinuacin un pequeo tutorial de como hacer esto, te recomiendo que no dejes de leer y poner a prueba estas isntrucciones
ya que es fcil y novedoso; esperando lo apliques en tu trabajo.
Descargar Validaciones Dependientes en Excel.xls
INSTRUCCIONES
1.- Abrir excel, de dicho libro usaremos dos hojas, la primera llamarla Datos para colocar ah toda la informacin que usaremos,
luego otra hoja llamarla principal que nos servir para mostrar nuestra validacin dependiente, ya mas fcil no se puede explicar

2.- Copiar la informacin tal y como esta en la siguiente imagen en la hoja de nombre Datospara que llevemos los pasos

exactos.
3.- Seleccionamos el
rango B3:E3 y le colocamos el nombre de CIUDADES, ya que este ser los datos generales que filtraremos, es decir seran los
mandantes,
al
seleccionar
uno
de
ellos
debe
mostrarnos
su
lista
de Distritos.

4.- Ahora vamos a hacer la parte mas importante de todo el proceso, seleccionamos el rangoB4:B9 y le colocamos el nombre de la
ciudad en
este
caso TRUJILLO y
pulsamos
enter, asi
como
lo
muestra
la
siguiente
imagen:

5.- Procedemos a hacer lo mismo con el resto de la informacin, voy a explicar uno mas ya el resto lo hacen ustedes, seleccionamos
el rango c4:c10 y le colocamos el nombre de la ciudad en este caso LIMA, pulsamos enter; lo mismo hacemos con el resto

Con el paso anterior hemos


asignado nombres a los rangos que contienen la informacin que validaremos. (ya veran su uso).
6.- Ahora vamos a trabajar en la hoja Principal, copiamos lo siguiente tal y como se muestra en la imagen siguiente (hasta con los

mismos colores).
vamos

al

menu

Datos->Validacin

7.- Nos situamos en la celda D2, luego nos


de
Datos
asi:

Fijate en el origen, esto enlazara a las ciudades mandantes.


Si nos situamos en D2aparecer una pestaita para elegir ciudades.
8.- Ahora nos situamos en la celda D4, y vamos a crear las famosas validaciones dependientes, nos vamos al menu Datos>Validacin de Datos. coloca los datos tal y como se muestran en la imagen.

Seguro
te
estas
preguntando
que
significa=INDIRECTO($D$2), en la celda D2 debes recordar que ahi esta el mandante es decir la CIUDAD, que obviamente cambiar
segun la que tu quieres, pues esta formula lo que hace es referenciar al nombre del rango que contiene la informacn, si en D2
dice TRUJILLO, entonces se validaran los datos correspondientes al rango llamado TRUJILLO; asi de acuerdo a los valores del
mandante.
9.- Deberia quedar asi:

HASTA AQUI HEMOS TERMINADO PERO SI ERES AMANTE DE EXCEL Y QUIERES MAS SIGUE LEYENDO.
10.- Y para darle un toque profesional viene mi creacin, si se fijan al cambiar las ciudades queda el rastro del datos consultado
anterior correspondiente a otra ciudad, por ejemplo si seleccionan TRUJILLO y antes estuvieron viendo los distritos de otra ciudad
este aparecera ahi y puede crear confusin, por tanto haremos lo siguiente (No dorm pensando en esta solucin)

Seleccionamos D4 Y nos dirigimos al menu Inicio -> Formato Condicional

Deben hacer clic en


Formato y buscar en la fuente el color azul para que cuando se cumpla la condicion se oculte el valor incorrecto
=Y(CONTAR.SI(INDIRECTO(D2),$D$4)<1)=VERDADERO
Que significa esto?, probablemente te paresca raro o dificl de entender pero es super sencillo, vamos por parte, lo que aqui
hacemos es crear un formato condicional de acuerdo a una funcin, es decir si la funcion es verdadera entonces se le dara un
formato especial a la celda, en nuestro caso ese formato va a ocultar cuando se trate de un Distrito que no pertenesca a una ciudad
determinada (Esto se da cuando hacemos el cambio en la ciudad y queda como rastro el distrito antes consultado).
INDIRECTO(D2) esto es Simplemente el nombre del rango de acuerdo a la celda D2
CONTAR.SI(INDIRECTO(D2),$D$4) verificar si existe el distrito ubicado en la celda D4 dentro del rango especifico que sale de la
frmula INDIRECTO.
=Y(CONTAR.SI(INDIRECTO(D2),$D$4)<1) =VERDADERO
Conesta frmula evaluaremos si se encontraron coincidencias dentro del rango especifico de tal forma que si el resultado es menor
a 1 quiere decir que dicho distrito no existe para la Ciudad, si se cumple eso es verdadero, y si es verdadero entonces asignamos un
formato para ocultar dicho valor para nuestro caso el formato elegido es letras azules, de esa forma parecer que no hay valores.
LISTO!!!

Cmo hacer un buscador en Excel


Como siempre, lo primero:
Implementos necesarios:
1.

Microsoft Excel. (para este tutorial utilizamos la versin 2007)

2.

Una tabla o matriz con datos para buscar.

Con todo lo necesario, manos a la obra:


Procedimiento:
Para realizar este buscador, nos basaremos en una funcin de Excel llamada buscarv la cual, valga la redundancia, busca un valor y
retorna los correspondientes a la misma fila. Por esto es importante que el valor a buscar sea nico dentro del rango, como por
ejemplo un cdigo.
1.- Lo primero que haremos, ser en una hoja, ordenar y rotular nuestros datos:

Lo ms importante a tener en cuenta es que el dato que buscaremos, el cual debe ser nico, en este caso el cdigo, debe estar en
la primera columna a la izquierda.
2.- A continuacin, en una nueva hoja, construiremos el interfaz de nuestro buscador, el cual podemos hacer mediante la edicin
y colorizacin de las celdas, quedando algo as:

La celda blanca superior, al lado del texto Ingrese cdigo a buscar es donde ingresaremos el dato que buscaremos en nuestra hoja
de detalle, y las celdas inferiores blancas es donde aparecer la informacin correspondiente a la misma fila.

3.- Ahora, nos desplazamos a la celda blanca justo al lado del nombre, y procedemos a escribir la formula para la bsqueda. Como
mencionamos antes, utilizaremos la funcin buscarv de Excel, la cual utiliza los siguientes parmetros:

Valor buscado: Representa el valor que buscaremos, o sea el cdigo.

Matriz buscar en: Representa la matriz de datos en donde buscaremos el parmetro, o sea, el grupo de datos que se
encuentra en la otra hoja. Lo ms importante a tener en cuenta es que en este rango de matriz debemos.

Indicador columnas: Representa la columna donde esta el dato que recuperaremos. Estas columnas se ordenan
numricamente del 1 en adelante. Como el nombre es la segunda columna, ponemos el nmero 2.

Ordenado: Indica el criterio de bsqueda. Puede tomar 2 valores: Verdadero o Falso. La diferencia radica en que Verdadero se
refiere a una bsqueda aproximada y Falso a una bsqueda exacta. Utilizaremos falso, ya que queremos buscar el cdigo
exacto.

Con esto en cuenta, nuestra formula quedara:


=BUSCARV(E3;Hoja1!A2:E10;2;FALSO)
Nota: Recuerden que las columnas pueden variar dependiendo del orden que le hayan dado en su archivo.
4.- Al terminar la formula, nos aparecer lo siguiente en la celda:

Esto es normal, ya que como no hemos ingresado un dato a buscar, no hay referencia a recuperar.
5.- Luego copiamos la formula a las otras celdas, cambiando el indicador de columna a la que corresponde en la matriz de datos y
deberamos tener algo como esto en las formulas:
=BUSCARV(E3;Hoja1!A2:E10;2;FALSO)
=BUSCARV(E3;Hoja1!A2:E10;3;FALSO)
=BUSCARV(E3;Hoja1!A2:E10;4;FALSO)
=BUSCARV(E3;Hoja1!A2:E10;5;FALSO)
Y en cada celda se debera haber puesto el valor #N/A.
6.- A continuacin llega el momento de probar. En la parte superior ingresamos un cdigo y podemos ver como se llenan los datos:

Con eso tenemos nuestro buscador funcionando. Sin embargo, algunos tips de seguridad.
Si el buscador lo estamos habilitando para otras personas y no queremos que vean la matriz completa de datos ni que puedan
modificar las formulas, podemos aplicar los siguientes trucos.
Ocultando la matriz de datos
Simplemente hacemos click con el botn derecho sobre la hoja donde estn los datos y seleccionamos la opcin Ocultar.

Protegiendo los datos


Por defecto todas las celdas de la hoja estn bloqueadas, pero esto no se activa hasta que protejamos la hoja.
Esto lo haremos mediante el bloqueo de celdas. Para eso vamos a la celda blanca donde introducimos el cdigo a buscar, hacemos
click con el botn derecho y seleccionamos Formato de celdas. Una vez ah, vamos a la pestaa Proteger y deseleccionamos la
opcin Bloqueada.
Ahora vamos a Revisar y seleccionamos la opcin Proteger hoja:

Ah seleccionamos las opciones que le permitiremos ejecutar a los usuarios. En este caso solo les permitiremos seleccionar las
celdas desbloqueadas. Adicionalmente definimos una contrasea para que la hoja no pueda ser desbloqueada a no ser que sea por
nosotros.
Nos pedir confirmar la contrasea y tendremos nuestra hoja bloqueada.
Y ah podremos ver que es imposible seleccionar las celdas bloqueadas. Por ende no podrn modificar las formulas y solo ingresar
los cdigos. No se preocupen, que las celdas que muestran los datos funcionarn de forma normal.
Y as finalizamos nuestro buscador en Excel, el cual nos permitir disponer de una sencillaaplicacin para los casos en que
necesitemos generar algo rpidamente.
Como siempre este tutorial ha sido:
Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas lneas en el rea habilitada a continuacin.
Esperamos que este tutorial haya sido de utilidad para Uds.
Muchas gracias por leer y ser hasta una prxima oportunidad.

You might also like