Una de mis últimas entradas trató sobre el manejo básico de un formulario, para realizar mediante él tareas de ABM (alta, baja y modificación de datos) en una planilla. Utilicé como ejemplo una simple administración de películas de un videoclub, mostrando en el User Form una imagen del film seleccionado; todo esto, obviamente, con macros. Un lector me contacta por dos motivos: quiere hacer "casi" lo mismo con una colección privada de discos, pero desconoce por completo el manejo de Visual Basic y, por ende, cualquier cosa relacionada con las macros en VBA. Resumiendo y adentrándonos en el proyecto: en una hoja desea seleccionar de una lista el nombre de un disco y que de forma automática Excel le muestre la caratula del álbum y otros datos... pero todo con funciones. Esto es realmente todo un desafío y necesita de un importante trabajo previo, pero los resultados son asombrosos y aprenderemos sobre aspectos que, por lo general, desconocemos sobre Excel.
mis ídolos de siempre... vamos a utilizar a los mejores de la historia para armar este interesante proyecto.
[+/-] Ver el resto / OcultarAbrimos un nuevo libro en Excel, con tres hojas, y las renombramos: Inicio, Caratulas y Datos. En la primera de ellas elaboraremos la interfaz gráfica para que el usuario visualice cada uno de los álbunes, en la segunda insertaremos todas las carátulas y a la tercera la usaremos para colocar datos varios de cada disco, junto a ciertos registros estadísticos. Esto lo último lo agregué personalmente, para darle otro "toque" al trabajo y mostrarle a mis lectores algo que seguramente sabrán aprovechar.
Nos dirigimos a la hoja Caratulas, menú "Insertar / Imagen / desde archivo" y colocamos dentro del libro a la primera de ellas:
Quiero que presten atención a un detalle presente en el paso anterior, que será fundamental para que nuestro proyecto funcione correctamente: el tamaño de la imagen, o sea, la carátula del album: está exactamente situado dentro del rango A1:D16. Noten como los límites de dicha imagen llegan "justo" a los bordes de la columna D y la fila 16. Dicha precisión se logra modificando el tamaño con el mouse, mientras mantenemos presionada la tecla "ALT"; esto hará que sea posible lograr dicha precisión.
Repetimos la misma acción con el resto de las imágenes disponibles, cuidando siempre el detalle de hacerla caber exactamente dentro del rango y que todas tengan el mismo tamaño, como muestro a continuación:
tres caratulas, todas insertas en un rango de 4 columas x 16 filas cada una.
Ahora le daremos nombre a cada uno de esos rangos, yendo a Insertar / Nombre / Definir:
sargento: =caratulas!$A$1:$D$16
abbey: =caratulas!$F$1:$I$16
revolver: =caratulas!$K$1:$N$16
Renombré a cada rango según el título del album en cuestión, creando "rangos virtuales". El cuadro de nombres nos quedaría de la siguiente forma:
Bien, por ahora nos olvidamos de la hoja Caratulas y nos vamos a la hoja Inicio, sobre la cual aún no hemos trabajado. Seleccionamos una celda cualquiera (por ejemplo, F3) y presionamos "control + c" (copiar). Si... nada mas que eso: copiamos una celda en blanco. Seleccionamos la celda A5 y, manteniendo la tecla Mayúsculas presionada (shift, la de la "flechita para arriba") nos dirigimos al menú Edición, observando que aparece una nueva opción de pegado: "Pegar vínculos de imagen":
si bien en breve veremos la utilidad de esta herramienta "oculta", ya estarán imaginando para que sirve.
Una vez que clickeamos sobre la opción mencionada, será poco (pero fundamental) lo que veremos en la hoja:
Analicemos detenidamente la imagen de arriba: en A5 se pegó un "cuadro en blanco". Si miramos la barra de fórmulas, esta nos dice: =$F$3, que es la celda que copiamos: cualquier cosa que ingresemos en F3 se reflejará automáticamente en la imagen pegada en A5:
en F3 coloqué la palabra "hola", misma que se reflejó en el vínculo de imagen pegado en A5.
Como ya verán, nuestro objetivo será reflejar cada una de las carátulas en ese vínculo de imagen. Y hacia allá vamos, esto recién empieza.
Existen varias formas de realizar el siguiente paso, pero mi preferido (y mas sencillo) es: en la columna E ingresaremos los nombres de los albunes y asignaremos el cuadro resultante a un cuadro de lista o a un cuadro desplegable:
por el momento nos despreocupamos de las cuestiones estéticas: puse un cuadro combinado. En "rango de entrada" utilicé las celdas en donde coloqué la lista de discos y vinculé el objeto con la celda F1, para que todo cambio en el control se vea reflejado en dicha celda.
En A5 aún tenemos nuestro vínculo de imagen vacío. Necesito ahora vincular dicho objeto con el cuadro de lista, para que cada vez que el usuario seleccione un albúm la imagen de este se vea allí reflejada.
Crearemos otro "rango virtual" (insertar / nombre / definir) con la siguiente función:
¿Que hicimos en el paso anterior? Creamos un rango llamado "imagenDinamica", que hace referencia a la función ELEGIR(Indice, valor1, valor2, valor3, valorN). El índice estará dado por el valor presente en F1, que a su vez está vinculado al cuadro de lista. Cuando el usuario seleccione un álbum, en F1 aparecerá un número 1, 2 ó 3, es decir, el número de elemento seleccionado. Los restantes argumentos de ELEGIR() son los nombres de rangos en donde tenemos cada una de las imágenes. Entonces: cuando el usuario seleccione "sargent peppers" en F1 se reflejará el número 1 y el rango "imagenDinamica" tomará el valor "sargento". Si selecciona "revolver", en F1 veremos 3 e "imagenDinamica" tomará el valor "revolver", haciendo clara referencia a cada una de las imágenes que tenemos en la hoja Caratulas.
Vamos al vínculo de imagen que tenemos en A5, lo seleccionamos y en la barra de fórmulas ponemos
=imagenDinamica
ordenándole así a Excel que ese vínculo de imagen refleje lo que hay en "imagenDinamica"
Y funciona todo a la perfección:
selecciono el segundo album y se muestra su imagen, la cual está en otra hoja
selecciono el tercer album... y también viene la imagen.
Hemos logrado que un "vínculo de imagen" refleje las imágenes que tenemos en otra hoja, a medida que cambiamos los valores del cuadro de lista, el cual a su vez está vinculado a la celda F1 y esta al rango dinámico "imagenDinamica". Ja, todo un trabajo, pero vale la pena.
Nos vamos a la hoja Datos. Aquí colocaremos datos varios de cada album, los cuales luego reflejaremos en la hoja Inicio, mediante la función BUSCARV() (o ConsultaV, en Excel 2010) o INDICE().
una tabla sencilla, con datos básicos, que ajustaremos a nuestras necesidades. el campo "calificación" es hasta 5, valor que luego utilizaremos de una forma particular (aclaro que para mi todos los discos serían 5... pero a uno le tengo que poner menos para el ejemplo =) )
Una vez concluido el paso anterior, volvemos a la hoja Inicio y con funciones reflejamos esos datos en la misma:
acomodando la estética (algo que realmente no se hacer) podemos mejorar las cosas.
Observen la barra de fórmulas: con INDICE(Matriz, nro de fila, [nro de columna]) traigo los registros presentes en la hoja Datos, utilizando de segundo argumento (nro de fila) el valor reflejado en F1.
Haremos que a la derecha del cuadro de lista aparezca la calificación, la cual se verá así:
Otra vez echemos un vistazo a la barra de fórmulas: anido dos funciones: REPETIR(caracter, numero de veces) e INDICE(). Con la segunda busco la calificación del álbum en la hoja Datos y ese valor retornado me sirve para decirle a REPETIR() cuantas veces tiene (valga la redundancia) que repetir la letra "a". Y luego voy al formato de fuente y elijo el tipo "Webdings", que son los dibujos por cada caracter ingresado.
Les dejo una última imagen, quizás la mas famosa (super analizada, emblemática y controversial) del cuarteto de Liverpool, junto al link para descargar el archivo. Suerte y espero que les sea de utilidad.
Comentarios
Publicar un comentario