VBA Excel UserForms - Luis Brito
Short Description
VBA Excel UserForms...
Description
VBA Excel
UserForms
By
Luis E Brito
Copyright 2016
Copyright © 2016 by Luis E Brito All rights reserved. This book or any portion thereof may not be reproduced or used in any manner whatsoever without the express written permission of the publisher except except for for the the use of brief quotation quotationss in a book review. revie w.
Tabla de Contenidos Otros Ot ros Libros Pu Publica blicados dos por Luis E Brito Introducción Capítulo 1 - UserForms Capítulo 2 - Controles: Controles: Cajas de Texto, Etiquetas y Botones de Comando Capítulo 3 - Controles: Casilla de Verificación, Botón de Opción, Botón de Alternar y Marcos Capítulo 4 - Controles: Lista y Cuadr o Combinado Capítulo 5 - Con Controles: troles: Barra de Desplazam Desplazamient iento, o, Botón Botón de Número Capítulo 6 - Control: Multi Páginas, Imagen y RefEdit Capítulo 7 - Herramientas de Formato Capítulo 8 - Eventos Capítulo 9 - Interacción Entre Entre Formularios, VBA y Hojas de Excel Resumen Acerca del d el Au Autor tor
Otros Libros Publicados por Luis E Brito
Amazon US https://www.amazon.com/dp/B01M8K5120 Amazon México https://www.amazon.com.mx/dp/B01M8K5120
Amazon US https://www.amazon.com/dp/B01M674D09 Amazon México https://www.amazon.com.mx/dp/B01M674D09
Introducción Los formularios (UserForms) y sus controles constituyen una de las herramientas que proporciona VBA para el intercambio de información: Entrada de datos y salida de resultados. Proporcionan la facilidad de diseñar y crear formularios formularios que son agradable a la vista, vi sta, y que que enfocan enfocan la visión vis ión del usuario en los datos que son requeridos para la ejecución de los procedim procedi mientos. ientos. La mayoría mayoría de los l os usuarios no conocen esta utilidad, utilidad, a pesar pes ar de que son fácil fáciles es de diseñar y que proporcionan una interfaz gráfica agradable que mejora la experiencia del usuario a la hora de ingresar datos a la aplicación. Pueden ser utili utilizados zados como como forma forma de entrada entrada para incorporar datos a una base de datos, o simplement simplementee para recoger datos que serán utili utilizados zados para reali r ealizar zar cálculos y devolver resultados como si fuesen fuesen una una aplicac ap licación ión independiente. independiente. En este libro trataremos sobre los formularios, los controles, sus propiedades y métodos, como diseñar y construir un formulario, como programar los controles controles,, asociándolos asoci ándolos a eventos eventos para par a que ejecu ejec uten los procedim proced imient ientos os que se requieran. Finalmente les expreso, a pesar que el material es extenso, que existe una gran cantidad de propiedades y métodos, que existe una gran cantidad de eventos, podemos podemos sacar provecho de los formularios formularios (UserForms) (UserForms) si nos enfocam enfocamos os en algunos algunos elem ele mentos que son so n impor important tantes. es. A medi medida da que q ue vayamos vayamos avanzando avanzando en en el aprendizaje de los elementos fundamentales podemos ir incorporando nuevos elementos cuando sean requeridos. Una fuente de ayuda muy importante es el examinador de objetos, se puede recurrir a él para verificar los objetos, sus propiedades, propied ades, métodos métodos y la sintaxis. sintaxis. Sin más, solamente deseo que este libro sea de utilidad y cumpla con su objetivo de ayudar al lector a comprender y a utilizar los formularios en VBA Excel.
Capítulo 1 - UserForms UserForms (Formas o Formularios) Una forma o formulario (UserForm) es esencialmente una caja de dialogo construida al gusto y necesidad del usuario, de allí su nombre en inglés: User: usuario y Form. Forma o formulario. Pero en realidad esta definición se queda corta. Recordemos las funciones InputBox y MsgBox, donde la entrada se restringe a un solo elemento, un valor numérico, una cadena de texto, un rango, una matriz. Pero una forma permite recoger múltiples valores, en las cajas de texto, texto, permite permite selecci se leccionar onar elementos elementos con listas lis tas o cajas combinadas, combinadas, seleccionar opciones y muchas otras características. También permite desplegar los resultados de un procedimiento. procedimiento. Pueden Pueden intercambiar intercambiar valores val ores con las hojas de Excel o puede trabajar independientemente sin intercambiar valores con las hojas. En VBA VBA un un User UserForm Form es un objeto, obje to, con propie pr opiedade dadess y métodos, que q ue contiene otros objetos como cajas de texto, etiquetas, botones, imágenes, etc. Como todo objeto dentro del modelo sigue las mismas reglas. El operador punto punto se utiliza utiliza para separar separ ar el objeto obj eto de sus sus propiedades propi edades y métodos. métodos. UserFormName.Propiedad UserFormName.Metodo Las propiedades pr opiedades incluyen incluyen aquell aquellas as que se utili utilizan zan para dar formato formato a las l as características caracterí sticas del formu formulario. lari o. Estas propiedades propi edades se pueden cambiar cambiar mediante código en VBA, VBA, o se pueden cambiar cambiar en la ventana ventana de propiedades, propie dades, si s i esta e sta ventana no está visible puede hacerse visible con la tecla F4, o en la barra de menú, en la pestaña ver, hacer clic en Ventana de propiedades. Algun Algunas as de las propiedades propie dades que se pueden cambiar cambiar son: Name
Para cambiar el nombre de la forma. De forma predeterminada VBA asigna a las formas el nombre genérico UserForm y un número consecutivo. Así la primera forma forma que creemos creemos tendrá tendrá nombre nombre UserForm1, UserForm1, y la segunda segunda
UserForm2, y así sucesivamente. Sin embargo, se puede cambiar este nombre por otro nombre nombre que resulte más más descriptivo descr iptivo y que que tenga tenga signif significado icado para par a el programador. programador. Con Con la finalidad finalidad de ident id entificar ificar los lo s diferentes diferentes objetos se recomienda colocar un prefijo, y luego el nombre que se desee. Esto no es obligatorio, pero si recomendable. Por ejemplo, para las formas se utiliza el prefijo es frm, frm, así que podríamos dar un un nom nombre bre a la forma frm frmEm Empleados pleados,, si estamos trabajando en una forma para recoger datos de los empleados. BackColor
Para establecer estable cer el color del fondo de la forma. Se puede puede cambiar en la ventana ventana de propiedades, y muestra una paleta de colores para la selección. BorderStyle
Para cambiar el tipo de borde de la forma. Tiene dos valores: fmBorderStyleNone (0) y fmBorderStyleSingle (1). Caption
Para colocar una etiqueta en la barra de título de la forma. Por defecto muestra el título UserForm y un número consecutivo igual al que tiene la propiedad Name. Name. Font
Cambia Cambia las l as propiedade pr opiedadess asociadas aso ciadas a la l a fuent fuentee utilizada, nombre nombre de d e la fuent fuente, e, tamaño, tamaño, resaltado, res altado, itálica, itáli ca, etc. ForeColor
Permite definir el color que mostrara la fuente. Height
Para modificar el alto de la Forma. También se puede modificar el alto arrastrando el borde inferior, donde aparece un cuadradito de color blanco, cuando cuando aparezca apar ezca el cursor c ursor como una una doble flecha vertica vertical. l. Width
Para modificar el ancho de la forma. También se puede modificar el ancho arrastrando el borde lateral, donde aparece un cuadradito de color blanco, cuando aparezca el cursor como una doble flecha horizontal.
Cada uno de los controles que se crean en la forma constituyen propiedades del objeto UserFormName. Por ejemplo, si se crea una caja de texto, TextBox1 se con co nvierte en e n una una propiedad. Entre los métodos más importantes de los UserformName están Show y Hide. UserFormName.Show muestra la forma UserFormName.Hide oculta la forma.
Como se crea una Forma (UserForm) Una Forma se crea en el editor de Visual Basic. En el menú insertar, que permite permite insertar módulos módulos y procedim procedi mientos, tam también bién tiene tiene la opción de insertar UserForm. Si se tienen varios proyectos abiertos abier tos (Libros) prim pr imero ero debe deb e seleccionarse el libro donde se desea insertar el UserForm. Luego en la barra de menú hacer clic en Insertar y seleccionar UserForm. Se creará una forma vacía con el nombre de UserForm1 en la barra de título, y aparecerá aparece rá el e l cuadro de d e herramient herramientas as con c on los controles que pueden utilizarse utilizarse en en la forma. También en el explorador de proyectos aparecerá una carpeta con el nombre nombre Formularios Formularios y en la ventana ventana de propiedades propi edades aparecerán aparecer án las propiedades propied ades de UserForm1. UserForm1.
Un UserForm puede ser visualizado como un lienzo donde colocar los controles controles que nos nos perm p ermitirán itirán la introducción introducción de datos, la presentación de información y resultados.
Caja de Herramientas y Controles La caja de herramientas muestra, de forma predeterminada, 15 controles, que pueden ser colocadas col ocadas dentro de las Formas Formas y dimension dimensionadas adas al gusto usto del usuario. En la siguiente figura se muestra la caja de herramientas. Si se requieren controles adicionales, se pueden añadir en la barra de menú del VBE, hacer hacer clic en herramien herramientas tas y seleccionar selecci onar controles controles adicionales. adici onales.
Para colocar un control en la Forma simplemente seleccione el control haciendo haciendo clic cli c sobre sobr e él en el cuadro de herramientas. herramientas. Lu Luego se posiciona posic iona el cursor sobre la forma, se ancla en un punto haciendo clic, se mantiene presionado presi onado y se arrastra arr astra para crear cr ear un control. control. Los controles y sus funciones se muestran en las siguientes figuras:
El seleccionador de objetos o apuntador se utiliza para seleccionar objetos
que han han sido colocados col ocados dent de ntro ro de la forma forma para su edición o para moverlo. Las etiquetas (Labels) se utilizan para colocar etiquetas de texto que ayudan a identificar los controles dentro de la forma, y también pueden ser utilizados para mostrar mostrar valores val ores de otros controles, como como barras de desplazam despla zamient iento, o, botones botones de número número y en general de cualquier control control que tenga tenga un un valor. Las Cajas de Texto (TextBox) son cajas que se crean para introducir información y también para mostrar resultados. Como su nombre indica el tipo de dato que reciben se interpreta como String.
Otras formas de introducir información incluyen seleccionar valores predefinidos de listas lis tas (ListBox (ListBox)) y de cuadros cuadros combinados combinados (ComboBox (ComboBox)) o mediante casillas casill as de verificación verificaci ón (Checklist). (Checklist).
Otras formas de introducir información la constituyen los botones de opción y los botones de alternar. Ambos tipos de botones tienen dos estados True o
False y permiten seleccionar selecc ionar una una opción opci ón entre entre varias varia s opciones opci ones disponibles. Cuando existen opciones relacionadas, las cuales son excluyentes entre si se utili utiliza za el control control de marco, marco, el e l cual lim l imita ita la selección selec ción a una una sola sol a opción opci ón al grupo que se encuentra dentro del marco.
Los botones de comandos permiten que se ejecuten procedimientos cuando se hacen clic sobre ellos. Por lo general también se incluye un botón para cancelar la l a forma forma y cerrarla. cerr arla. La barra bar ra de d e tabulaciones permite permite manejar manejar un conjunto de propiedades de un control. Y el control de páginas múltiples permite permite crear una una forma forma que contiene contiene múltiples múltiples págin pá ginas. as.
Una barra de desplazamiento permite cambiar el valor mediante el uso de un deslizador desli zador.. El valor podría asociarse asoci arse a una una caja caj a de texto texto (Text (TextBox Box), ), que almacenará almacenará el valor de la barra de desplazam desp lazamient iento, o, o también también puede ser asociada asocia da a la propiedad propieda d caption de una una etiqueta (Label) (Label).. El botón b otón de número número actúa de manera manera sim s imilar ilar que la barra barr a de desplazam de splazamiento, iento, pero solo hace
cambios cambios finos finos al presionar presi onar las flechas de increment incremento. o. El cont c ontrol rol de im i magen permite permite colocar y dar formato formato a una una imagen imagen para ser se r utili utilizada zada dentro dentro de la forma. Cada uno de los controles, una vez que son incluidos dentro de la forma, constituye una propiedad de la UserFormName correspondiente. Los controles a su vez tienen propiedades, propie dades, las l as cu c uales pueden ser modificadas en la ventana ventana de propiedades o mediante instrucciones en un procedimiento en VBA. Ahora estamos solamente presentando los controles que pueden utilizarse dentro de las formas, en los capítulos siguientes ahondaremos en el uso de ellos, revisando revisando las principales principales propiedades.
Convención Utilizada para el Nombre de los Controles Cuando los controles son creados VBA les asigna un nombre genérico por defecto (propiedad Name). A las formas las identifica como UserForm1, UserForm2, ser Form2, y así sucesivamen sucesi vamente. te. Las caja c ajass de d e texto com co mo Textbox Textbox1, 1, Textbox Textbox2, 2, y así con los otros controles, el usuario usuario puede cambiarl cambiarles es el e l nombre nombre y utili utilizar zar uno que sea más descriptivo y que tenga mayor sentido para el programador. Sin embargo, para saber que un nombre se refiere a determinado tipo de control existe la convención de añadir un prefijo al nombre. A continuación, se muestran uestran los prefijos recomendados, recomendados, estos prefijos pre fijos son solo una una recomendación, recomendación, no son de uso obligatorio, pero per o ayudan ayudan a trabajar con los controles, sobre todo si existen muchos de ellos en la forma. Nombre Nombre en español: Control Control (ing ( ingles) les) : Prefijo Forma o Formulario : UserForm : frm Etiqueta: Etiqueta: Label : lbl Caja de texto: TextBox: txt Cuadro combinado: ComboBox: cbo Lista: ListBox: lst Casilla Casill a de verificación: verificaci ón: CheckB CheckBox: ox: chk Botón de opción: Option button: opt Botón de alter a lternar: nar: Toggle oggle button: button: tog Marco: Frame: fra
Botón de comando: Command button: cmd Barra de tabulaci tabulaciones:T ones:Tab ab strip: stri p: tab Páginas múltiples: Multipage:mpa Barra de desplazamientos: ScrollBar: scr Botón de número: Spin button: spn Imagen: Image: img
Programando los Formularios y sus Controles Controles Diseñar el formulario y crear los controles es la primera fase, para que el formu formulario lari o y sus controles controles ejecuten las acciones que se requieren de ellos, el los, deben ser program pr ogramados. ados. Para programar programar un control control se debe hacer doble dobl e clic cli c sobre el control que se desea programar o hacer clic en el botón derecho del ratón para que aparezca el menú contextual, y entonces seleccionar ver código. Los códigos códi gos asociados a los formularios formularios se s e crean cre an en unos unos módulos módulos especia e speciales, les, que crean un unos contenedores contenedores de códigos códi gos asociados a eventos de los controles controles que se están programando. Por ejemplo, para el control botón de comando el evento evento más más frecuente frecuente es el de hacer Click Clic k sobre el botón. botón. Para el control control caja de texto, Lista o Caja Combinada el evento más frecuente es el Change. Se crea un módulo módulo por cada formulario, formulario, todos los lo s eventos asociados a los controles se crearán en este módulo. Para más información sobre eventos ver el capítulo 8.
Mostrando Mostrando y Ocultando los Formularios Formularios (UserForms) (Use rForms) Una vez que los formularios han sido diseñados, construidos y programados deben ser llamados para ser mostrados y utilizados utilizados y posteriorm posteri orment entee ocult oc ultados ados o cerrados. cer rados. Esto se log lo gra utilizando tilizando los lo s métodos métodos Show (m ( mostrar), Hide (ocultar), Load (Cargar) y Unload Unload (cerrar) (cer rar).. Mostrando el e l Formul Formulario ario (Use (Us e rForm rForm))
Para mostrar un formulario, se necesita crear un procedimiento que utilice el método Show del objeto UserFormName. La sintaxis de este método es: UserFormNam ser FormName.Show e.Show [modal] Esta simple simple línea de código colocada coloca da dentro de un procedimient procedimiento o permitirá
mostrar un formulario en pantalla. Este procedimiento debe ser incluido en un módulo estándar de VBA y no en el módulo especial de código para formularios (UserForms). Sub MostrarForma ( ) UserForm1.Show End Sub Una vez que el formulario aparece en pantalla, se mantendrá visible hasta que sea ocultado. Modal Modal o Modeless Modele ss
El parám pará metro modal modal es opcional, opc ional, y es de tipo Boolean, True, True, 1, (vbModal) es el valor va lor predeterm p redeterminado. inado. False, 0, (vbModeless). ( vbModeless). Se puede utilizar utilizar True True o False, 1 o 0, o las constantes vbModal o vbModeless. Cuando el formulario está en modal vbModal, valor 1 o True, no se puede ejecutar ninguna acción en la aplicación hasta que se ejecute el formulario y se cierre. Si el parámetro parámetro modal está en vbModeles, vbModeles, valor 0 o False, Fal se, se pueden hacer manipulaci anipulaciones ones a las la s celdas cel das de la hoja. En el siguient siguientee procedimien pro cedimiento to se muestra la forma frmList y se utiliza modal igual a 0, lo que permite que se puedan hacer manipu manipulacio lacion nes a las celdas de la hoja. Sub Botón1_Haga_clic_en() frmList.Show 0 End Sub Ocul Oc ulta tand ndo o e l Formul Formulario ario (Use ( UserF rForm orm))
Para ocultar un formulario se utiliza el método Hide del objeto UserFormName. El formulario no es visible, pero permanece en memoria. La sintaxis de este método es: UserFormName.Hide Por lo general esta instrucción es incluida dentro de un botón de comando ubicado en el mismo formulario. Este procedimiento se activa por lo general utilizando el evento Click del control botón de comando. Por lo general se
puede utilizar utilizar una una etiqueta etiqueta descriptiva descri ptiva para iden ide ntificar el botón, como como cancelar, cerrar o cualquier nombre nombre asociado a sociado con ocultar. ocultar.
Cargando y Cerrando los Formularios (UserForms) Cargando el Formulario (UserForm)
En algunas ocasiones, si el formulario es muy grande, y tarda mucho tiempo en cargarse. El usuario usuario tiene tiene la opción de hacer una una carga previa previ a a memoria memoria del formulario, pero sin que esté se muestre en pantalla. Para hacer esto se utiliza el método Load del objeto UserForm. La sintaxis es: Load UserFormName Para la l a mayoría mayoría de los l os formu formularios lari os no es necesario utili utilizar zar el método Load, Load, sino simplemente utilizar el método Show. Cerrando el Formulario (UserForm)
Cuando Cuando el formulario formulario no se necesita ecesi ta puede cerrarse cerrar se y elim eli minarse de la memoria. emoria. Para hacer esto se utiliza el método Un Unload, el cual cierra cier ra el el formulario y lo elimina de la memoria. Cuando un formulario es cerrado con el método Unload, los controles creados son reestablecidos a sus valores originales predeterminados. En esta forma no es posible accesar los valores que habían habían sido definidos definidos por el usuario. usuario. La sint si ntaxis axis es: Unload UserFormName
Capítulo 2 - Controles: Cajas de Texto, Et iquetas y Botones de Comando Las cajas caj as de textos textos (TextB (TextBox) ox) y los botones de comandos comandos (Command (Command Button Buttons) s) son los controles más elementales que pueden ser incorporados en una Forma unto unto con las etiquetas, las cuales son útiles para identificar identificar el cont c ontenido enido que será ingresado en las cajas de texto. En su forma más simple, estos controles se asemejan a la función InputBox en su funcionalidad de recoger un valor ingresado ingresado por el usuario.
Cajas de Texto (TextBox, txt) Las cajas caj as de texto texto son incorpora incorporadas das a la forma forma haciendo clic sobre el icono i cono correspondien corres pondiente te en el cuadro de herramient herramientas, as, lu l uego se posiciona posic iona el cursor en cualquier lugar de la forma y se hace clic para anclar un borde de la caja, se mantiene antiene presionado presi onado el botón del ratón, se arrastra arras tra el cursor c ursor para crear una una caja del tamaño tamaño requerido re querido y se suelt s uelta. a. Esto creará cre ará una caja de d e texto, texto, que tendrá tendrá el nombre nombre textbox1. textbox1.
La caja de texto muestra en las esquinas y en la parte central de cada lado unos pequeños cuadrados cuadrados de color c olor blanco, bl anco, que que son unas unas agarrade agarraderas ras (handles) que permiten permiten redimensionar redimensionar la caja. caj a. Cuando Cuando se coloca el cursor sobre s obre las agarraderas de las esquinas esquinas aparecerá apar ecerá una una flecha en diagonal diagonal de doble punta, punta, haciendo clic y manteniendo presionado el botón del ratón y moviéndola permitirá permitirá cambiar la altu al tura ra y anchu anchura ra de la caja c aja en form formaa simultánea. simultánea. En En los cuadros de los bordes inferior y superior aparecerá una doble flecha vertical, haciendo clic y manteniendo presionado movemos y cambiará el alto de la caja. Igu Igual sucede s ucede con los cuadros que están en los laterales izquierdo izquierdo y
derecho, al moverlos cambiara el ancho de la caja. En cualquier parte del borde de la l a caja aparecer apa receráá una una cruz de flechas de doble dirección, direc ción, al hacer clic y mantener presionado, cuando presenta esta forma, permitirá moverá la caja en cualquier dirección, al soltar el botón del ratón se anclará la caja en su nueva posición. En la ventana de propiedades se desplegarán las propiedades de la caja de texto texto recién recié n creada. En esta ventana ventana se mostrarán mostrarán las la s propiedades pro piedades del cont c ontrol rol que se haya seleccionado, si no se encuentra seleccionado ningún control, mostrará las propiedades de la forma.
Las propiedades pr opiedades de las la s cajas caj as de texto texto que que aparecen apar ecen en la ventana ventana de propiedades propied ades son 42, para esta versión versi ón de Micros Microsoft oft Office Office (2016). Entre Entre estas tenem tenemos os la l a propiedad propi edad Name, Name, para identificar identificar al control creado, cre ado, aquí se ha utilizado la convención de utilizar el prefijo txt para formar el nombre del control: txtA. txtA. Existe un grupo de propiedades para dar formato a la caja de texto como:
Backcolor, para el color de fondo de la caja de texto, BackSty BackStyle, le, para pa ra dar da r estilo es tilo al fondo. fondo. BorderColor: BorderColor: para dar color a las lín lí neas del borde de la caja de texto texto.. BorderStyle: para dar estilo a las líneas del borde. Font: para cambiar el formato de la fuente, incluye nombre de la fuente, tamaño, tamaño, resaltado, res altado, itálica, itáli ca, etc. ForeColor: para cambiar el color del texto que se introducirá en la caja de texto. Height. Establecer la altura de la caja de texto, también se puede modificar moviendo las agarraderas que se encuent encuentran ran en los lados superior e inferior inferior de la caja ca ja de texto. texto. Width: establecer el ancho de la caja de texto. Se puede cambiar utilizando las agarraderas que se encuent encuentran ran en los bordes laterales. laterale s. Top: distancia del borde superior de la forma al borde superior de la caja de texto. Left: distancia del borde izquierdo de la forma al borde izquierdo de la caja de texto. texto. Las propiedades pr opiedades de los controles controles pueden ser cambiados cambiados en la ventana ventana de propiedades propied ades o mediante mediante código código en un un procedimient procedimiento o escrito escri to en VBA.
Etiquetas Etiquetas (Label, (Labe l, lbl) Las etiquetas también se incorporan de igual manera en la forma, haciendo clic sobre el icono i cono del control etiqueta en la caja caj a de herramient herramientas, as, lu l uego haciendo haciendo clic en un lugar de la hoja y manteniendo el botón del ratón presionado se mueve para crear el control del tamaño deseado. Al liberar la etiqueta quedará posicionada posici onada en la forma. forma. Para manipular manipular el tamaño tamaño del control control se procede pr ocede de igual manera manera que con las cajas de texto, el control etiqueta genera una caja con las mismas 8 agarraderas ya descritas desc ritas para par a las cajas de texto. texto. La manipu manipulaci lación ón sigue sigue el mismo procedimiento procedimiento descrito descri to para las l as cajas c ajas de texto. texto. Las propiedades pr opiedades que se muestran muestran en la ventana ventana de propiedades propie dades son 27. Existe Existe una una propiedad propi edad Name, Name, y existe la propiedad pr opiedad Caption que que se utili utiliza za para
introducir introducir la l a cadena cade na de texto texto que que aparecerá apar ecerá en la forma. forma. Las propiedades que mencionamos para dar formato al control de caja de texto son utilizadas con este control también: Backcolor, BackStyle, BorderColor, BorderStyle, Font, ForeColor, Height, Width, Top, Left.
Botón de Comando (Command (Com mand button, cmd) cm d) Los botones de comando son controles que permiten iniciar la ejecución de un procedim procedi miento iento en base a un un evento evento relacionado relac ionado con el botón, botón, por lo general general el evento evento es hacer clic sobre el botón creado, sin embargo, embargo, existen otros eventos que pueden pueden iniciar la ejecución e jecución del procedimien pr ocedimiento, to, lo cual verem ve remos os más adelante. Inser Insertar tar un botón de com c omando ando sigu si guee el e l mismo procedi pro cedim miento que ya hemos hemos descrito, el cambio de alto y ancho también puede hacerse mediante la manipulaci anipulación ón de las ag a garraderas arrad eras de la caja del con co ntrol, o mediante mediante cambios cambios en la ventana de propiedades. Finalicemos Finalicemos el diseño de la l a forma forma in i nicial ici al creando c reando un botón para ejecutar una una acción. Como podemos observar en la imagen se ha creado una forma muy sencilla, con tres elementos: una caja de texto, a la cual le hemos asignado nombre txtA, una etiqueta con el texto: Introduzca un valor y un botón de comando con nombre cmdRun y texto Ejecutar.
Este simple formulario se asemeja en funcionalidad a la función InputBox de VBA, que permite recoger un valor suministrado por el usuario.
Programando el Botón de Comando Luego de haber diseñado nuestra forma, en este caso hemos creado una caja de
texto, una etiqueta para dar un mensaje y un botón de comando para iniciar la ejecución de un procedimiento que va a consistir en desplegar un mensaje de texto (MsgBox). Para introducir un código asociado al botón de comando que hemos creado, podemos podemos hacer doble clic cl ic sobre sobr e el control, o podemos podemos seleccionar sele ccionar el control y hacer clic cli c con el botón derecho derecho del ratón para desplegar desp legar el menú contex contextu tual. al. En el menú seleccionar ver código. Esto abrirá una ventana de código especialmente para introducir los códigos asociados a los formularios. Automáticamente se crea un contenedor de código, asociado al control, desde el cual hemos hemos abierto abi erto la ventana ventana de códig códi go, y estará asociado as ociado a un evento, evento, el nombre del procedimiento será igual al nombre del control, seguido por un guion bajo y el nombre del evento. El evento por defecto será Click. Dentro del contenedor escribimos el código para el procedimiento. Private Sub cmdRun_Click() Dim valor As String valor = txtA.Text MsgBox MsgBox "El "El valor val or int i ntroducido roducido es " & valor End Sub txtA es una propiedad del objeto UserForm1, y Text es una propiedad del objeto txtA que regresa el valor del texto ingresado en la caja de texto. La declara de claración ción valor = txtA txtA.T .Text ext podría haber sido escrita escri ta de las l as siguient siguientes es maneras: Valor = UserForm1.txtA.Text o inclusive Valor = Me.txtA.Text Donde Me se utiliza en sustitución del objeto activo, en este caso UserForm1. Luego probamos nuestro formulario con la tecla F5, o con el icono de ejecutar en la barra de menú del editor. Aparecerá la forma lista para ser utilizada.
Introducimos un valor en la caja de texto, por ejemplo 50 y al hacer clic en botón Ejecutar Ejecutar aparecerá apar ecerá una una caja de mensaje mensaje (Msg ( MsgBox Box)) con el Text Texto: o: El valor introducido es 50. Ahora diseñaremos y construiremos otra forma con más elementos, para introducir introducir dos valores valore s en dos cajas caj as de texto texto y obtener obtener el valor val or de la sum s umaa en una tercera caja de texto. Utilizaremos dos botones de comando, uno para realizar la suma y otra para borrar el resultado.
El código del botón de comando para sumar es: Private Sub cmdSumar_Click() Dim A As Single
Dim B As Single Dim C As Single A = txtval1.Value B = txtVal2.Value C=A+B txtResultado.Value = C End Sub El código para el botón de comando borrar es: Private Sub cmdBorrar cmdBorrar_Click() _Click() txtval1.Text = " " txtVal2.Text = " " txtResultado txtResultado = " " End Sub
Capítul Capítulo o 3 - Controles: Controles: Casill Casi lla a de Verific Verificación, ación, Botón de Opción, Botón de Alternar y Marcos Los controles de casilla casil la de verificación, verificac ión, botón de opción opci ón y botón de altern al ternar ar son parecidos, parecid os, en el hecho hecho de que proporcion proporcio nan una una respuesta con dos posibles posibl es resu res ultados, True True o False, seleccionado selecc ionado o no no seleccionado. selecc ionado.
Casilla de Verificación (Checkbox, chk) La casilla de verificación permite seleccionar una opción al hacer clic sobre ella (verificar o checar) y si existen varias casillas de verificación se pueden seleccionar selec cionar cualquier número número de ellas, ellas , o todas ellas, ellas , no son excluy excluyent entes es ent e ntre re sí. La casilla de verificación tiene dos estados posibles, seleccionado, cuando tiene tiene la l a marca de verificado, ve rificado, con valor True y no no seleccionado, sel eccionado, cuando cuando el cuadro está vacío, False. Se puede utilizar utilizar un marco para pa ra agrupar varias varia s casillas de verificación, para manejarlas en grupo, pero esto no modifica la independencia de seleccionar las casillas. La forma de utilizar este control es similar a la descrita para los otros controles. Este control tiene su propia etiqueta, a través de la propiedad caption, así que no es necesario necesar io utilizar etiquetas de textos textos para par a su identificación. En el sigu s iguient ientee ejem eje mplo se s e diseñó dis eñó una una forma forma con varias varia s casillas casi llas de verificación verificac ión para seleccionar sel eccionar los ingredie ingredien ntes a utili utilizar zar en un un sandwic sandwich. h.
El diseño de la forma y sus controles es el que muestra a continuación:
Luego de diseñar la forma se programa el botón de comando para ejecutar un procedim procedi miento. iento. En este procedimiento procedimiento utilizam utilizamos os una una serie seri e de estructuras estructuras condicionales para ir evaluando si la casilla de verificación está en posición Verdadera erdader a (True) (True) o Falsa (False). (False) . Private Sub Sub cmdSelecci cmdSeleccion_C on_Click() lick() Dim Texto As String Dim Texto1 As String Dim Texto2 As String
Dim Texto3 As String Dim Texto4 As String Dim sep As String sep = ", " If chkingredient1 Then Texto1 = chkingredient1.Caption Texto = Texto1 + sep Else Texto = Texto End If If chkingrediente2 Then Texto2 = chkingrediente2.Caption Texto = Texto + Texto2 + sep Else Texto = Texto End If If chkingrediente3 Then Texto3 = chkingrediente3.Caption Texto = Texto + Texto3 + sep Else Texto = Texto End If If chkingrediente4 Then Texto4 = chkingrediente4.Caption Texto = Texto + Texto4 Else
Texto = Texto End If MsgBox Texto End Sub Al seleccionar por ejemplo Tomate, Jamón y Tocineta y hacer clic en el botón seleccionar mostrará un mensaje de Texto con los nombres de los ingredientes selecci sel eccionados: onados: Tomate, omate, Jamón J amón,, Toci Tocineta. neta.
Botón de Opción (Option Button, Button, opt) Con los botones de opción la situación es diferente a la de las casillas de verificación, porque si se selecciona una opción las otras opciones no pueden seleccionarse, es decir son mutuamente excluyentes, por ejemplo, si preguntan por el estado es tado civil, solo s olo puede ser uno uno en un un mom moment ento o determinado: determinado: soltero, casado, viudo. Si se tienen varios grupos de opciones, ellas pueden ser diferenciadas, agrupándolas agrupándolas en diferentes diferentes marcos, marcos, o utili utilizan zando do la l a propiedad prop iedad GroupName. Los botones de opción opc ión tienen tienen dos valores: val ores: seleccionado, selecc ionado, True, True, aparece un punto punto negro negro en el centro del botón y no seleccionado, False, aparece apare ce un circu circ ulo en blanco. Cuando Cuando uno uno presiona uno uno de los botones, botones, se selecciona selecc iona esa opción y deselecciona desele cciona la opción que estaba previam previ ament entee selecci se leccionada, onada, nun nunca ca dos opciones estarán seleccionadas simultáneamente. Este control, al igual que el de casilla de verificación tiene su propia etiqueta de texto, a través de la propiedad caption
El sigu si guient ientee códig códi go perm per mite extraer la inform información ación sobre el estado civil, civi l, mediante el uso de una estructura condicional. Private Sub cmdCivil cmdCivil_Click() _Click() If optSoltero Then Status = "Soltero" ElseIf optCasado Then Status = "Casado" Else Status = "Viudo" End If MsgBox "El estado Civil es " & Status End Sub
Marco (Frame, (Fram e, fra) El control control Marco se utiliza para crear cr ear una caja y agrupar agrupar otros controles controles dentro del mismo. Esto con la finalidad de agrupar controles que están relacionados, relac ionados, y así mejorar el diseño di seño y present pres entación ación del formu formulario. lari o. Tam También bién se utiliza para par a agrupar diferentes conjunt conjuntos os de d e botones de opción, para limitar la exclusión de las opciones dentro de cada marco. Para incluir controles dentro del marco, se recom r ecomienda ienda primero crear el marco, luego luego crear cre ar los l os controles dent de ntro ro del de l marco. Al hacerlo de esta manera manera el marco y los controles dentro de él se comportarán como una sola entidad. Si los controles que se desean incorporar al marco ya han sido creados previos a la creación cr eación del marco, marco, se recom r ecomienda ienda mover mover los controles controles sobre el marco, y no el marco sobre los controles. Esto se debe al orden de los elementos gráficos, al sobreponer el marco sobre los controles, estos quedarán cubiertos por el marco. Al presentar la forma, forma, los controles controles dentro dentro del marco permanecerán permanecerán ocultos. ocultos. El Marco tiene las propiedade pr opiedadess comun comunes a todos los controles controles:: Name, Name, para dar nombre ombre al cont c ontrol, rol, se recom r ecomienda ienda utilizar utilizar el prefijo pre fijo fra, seguido de un nombre. Caption, para colocar un título al marco. Además de las propiedades para establecer el formato del control.
En la figura se muestra una forma con dos grupos de opciones, cada grupo está incluido dentro dentro de su propio marco, de esta manera manera la exclusión exclusión de las l as
diferentes opciones queda contenida, y no se afectan entre sí. De esta manera es posible seleccionar una opción en el marco de la izquierda y seleccionar una una opción opci ón en el marco marco de la l a derecha. der echa.
Botón de Alternar (Toggle (Toggle Button, Button, tog) Un botón botón de alternar permite permite hacer clic cli c sobre sobr e él, permitiendo permitiendo dos valores: valo res: presionado, presi onado, verdadero (True) (True) y no no presionado, presi onado, Falso Falso (False) ( False).. Pero a diferencia de los l os botones de opción, permiten permiten ejecutar ejecutar dos tipos de acción, a cción, dependiendo si el botón está presionado presi onado o no. En su funcionalidad es como una mezcla de botón de comando y botón de opción. Parecido a un botón de comando, porque se ejecuta cuando se hace clic sobre él, y parecido a un botón de opción porque tiene dos estados: presionado presi onado (True) (True) y no presionado (False). Aunque Aunque existe existe la posibili posi bilidad dad de un tercer estado: es tado: Null, Null, cuan c uando do la propiedad propied ad TripleState es establecida estableci da como True, True, la cual por defecto está establecida como False. En el sigu s iguient ientee formulario formulario se crea un botón botón de alternar para realizar r ealizar la l a acción acci ón de cambiar el color de fondo de verde a azul.
Al estar presionado el color del fondo es de color verde y al no estar presionado presi onado el color será ser á azul. azul. El código del procedim proc edimient iento o es el que se muestra a continuaci continuación. ón. Private Priv ate Sub Togg ToggleButton leButton1_Cli 1_Click() ck() If ToggleButton1.Value Then frmT frmTestAlternar.BackColor = vbGreen vb Green
Else frmTestAlternar.BackColor = vbBlue End If End Sub
Capítulo 4 - Controles: Lista y Cuadro Combinado Los con co ntroles de lista li sta y de cuadro combinado combinado son sim si milares ilar es en el sentido sentido de que muestran un listado de opciones para que el usuario haga una selección.
Lista (ListBox, lst) Una Lista es un control, que genera una caja con un listado de elementos (Items), (Items), de los cu c uales se puede seleccionar sel eccionar uno uno o varios var ios elementos, elementos, dependiendo del valor de la propiedad Muliselect, la cual tiene 3 valores posibles: posibl es: fmMultiSelectSingle para seleccionar un solo elemento de la lista fmMultiSelectMulti para seleccionar varios elementos simultáneamente al hacer clic sobre cada elemento o presionando la barra espaciadora. fmMultiSelectExtended para seleccionar varios elementos utilizando la combinación: Shift + click en cada elemento. Shift (Tecla de mayúscula) Shift (mantenida en el primer elemento) + clic en el último elemento seleccionado. Shift (mantenida en el primer elemento) + tecla de dirección para avanzar elem ele mento por elem ele mento. Marcando Marcando y arrastrando el ratón r atón sobre los item i temss a selecci s eleccionar onar.. Se pueden seleccionar o deseleccionar haciendo ctrl + clic sobre los elementos elementos individuales. Los con co ntroles lista tienen la propiedad prop iedad Name, Name, pero per o no tienen tienen propiedad caption, por lo que se puede utili utilizar zar un control control etiqueta etiqueta para la identificación identificación del control. También tiene las propiedades generales de formato comunes a todos los controles. Tienen una una propiedad RowSource, que permite permite crear crea r la l a lista li sta de elem e lement entos os del de l control, ligándolo a un rango o a un nombre de rango de una hoja de Excel.
Si la lista de elementos elementos ocupa más más espacio es pacio qu q ue la caja creada, se incluirá una una barra de desplazamiento desplazamiento vertical colocada c olocada en e n el lateral derecho, para moverse moverse a lo largo de la lista.
Cuadro Combinado (ComboBox, cbo) Un control de cuadro combinado es una combinación de caja de texto y lista. Cuando se inserta un cuadro combinado se crea una caja de texto, que en su lado derecho tiene un un botón con flecha flecha hacia abajo, abaj o, que al presionarlo presi onarlo mostrara una una lista li sta desplegable despl egable (drop (dr op down dow n menu menu). ). A diferencia de las l as listas, l istas, que tienen la posibilidad de seleccionar uno o múltiples valores de la lista, un cuadro combinado combinado solo perm pe rmite ite la selección selec ción de un solo valor. v alor.
Tiene propiedad propi edad Name Name para par a cambiar el nombre ombre del d el cont c ontrol, rol, pero no tiene propiedad propied ad Caption para colocar col ocar una una etiqueta etiqueta de identificació identificación n, por lo que se necesita un control control etiqueta etiqueta (label) (la bel) para colocar una una ident id entificación ificación al control. control. Las propiedades pr opiedades generale generaless para par a dar formato formato también también aplican apli can a este control, tales como: Backcolor, BackStyle, BorderColor, BorderStyle, Font, ForeColor, Height, Width, Top, Left. Al igual que el control lista, tienen una propiedad RowSource, que permite crear la lista de elementos del control, ligándolo a un rango o a un nombre de rango de una hoja de Excel.
Formas de Poblar una Lista o Cuadro Combinado Utilizando el método AddItem
Una lista o un cuadro combinado pueden ser cargados utilizando el método AddItem, en un evento de inicialización del formulario. Utilizando la siguiente sintaxis: ObjetoListBox.AddItem ObjetoListBox.AddItem ([pvar ([ pvargI gItem tem,, [pvargIn [pva rgIndex]) dex]) ObjetoComboBox.AddItem ObjetoComboBox.AddItem([ ([pvar pvargI gItem tem,, [pvargIn [pva rgIndex]) dex]) Donde Donde pvarg pvar gItem Item es opcional opci onal y es el elem el ement ento o o fila que se va a añadir a la lista o cuadro combinado y, pvargIndex pvargIndex es opcional y es un un número número entero, entero, que representa la posición posici ón del elemento o fila dentro del objeto. Si se omite el Index, el Item o fila es ubicado al final final de la lista. l ista. Index Index comienz comienzaa con cero, así que el prim pr imer er elemento de la lista tiene index 0. El valor de index no puede ser mayor que el número número total total de filas, filas , el cual se establece e stablece con la propiedad pr opiedad ListCount istCount.. AddItem no funciona si el ListBox o ComboBox están ligados a datos mediante la propiedad pr opiedad RowSource, así que, si desean des ean agregar agregar elem e lement entos os utili utilizan zando do el método AddItem AddItem,, prim pri mero debe de be borrarse borr arse el valor va lor de d e la propiedad propieda d RowSource. A continuación, un ejemplo de un procedimiento de un evento de inicialización del formulario, formulario, qu q ue carga c arga los elementos elementos de la lista utili utilizan zando do el método AddItem. Private Sub UserForm_Initialize() Me.lstTest.AddItem "Peter" Me.lstTest.AddItem "John" Me.lstTest.AddItem "Richard" Me.lstTest.AddItem "Luis" Me.lstTest.AddItem "Jorge" End Sub Aquí Aquí Me se refiere al objeto UserForm activo. A continuación, se muestra como aparece el control lista luego de la inicialización.
Se observa que en la caja de lista solo se pueden visualizar 3 elementos, por lo que aparece una barra de desplazamiento vertical para acceder a los elementos no visibles dentro de la caja de la lista. Para un control de caja combinado (ComboBox) procedemos de manera similar con el método AddItem. Me, se refiere al objeto UserForm Activo, donde se encuentra encuentra el control control cuadro combinado combinado y cbopaises es el nombre nombre del objeto obj eto ComboBox. ComboBox. En lugar de Me podríamos haber utilizado frmTESTCBO. frmTESTCBO.cbopaises.AddItem "País" es equivalente a Me.cbopaises.AddItem Me.cbopaises.AddItem "País". "Paí s". Private Sub UserForm_Initialize() Me.cbopaises Me.cbopai ses.AddItem .AddItem "Venezu "Venezuela ela"" Me.cbopaises.AddItem "México" Me.cbopaises.AddItem "Colombia" Me.cbopaises.AddItem Me.cbopaises.AddItem "Brasil" "Brasil " Me.cbopaises.AddItem "Peru" Me.cbopaises.AddItem "Chile" Me.cbopaises.AddItem "Ecuador" End Sub
Aparece una una caja caj a de texto, texto, el cual al presionar pr esionar el botón con flecha flecha en el borde derecho despliega un menú, con los elementos añadidos con el método AddItem. Utilizando la Propiedad RowSource
La propiedad RowSource permite cargar de elementos un control de lista o un control de caja combinada. RowSource ingresa una referencia a un rango de celdas dentro dentro de una una hoja, el cual es un rang rango vertical de celdas cel das para par a una una lista li sta de una sola columna, o un bloque de celdas para una lista de múltiples columnas. En la siguiente figura se muestra el rango A3:A8, de la hoja datos. La sintaxis es el nombre de la hoja seguido de un signo de admiración y luego el rango de las celdas. Si el nombre de la hoja contiene espacios vacíos o caracteres especiales, debe colocarse el nombre dentro de comillas simples. Por ejemplo si el nombre de la hoja es datos de listas, la referencia debe colocarse: 'datos de listas'!A3:A8
La referencia del rango puede ser colocado directamente en la ventana de propiedades, propied ades, donde aparece la propiedad propieda d RowSource. En la figura figura se muestra muestra una porción de la ventana de propiedades del objeto tipo ListBox de nombre lstGolosinas, con la propiedad RowSource y la referencia del rango.
Al colocar col ocar la referencia en la ventana ventana de propiedades pr opiedades autom automáticam áticament entee aparecerán los elementos dentro de la caja de la lista.
Para el control de caja combinada (ComboBox) funciona de igual manera. En la ventana de propiedades del control ComboBox se ubica la propiedad RowSource y se coloca la direcci di rección ón del rango rango siguiendo siguiendo la sint s intaxis axis ya indicada. Nombre de la hoja seguido del signo de admiración (!) y luego el rango. En lugar de utilizar la ventana de propiedades también se puede utilizar en un procedim procedi miento iento con el evento evento de inicia inicialización lización al cargar el formu formulario. lari o. Private Sub UserForm_Initialize() Me.cbodatos.RowSource = "datos!A3:A8" End Sub La referen re ferencia cia al rang r ango o debe colocarse colocar se en e ntre comill comillas as dobles dobl es y sigu si guee la l a misma misma sintaxis. Nombre de la hoja seguido de signo de admiración (!) y luego el rango. También se puede utilizar el signo igual dentro de las comillas: Private Sub UserForm_Initialize() Me.cbodatos.RowSource = "=datos!A3:A8" End Sub Aquí, Aquí, se s e aplica apl ica la propiedad propied ad RowSource al objeto ComboBox ComboBox.. Me, sustitu sustituye ye al objeto UserForm UserForm activo. Utilizando la Propiedad RowSource con un Nombre de Rango
En lugar de utilizar una referencia a un rango, también se puede utilizar un nombre de rango. Este nombre de rango puede utilizarse en la ventana de propiedades propied ades del cont c ontrol rol lista li sta (ListBox (ListBox)) o caja com c ombinada binada (ComboBox (ComboBox). ).
El nombre nombre del d el rang r ango o se escribe escri be sin si n colocar comill comillas. as. Tam También bién se puede utilizar el nombre de rango en un código de inicialización de la UserForm. Private Sub UserForm_Initialize() Me.lstFrutas.RowSource = "Frutas" End Sub En este caso el nombre del rango debe colocarse entre comillas dobles. Nombres de Rangos Dinamicos
Si la lista va a cambiar es necesario modificar el rango asociado al nombre. Una forma de hacerlo es creando un código que se ejecute con el evento de inicialización iniciali zación del UserForm. Private Sub UserForm_Initialize() Dim UFila As Double Worksheets("datos").Select UFila Fil a = Range("A" Range("A" & Rows.Coun Row s.Count).End(xlU t).End(xlUp).Row p).Row ThisWorkbook.Names.Add "mirango", Range(Range("A3"), Range("A" & UFila)) Me.lstFrutas.RowSource = "mirango" End Sub
En este procedim procedi miento iento de inicialización, i nicialización, se verifica ver ifica la l a última fila fila con inform información ación y se alm al macena este valor val or en la variable variab le UFila. Luego Luego se aplica apl ica la propiedad propied ad Names Names al objeto obj eto Workbook Workbook (ThisWorkbook (ThisWorkbook), ), para crear cr ear un objeto Names, Names, el cual es una una colección colecc ión de objetos tipo Name. Name. Se aplica aplic a el método método Add para añadir añ adir un nombre nombre al rango rango actualizado actualizado entre la celda ce lda de inicio A3, hasta la última fila con información en la columna A, "A"&UFila. Finalmente se aplica la propiedad RowSource y se le asigna el nombre de rango actualizado. Utilizando la propiedad RowSource con Tablas
En lugar de crear un nombre de rango, se puede crear una tabla, primero hay que marcar marcar el rango rango de celdas que van a constitu constituir ir la lista de d e elem el ement entos os a incluir con la propiedad RowSource, en el menú insertar, grupo Tablas, se encuent encuentra ra el icono Tabla, Tabla, al a l hacer clic cl ic se s e activara el "Asisten "Asis tente" te" para crear cr ear una una tabla. Seguir las indicaciones para crear la tabla. Esto creará una tabla con el nombre Tabla1. Cambiar el nombre. Este nombre se añade a el administrador de nombres de rango, como si fuese un nombre de rango. La ventaja que tiene la tabla, es que se actualiza dinámicamente, así que cada vez que se incluya o se borre bor re una una línea, lí nea, el rango rango se actuali actualizara. zara. Este nom nombre bre de tabla que creamos se puede utilizar en la propiedad propie dad RowSource en un procedimiento de inicialización del objeto UserForm. Private Sub UserForm_Initialize() Me.lstTabl Me.lstTablaF aF.RowSo .RowSource urce = "Tabl "TablaF" aF" End Sub Me sustituye al UserForm, y lstTablaF es el nombre dado al objeto ListBox, RowSource es la propiedad aplicada a el objeto ListBox. El nombre de la tabla se coloca entre comillas dobles: "TablaF". Al inicializar el UserForm, se cargan los elementos que estén en la tabla creada.
No fun funciona ciona el nombre nombre de la tabla en e n la ventan ventanaa de propiedades. propi edades. Pero se puede utilizar utilizar sin problema en un procedimiento procedimiento de inicialización, inicial ización, con el código mostrado. Utilizando la Propiedad List y el método AddItem, Añadiendo Elemento por Elemento
La propiedad List permite agregar elementos a una lista cuando se tienen múltiples columnas columnas de datos. La sintax sintaxis is de esta propieda p ropiedad d es: Objeto ListBox.List( istBox.List([pva [pvargIn rgIndex], dex], [pvargColum [pva rgColumn]) n]) Objeto ComboBox.L ComboBox.List( ist([pva [pvargIn rgIndex], dex], [pvargColum [pva rgColumn]) n]) El primer parámetro es el índice de las filas, el segundo parámetro es el índice de las columnas. columnas. Ambos Ambos in i nician icia n en 0 (cero).
Para añadir elementos a una lista podemos utilizar un procedimiento para un evento de inicialización y cargar los elementos uno por uno. El primer
elemento elemento de las la s filas, filas , es decir, los elementos elementos ubicados en la primera columna columna se deben añadir con el método AddItem, y los restantes con la propiedad List. Private Sub UserForm_Initialize() Me.lstLista1.ColumnCount = 3 Me.lstLista1.AddItem "Dia 1" Me.lstLista1.List(0, 1) = "Lunes" Me.lstLista1.List(0, 2) = "Espaguetis" Me.lstLista1.AddItem "Dia 2" Me.lstLista1.List(1, 1) = "Martes" Me.lstLista1.List(1, 2) = "Arroz" Me.lstLista1.AddItem "Dia 3" Me.lstLista1.L Me.lstLista1.List(2, ist(2, 1) = "Miércoles" "Miércoles " Me.lstLista1.List(2, 2) = "Ensalada" End Sub
Utilizando la Propiedad Column y el método AddItem, Añadiendo Elemento por Elemento
La propiedad Colum permite añadir elementos cuando la lista tiene múltiples columnas. La sintaxis es: ObjetoListBox.Column([pvar ObjetoListBox.Column([pvargC gColum olumn], n], [pvargIn [pva rgIndex]) dex]) ObjetoComboBox.Colum ObjetoComboBox.Column([pvar n([pvargColum gColumn], n], [pvargIn [pva rgIndex]) dex])
El primer parámetro es el índice de las Columnas y el Segundo parámetro es el índice de las filas, ambos inician en 0 (cero).
Esta propiedad se parece a la propiedad List, pero tiene los índices transpuestos. transpuestos. El primer índice es de la colu col umna y el seg se gundo undo es el de la Fila. Fil a. En el sigu si guient ientee procedimien pr ocedimiento to de inicialización i nicialización se cargarán los elementos elementos de una caja combinada (ComboBox) utilizando la propiedad Column. Los elementos de la primera columna deben cargarse utilizando el método AddItem. Private Sub UserForm_Initialize() Me.cboCol.ColumnCount = 3 Me.cboCol.ColumnHeads = False Me.cboCol.AddItem Me.cboCol .AddItem "Matem "Matematica atica"" Me.cboCol.AddItem "Fisica" Me.cboCol.AddItem Me.cboCol .AddItem "Quimica" "Quimica" Me.cboCol.Column(1, 0) = "Matias" Me.cboCol.Column(1, 1) = "Francisco" Me.cboCol.Column(1, 2) = "Maria" Me.cboCol.Column(2, 0) = "Mañana" Me.cboCol.Column(2, 1) = "Tarde" Me.cboCol.Column(2, 2) = "Noche" End Sub
Utilizando la Función Array en Combinación con la Propiedad List
Se pueden cargar las listas (ListBox) y las cajas combinadas (ComboBox) utilizando la función Array en combinación con la propiedad List. La sintaxis es la siguiente: ObjetoListBox.Lis ObjetoListBox.Listt = Array(ele Arr ay(elem mento0, elem el emento ento 1…..elem 1…..el ementoN) entoN) ObjetoComboBox.L ObjetoComboBox.Lis istt = Array(el Ar ray(elem emento0, ento0, elem el emento ento 1…..element 1…..e lementoN) oN) Este método se utiliza solamente mediante código en VBA, no está disponible en la ventana ventana de propiedades. propie dades. En el procedimien pr ocedimiento to de inicialización inicial ización se crea un código como el que se muestra. Private Sub UserForm_Initialize() Dim miarreglo As Variant miarreglo = Array("uno", "dos", "tres", "cuatro", "cinco") Me.cboArreglo.List = miarreglo End Sub Utilizando la Propiedad List y un Objeto Tipo Range para Añadir un Rango de Celdas de una Hoja
Ya vimos que List puede ser utilizado para cargar una lista elemento por elem ele mento en conjunto conjunto con el método AddItem Add Item,, también puede se s e puede p uede cargar ca rgar un arreglo unidimensional utilizando la función Array, para cargar un Arreglo de dos dimensiones de forma completa en un solo paso, también se puede utilizar la propiedad List. El arreglo arr eglo puede puede origin or iginarse arse en un un rango rango de celdas de la hoja. Así que lo
primero que que debemos debemos hacer es crear el arreglo arr eglo en un rango rango de celdas celda s de una una hoja. Copiemos la dirección del rango que hemos creado, ir a la forma (UserForm) que estamos estamos creando cr eando y hacer hacer doble clic, c lic, o con el botón derecho despegar el menú context contextual. ual. Seleccionar Selecci onar ver código Aparecerá Aparecer á la l a vent ve ntana ana de código, có digo, con un contenedor contenedor de código. Por defecto aparecerá aparecer á un conten contenedor edor asociado asocia do al evento UserForm_Click, cambiar a uno con el evento UserForm_initialize. Dentro Dentro del contenedor contenedor crear un objeto Range Range y asignarle a la variable variab le objeto ob jeto el rang r ango o de la l a tabla que deseam desea mos in i ncluir en la lista l ista (ListBox) (ListBox) o caja c aja combinada (Com ( ComboBox). boBox). Dim miRango As Range (crea la variable para almacenar un objeto tipo Range). Set miRango = ThisWorkbook.Worksheets("informe").Range("A2:C6") Asigna Asigna a la variabl va riablee miRango miRango la referen re ferencia cia al rango rango en la hoja. Propiedad ColumnCount
Se debe indicar cuantas columnas de datos se van a utilizar, utilizando la propiedad propied ad ColumnC ColumnCoun ount. t. Si se omite omite este valor, solament solamentee se mostrará mostrará la primera column columna del arreglo. ar reglo. Se puede puede modificar modificar en la ventana ventana de propiedades para los lo s controles controles ListBox y ComboBox ComboBox o utilizan utilizando do código en un procedim procedi miento iento en VBA. VBA. Propiedad ColumnHeads
Se puede indicar si la lista in i ncluye cluye encabezados para las column columnas, utilizando utilizando la propiedad pr opiedad ColumnH ColumnHeads, eads, con co n valor true. El valor predeterminado predeterminado es False. Fals e. Se puede cambiar en la ventana de propiedades o mediante código en VBA. Propiedad ColumnWidth
También se puede indicar el ancho de las columnas, utilizando la propiedad ColumnW ColumnWidth, idth, la cual tiene ti ene la siguiente sintaxis: Objeto.ColumnWidth = "ancho1; ancho2; ancho3…." Donde el objeto puede ser un control ListBox o ComboBox. Los anchos se especifican especi fican en unidades unidades de pixeles y están colocados colocado s entre comill comillas as dobles dobl es y separados separad os por punto punto y coma coma ( ; ). Si no se utiliza esta propiedad propied ad se
desplegarán los anch a nchos os de columna columna para ajustarse a los cont c ontenidos enidos de cada columna. Se puede ocultar la presentación de cualquier columna, estableciendo su ancho en 0. El siguiente procedimiento muestra el código utilizado en un evento de inicialización del formulario para cargar un ComboBox con un rango. Primero mostraremos una porción de la hoja con el rango.
Private Sub UserForm_Initialize() Dim miRango As Range Set miRango = ThisWorkbook.Worksheets("informe").Range("A2:C6") Me.cboRange.ColumnCount = 3 Me.cboRange.Col Me.cboRange.Colum umnH nHeads eads = False Fal se Me.cboRange.List = miRango.Cells.Value End Sub Utilizando la Propiedad List y una Variable para Añadir un Rango de Celd Ce ldas as de una Hoja Hoj a
En lugar de utilizar un objeto Range, es posible utilizar una variable que sea igual al rango. El código de in i nicialización icia lización para este e ste procedim procedi miento iento es el e l que se muestra muestra a continuación: Private Sub UserForm_Initialize()
Dim ElRango As Variant ElRango ElRango = Worksheets("inf orksheets("i nforme").Rang orme").Range("A2: e("A2:C6") C6") Me.lstElRango.ColumnCount = 3 Me.lstElRango.Lis Me.lstElRango.Listt = ElRango End Sub
Utilizando la Propiedad Column y un Objeto Tipo Range para Añadir un Rango de Celdas de una Hoja
En este método se crea un objeto Range de igual manera que se hizo en el ejemplo anterior anterior con la propiedad propi edad List. La La diferencia es que cuando cuando se aplica apli ca la propiedad propieda d Column, Column, lo que aparece aparec e como fila en el rango, rango, se carga como como columna columna en la lista. l ista. Es decir, aparece apar ece transpuesto. transpuesto. Private Sub UserForm_Initialize() Dim ColRange As Range Set ColRange Co lRange = Worksheets("inf orksheets("i nforme").Rang orme").Range("A2: e("A2:C6") C6") Me.cboMiRango.ColumnCount = 3 Me.cboMiRango.Column = ColRange.Cells.Value End Sub
Para que aparezca apar ezca en el orden or den correcto hay que que aplicar apl icar la función función transpose transpose al objeto Range Range creado. cr eado. Private Sub UserForm_Initialize() Dim A As Range Set A = Worksheets("informe").Range("A2:C6") B = WorksheetFunction.Transpose(A) Me.cboMiRango.ColumnCount = 3 Me.cboMiRango.Column = B End Sub
Utilizando la Propiedad Column y un Rango de Celdas asignado a una Variable
En lugar de crear un objeto Range también se puede crear una variable para que almacene el Rango de la hoja. A continuación, un procedimiento de inicialización iniciali zación donde donde la variable varia ble A almacena almacena el Rango Rango de la l a hoja, y la variable vari able B almacena el valor de la Transpuesta de A. Para que la lista aparezca en correcto correc to orden, al utilizar la propiedad propieda d Column, Column, se debe utiliza la transpuesta transpuesta del arreglo A, es decir, el arreglo B. Private Sub UserForm_Initialize() A = Worksheets("informe").Range("A2:C6") B = WorksheetFunction.Transpose(A) Me.cboMiRango.ColumnCount = 3 Me.cboMiRango.Column = B End Sub
Propiedades para Enlazar datos de una Columna specifica Propie Propie dad Te Te xtColum xt Colum
La propiedad TextColumn se utiliza para indicar cual columna se utiliza para recoger datos cuando se utiliza la propiedad Text de un control ListBox o ComboBox en una lista con múltiples columnas. La sintaxis es Objeto.TextColumn= Valor Donde Objeto es un control ListBox o ComboBox y el valor es un número entero entero que indica la l a posición posi ción de la columna: columna: 1 para la prim pr imera era colum c olumna, na, 2 para la segunda columna. Cuando se utiliza un valor de 0, se muestra el número de la fila seleccionada (propiedad ListIndex). Si se utiliza -1, se utilizará la primera column columna cuyo cuyo ancho ancho (propiedad (propi edad columnW columnWidth idth)) sea mayor mayor de 0. Este es el valor predeterminado. predeterminado. Esta propiedad se puede cambiar en la ventana ventana de propiedades propied ades o mediante mediante código código en un un procedimient procedimiento o en VBA. VBA. Cuando se utiliza un control ComboBox, en la parte de la caja de texto se mostrará el valor de la columna especificada con la propiedad TextColumn. Propiedad BoundColum
La propiedad BoundColumn se utiliza para indicar cual columna se utiliza para recoger re coger datos cuando cuando se utiliza utiliza la propiedad propi edad Value Value de un un control control ListBox ListBox o ComboBox en una lista con múltiples columnas. La sintaxis es Objeto.BoundCol Obje to.BoundColum umn= n= Val Valor or Donde objeto es un control ListBox o ComboBox. Y valor es un entero para indicar la l a posición posi ción de la column columna. El valor va lor predeterm p redeterminado inado es 1. Cuando Cuando se utili utiliza za un un valor de 0, se muestra muestra el número úmero de la fila seleccionada selec cionada (propiedad (propi edad ListIndex). istIndex). Esta propiedad se puede cam ca mbiar en la ventana ventana de propiedades propie dades o mediante edi ante código códi go en un procedimient proced imiento o en e n VBA. VBA.
Propiedades para Restrin Re stringir gir la Selección Selecc ión a los Valores Valores en la Lista de Elementos en la Caja Combinada En una caja combinada (ComboBox) se puede seleccionar un elemento del menú desplegable (drop down menu) y también se puede añadir un elemento que no no aparece apar ece en la lista, l ista, escribiéndolo escr ibiéndolo directam di rectament entee en la caja caj a de texto. texto. Esto debido a que este control es una combinación de caja de texto y lista. Propiedad MatchRequired
Para que se pueda ingresar un elemento nuevo, que no aparece en la lista de
elementos elementos de la caja combinada combinada se requiere r equiere que la propiedad pr opiedad MatchR MatchRequired equired tenga valor False, el cuál es el valor predeterminado. Si el valor de la propiedad propied ad MatchR MatchRequired equired se establece en True, True, no no se puede utilizar utilizar ningún ningún valor que no no esté en la lista l ista desplegable. despl egable. De esta manera manera la selecci s elección ón queda queda restringida a los elementos que están dentro de la lista. Al intentar usar un valor diferente generará un mensaje de error, indicando Valor de propiedad no valido. La propiedad MatchRequired puede ser cambiada en la ventana de propiedades propied ades o mediante mediante código código en procedimient procedimientos os VBA. VBA. Si MatchRequired tiene valor False, se puede escribir un valor en la caja combinada, combinada, pero no se incluye incluye dentro de la l a lista. l ista. Para que se incluya incluya en la lista lis ta hay que escribir un procedimiento que al determinar que el nuevo elemento no está dentro de la lista, lo añada a la lista para que esté disponible para un uso futuro. Propiedad Style
Esta propiedad permite cambiar el estilo de la lista desplegable (Dropdown menu). enu). Esta propiedad prop iedad tiene tiene dos valores: valores : 0 - fmStyleDropDownCombo. Este es el valor predeterminado, y hace que la caja de texto pueda ser utilizada para ingresar información que no está en la lista. 2 - fmStyleDropDownList. Este valor hace que la caja de texto de la caja combinada combinada no acepte que que se escriban escri ban valores. Se restringe restringe la entrada entrada solo s olo a los elementos que están en la lista. Esta propiedad puede ser modificada modificada en la ventana ventana de propiedades propie dades o mediante código en VBA.
Capítul Capítulo o 5 - Controles: Controles: Barra Barra de Desplazamiento, Botón de Número Estos dos controles permiten asignar asignar valores val ores num numéricos a la propiedad propied ad de un objeto, el cual puede ser un rango de una hoja, el valor de una caja de texto, el valor de una etiqueta.
Barra de Desplazamiento De splazamiento (ScrollBar, (ScrollBar, scr) Una barra de desplazamiento es un control que tiene dos botones uno para disminuir y otro para aumentar una cantidad fija, la cual se establece con la propiedad propied ad SmallChan SmallChang ge (cambio pequeño). pequeño). Cuando Cuando se hace clic en la zona zona de la barra deslizadora, entre los botones, los cambios se efectúan de acuerdo al valor de la l a propiedad prop iedad LargeChang argeChangee (cam (c ambio bio grande). En la barra bar ra tiene un deslizador desli zador,, que puede ser movido con la ayuda ayuda del ratón haciendo haciendo clic cli c y manteniendo presionado. Los botones y la zona de la barra pueden ser accionados clic cl ic a clic, cli c, o manten manteniendo iendo presionado. presi onado. La La barra bar ra de desplazam despla zamient iento o puede colocarse en forma forma horizontal horizontal o en forma forma vertical, vertical , dependiendo dependiendo de las dimensiones de la altura y del ancho. Si el ancho es mayor que la altura, automáticamente se creara una barra de desplazamiento horizontal, en caso contrario se creara una barra de desplazamiento vertical. La barra desplazamiento tiene las propiedades Max, para establecer el valor máximo, el cual tiene un valor predeterminado de 32767 y Min para establecer el valor va lor mínim mínimo, o, el cual tiene un un valor predeterm pre determinado inado de 0. Estos valores val ores se pueden cambiar cambiar en la ventana ventana de propiedades propi edades o mediante mediante código en un procedim procedi miento iento en VBA. VBA. En la siguiente figura se muestra una forma donde se han creado tres cajas de
texto texto y dos barras de desplazam desp lazamient iento, o, que controlan controlan los valores valore s en las cajas de texto 1 y 2. La caja de texto 3 muestra el resultado de la multiplicación de los valores valore s que contienen contienen las cajas 1 y 2.
Para que los valores de las barras de desplazamiento se copien a las cajas de texto se crean procedimientos que se ejecutan con el evento Change. Cada vez que se haga un cambio en las barras de desplazamiento se ejecutara el procedim procedi miento. iento. A continu continuación, ación, los procedim procedi mientos ientos para los l os eventos Ch Change ange de las dos barras de desplazamientos. Private Sub scrbar1_Change() Me.txtVal1.V al 1.Val alue ue = scrb sc rbar ar1.V 1.Val alue ue Me.txtVal Me.txtVal3. 3.V Value al ue = Val(Me al (Me.txtV .txtVal al1. 1.V Value) al ue) * Val Val(Me (Me.txtV .txtVal al2. 2.V Value) al ue) End Sub ### Private Sub scrBar2_Change() Me.txtVal2.Value = scrBar2.Value Me.txtVal Me.txtVal3. 3.V Value al ue = Val(Me al (Me.txtV .txtVal al1. 1.V Value) al ue) * Val Val(Me (Me.txtV .txtVal al2. 2.V Value) al ue) End Sub
Cuando Cuando se acciona acci ona cualquiera cualquiera de las barras de desplazam despl azamiento iento se efectúa la multiplicación de los valores que contengan las cajas de texto 1 y 2 y el resultado se colocara en la caja de texto 3. Los valores almacenados en las cajas de texto son de tipo String, por lo que para transformarlos en números se utiliza la función Val. En resumen, resumen, las propiedades propieda des más important importantes es de las l as barras b arras de desplazam de splazamient iento o (ScrollBar) son las siguientes: Name: Name: Para asign as ignar ar un nombre nombre al cont c ontrol rol ControlSource: Identifica la dirección de una celda de una hoja o de un campo ligado al control. control. El valor val or predeterm pr edeterminado inado es una una cadena cade na de texto texto vacía. Un ControlSource ControlSource solo puede estar ligado l igado a un control. control. LargeChange: Para establecer el cambio grande, cuando se presiona en la zona de la barra de desplazam despl azamiento iento ubicada ubicada entre entre los l os dos botones. botones. SmallChan SmallChange: ge: Para establecer e stablecer el cambio cambio pequeño, pe queño, cuando cuando se presiona pre siona en los dos botones laterales de la barra de desplazamiento. Max: Valor máximo de la barra de desplazamiento. Min: Valor mínimo de la barra de desplazamiento. Orientation: Determina la orientación que tendrá la barra de desplazamiento, tiene tres valores: Auto, -1, fmOrientationAuto; Vertical, 0, fmOrie fmOrient ntationV ationVerti ertical cal;; Horizon Hori zontal, tal, 1, fmOrie fmOrient ntationHorizontal. ationHorizontal. La propied prop iedad ad Orientation Orientation tiene tiene el valor predeterminado predeterminado en Auto, Auto, por lo l o que la barra de desplazamiento tendrá una orientación dependiendo de las dimensiones de alto y ancho del control-
Botón de Número Núme ro (Spin Button, Button, spn) El control de Botón de número (Spin Button) funciona de manera similar que el control de barra de desplazamiento (ScrollBar), la diferencia es que el control de botón de número solo tiene dos botones, uno para disminuir y otra para incrementar incrementar en una una cantidad cantidad establecida establec ida con la propiedad propie dad SmallChan SmallChange, ge, la cual tiene un valor predeterminado de 1. No muestra una barra entre los botones, botones, por lo l o que que no tiene tiene la propiedad propie dad LargeCh LargeChang ange. e. Tiene la propiedad propied ad Name Name para par a cambiar el nombre nombre del de l con co ntrol, pero per o no tiene propiedad propied ad caption. Tiene Tiene las propiedades propi edades general generales es que son utilizadas para
dar formato al control. La propiedad ControlSource funciona de igual manera que para el control barra de desplazamiento. desplazamiento. El valor del control se puede asociar a una una caja caj a de texto texto o a una etiqueta etiqueta para que se actualice utilizando un procedimiento asociado a un evento Change del control SpinButton. En el siguiente procedimiento asociado a un evento Change del control spnVal1 se liga el valor del control txtVal1 al valor del control spnVal1. Private Sub spnVal1_Change() Me.txtVal1.Value = Me.spnVal1.Value End Sub
Se pueden establecer los valores mínimo y máximo utilizando las propiedades Min y Max, Max, las la s cuales pueden ser cambiadas cambiadas en la ventana ventana de propiedades propie dades o mediante edi ante código códi go en un procedimient proced imiento o en e n VBA. VBA.
Capítulo 6 - Control: Multi Páginas, Imagen y RefEdit Control Multi Páginas (Multipage, mpg) Cuando el formulario tiene muchos controles, puede dar la sensación de estar sobrecargada, creando una muy mala impresión en el usuario. Si es necesario incluir una gran cantidad de controles, lo recomendable es agrupar los controles controles por el tipo de información información que van a recoger, recoger, y dividirlos dividir los en en diferentes páginas, de forma que en cada página aparezcan pocos controles para manejar manejar inf i nform ormación ación relacionada. relaci onada. La La idea es no abrumar abrumar al usuario con una forma con demasiados controles en ella. Para añadir un control multi página página hacer clic en la caja de controles controles sobre s obre el icono i cono del control control y se coloca dentro de la forma. Cuando se crea un control multipágina se crean dos páginas de forma predeterminada, predeterminada, si se desea dese a crear una nueva nueva página, página, eliminar eliminar una una página, página, cambiar cambiar de nombre nombre o mover, se puede hacer clic cli c sobre sobr e el botón derecho del ratón y aparecerá un menú contextual con estas opciones.
Cada página actúa como si fuese una forma individual, tiene su propia ventana de propiedades para cambiar las propiedades de cada página. Entre las propiedades propied ades están:
Name, Name, para dar nombre ombre a cada págin pá gina. a. Caption, Caption, para colocar la etiqueta en la pestaña que identifica identifica la l a página. En cada página pueden pueden colocarse colocars e los controles controles que se requieran y su programación programación es como como si se tratase de una una forma forma independient independiente. e.
Control Imagen (Image, img) Este control se utiliza para insertar una imagen en el formulario. La imagen puede ser insertada utilizan utilizando do la propiedad propi edad Picture en la ventana ventana de propiedades. propied ades. Las dimension dimensiones es de la caja c aja son en pixeles de ancho ancho y alto. La La imagen puede ser un logo, o algún motivo alusivo al formulario para hacerlo mas interesante. El control imagen (Image) tiene como todos los controles una propiedad Name, Name, para asign asi gnarle arle un nombre nombre y las propiedades propie dades generale generaless para dar formato formato al control como: BackColor, BackSt Bac kStyle, yle, Border Bor derColor, Color, BorderSty Border Style, le, Height, Height, Left, Left, Top, Top, Width. Y tiene unas propiedades para controlar la imagen: Picture, Picture, para par a seleccionar sel eccionar el archivo de la l a imagen imagen que que se desea mostrar. Abre una caja de dialogo para seleccionar el archivo a mostrar en la caja de imagen. PictureAlignment, Para alinear la imagen dentro de la caja. Tiene 5 valores: - fmPictureAlignmentTopLeft, 0 - fmPic fmPictureAl tureAlignm ignmentT entTopRi opRigh ght, t, 1 - fmPictureAlignmentCenter, 2 - fmPic fmPictureAl tureAlignm ignmentBottom entBottomLeft Left,, 3 - fmPic fmPictureAl tureAlignm ignmentBottom entBottomRight, Right, 4 Por defecto la imagen está alineada en el centro. PictureSizeMode, Para determinar la forma en que se mostrara la imagen, en caso de que el tamaño sea diferente al tamaño de la caja. Presenta 3 valores: - fmPictureSizeModeClip, 0. Si la imagen es de mayor tamaño que la caja creada solo aparece una una porción de ella (clip)
- fmPictureSizeModeStretch, 1. La imagen ocupa toda la caja, pero aparece deformada, estirada para lograr abarcar todo el marco (no se conserva la relación de aspecto) - fmPictureSi fmPictureSizeM zeModeZoom odeZoom,, 3. La im i magen ocupa todo el marco, arc o, pero pe ro mantiene la relación de aspecto. -Pictu -Pic tureTili reTiling ng,, Si la imagen imagen está en el modo de fmPictureSi fmPictureSizeM zeModeZoom odeZoom y no completa completa todo el cuadro, se añaden añad en porciones de la imagen imagen para ocupar oc upar todo el cuadro si el valor de la propiedad PictureTiling es True. SpecialEffect, SpecialEffect, para crear un efecto efecto especial espe cial en la im i magen que se inserta en el cuadro de imagen. Tiene 5 valores: - fmSpecialEffectFlat, 0. - fmSpecialEffectRaised, 1. - fmSpecialEffectSunken, 2. - fmSpecialEffectEtched, 3. - fmSpeci fmSpecialEffectBu alEffectBum mp, 6.
Control Control RefEdit (RefEdit,rfe) (Ref Edit,rfe) Este control control no aparece de forma forma predeterm pr edeterminada inada en la caja de herramientas, herramientas, para añadirlo añadi rlo hay que ir al menú menú en VBE y en la pestaña de herramien herramientas tas seleccionar
Al hacer clic cli c aparece apar ece una una caja caj a de dialogo, d ialogo, con un un listado bastante bastante grande grande de controles de aplicaciones de Microsoft y de otros fabricantes, se localiza el control control que deseamos deseamos incluir en la caja ca ja de controles controles y se marca. marca. Aparecerá Apare cerá en en la caja ca ja de herramientas. herramientas. El control control RefEdit RefEdit permite permite crear crea r una una caja caj a para recoger la dirección direc ción de un rango rango en una una hoja. hoja. La dirección direcc ión será recogida r ecogida en la caja caj a creada crea da al marcar el rango sobre la hoja. También se puede ingresar la dirección directamente, escribiendola. A continuación, se muestra una forma donde se incluye un control RefEdit, una caja de texto y un botón de comando. Se va a realizar un procedimiento muy sencillo que consiste consiste en seleccionar sele ccionar un rango rango y calcular la l a suma suma de los l os valores val ores contenidos en el rango.
Se programó el botón de comando con un procedimiento asociado al evento Click. Para usar la cadena c adena de texto texto que represent repr esentaa el rango rango se está creando crea ndo un un objeto Range de nombre miRango y se está haciendo igual a Range(rfeRango1.Text), donde rfeRango1 es el nombre del control RefEdit y Text es una propiedad que devuelve un valor tipo String. La función suma se está introduciendo con la propiedad WorksheetFunction, la cual permite util utilizar izar una una funció función n de Excel. Excel . Private Sub cmdGO_Click() Dim miRango As Range Set miRango = Range(rfeRango1.Text) Me.txtResultado = Wor WorksheetFunction.Sum ksheetFunction.Sum(miRango) (miRango)
End Sub
elementos, elementos, o haciendo clic sobre s obre la l a forma forma y arrastrando para dibujar un rectángulo sobre la forma, los controles que están dentro del rectángulo serán seleccionados. selec cionados. Las opciones de alineam al ineamient iento o son: s on: Alineación en sentido horizontal: Izquierda, Centro, Derecha Alineación en sentido sentido vertical: Superio Superior, r, Medio, Medio, Inferior Inferior y Alineación a la cuadricula. Los elem el ement entos os deben debe n estar seleccionados sele ccionados antes de aplicar apl icar el formato formato de alineación. Igualar Tamaño
Permite hacer que las dimensiones de alto, ancho o ambas simultáneamente sean iguales en los elementos seleccionados dentro de la forma. Tiene tres opciones: igualar igualar alto, igualar ancho e igualar ambos. Ajustar Tamaño al Contenido
Si la caja tiene un texto asociado a la propiedad caption, el tamaño de la caja del control se ajustará automáticamente al tamaño del texto. Ajustar tamaño a la Cuadrícula
La caja del control se ajustará para que coincida con la marca de la cuadricula más próxima. Espacio Horiz Horiz ontal
Permite que los elementos seleccionados estén igualmente espaciados en el sentido horizontal. Tiene 4 opciones: Igualar espaciamiento. Aumentar espaciamiento, Disminuir espaciamiento y Quitar espaciamiento. Espacio Vertical
Permite que los elementos seleccionados estén igualmente espaciados en el sentido vertical. Tiene 4 opciones: Igualar espaciamiento. Aumentar espaciamiento, Disminuir espaciamiento y Quitar espaciamiento. Centrar en el Formulario
Permite Permite centrar los l os elem e lement entos os seleccionados selecc ionados en el formulario. formulario. Tiene dos opciones: Centrar los elementos en el sentido horizontal y centrar los elementos elementos en el sentido sentido vertical.
Organizar los Botones
Permite organizar los botones de comando y ubicarlos en una posición seleccionada. selec cionada. Tiene Tiene dos opciones: opci ones: Abajo y Derecha. Agrupar y Desagrupar
Agrupar permite agrupar varios elementos y manejarlos como una sola unidad, y Desagrupar permite desagrupar un grupo de elementos previamente agrupados, agrupados, a fin de manipular anipular cada elemento elemento por separado. separad o. Orden
Cuando existen elementos que se sobreponen, es posible decidir cuál elemento está al frente y cual elemento detrás. Tiene cuatro opciones: Traer al frente, Enviar Enviar hacia atrás, Traer adelant ade lantee y Enviar Enviar al fondo. fondo. Formato Utilizando Propiedades
Adicional a estas herramientas de formato, existen un conjunto de propiedades que permiten permiten modificar modificar algunas algunas de las la s características car acterísticas de formato formato de los l os controles controles.. Estas propiedades propie dades pueden cambiars cambiarsee en la ventana ventana de propiedades pr opiedades o utilizando código en procedimientos de VBA. Estas propiedades son: Height, cambia el alto del control. Width, cambia el ancho del control. Top, cambia la posición del control con respecto al borde superior del formulario. Left, eft, cambia cambia la l a posición posi ción del con co ntrol con respecto respec to al borde izquierdo izquierdo del formulario. BackColor, BackColor, cambia cambia el e l color c olor de fondo fondo del control. control. BackStyle, cambia el estilo del fondo. Font, cambia el tipo de fuente, tamaño, resaltado, itálica y otros. ForeColor, cambia cambia el color c olor de la l a fuent fuentee que utili utiliza za el control para par a el texto texto que que se coloca col oca con la propiedad pr opiedad caption, o el texto texto que es ingresado ingresado como como dato en una caja de texto o en una lista o caja combinada.
Capítulo 8 - Eventos Los formularios y sus controles pueden ser programados para que reaccionen a eventos, es decir que hagan una acción cuando algo ocurre. Un evento puede ser cambiar el valor de una caja de texto, cambiar el valor de una barra de desplazamiento, hacer clic en un botón de comando y muchos otros. En los ejemplos que hemos realizado durante el desarrollo de este libro se han utilizado eventos, sin embargo, no se habían definido formalmente. Para especificar es pecificar la forma forma en que el formulario formulario o un control control reaccionara reacci onara a un evento evento se debe escribi es cribirr un procedimiento, procedimiento, el cual va contenido contenido dentro dentro de un contenedor de código, que es generado automáticamente en el módulo del formu formulario lari o (UserForm). (UserForm). Para acceder a la l a ventana ventana de código, y escribir escribi r un procedim procedi miento iento asociado asocia do a un evento evento se puede hacer hacer doble dobl e clic sobre s obre el formu formulario lari o o sobre sob re alg al guno uno de los l os controles, o se s e puede hacer clic cli c en el botón derecho del ratón para desplegar un menú contextual, allí seleccionar y hacer clic en la opción ver código.
En la ventana de código se creará un contenedor asociado a un control y a un
evento, si el control es un botón de comando se generará un contenedor para un evento evento de hacer clic c lic sobre el e l botón. Sin embargo, embargo, se pueden seleccionar otros objetos y otros event eve ntos os de acuerdo a lo l o que se requiera manipulando manipulando los menús desplegables que se encuentran en la parte superior de la ventana de código. El nombre del procedimiento Sub que se crea es una combinación del nombre del formulario o del control, seguido por un guion bajo y el nombre del evento con un un par de parént par éntesis esis vacíos. vacíos .
En la parte superior izquierda izquierda está el menú de los controles controles,, incluyendo incluyendo la UserForm y en el lado derecho aparece aparec e el menú de los event e ventos os asociados asoc iados a los controles controles que se seleccionen sele ccionen..
Por ejemplo, para los botones de comando se tienen los siguientes eventos: BeforeDropOver BeforeDropOrPaste Click DblClick
Enter Error Exit KeyDown KeyPress KeyUp MouseDown MouseMove MouseUp Siendo el event e vento o click cl ick el evento evento usado con mayor mayor frecuencia frecuencia para los controles de botón de comando. Para los l os con co ntroles de caja caj a de texto texto (Text (TextBox Box)) y las barras de desplazam des plazamiento iento y botón de número número el event e vento o Chang Changee es el más utilizado. utilizado. A continuación, mostraremos los procedimientos asociados a los eventos para los controles caja de texto y botón de comando del formulario de ejemplo. Dim A As Double Dim B As Double Dim C As Double ### Private Sub cmdSumar_Click() C=A+B Me.txtC = C End Sub ### Private Sub txtA_Change() A = Val(Me.txtA.Text) End Sub
### Private Sub txtB_Change() B = Val(Me.txtB.Text) End Sub
Capítulo 9 - Interacción Entre Formularios, VBA y Hojas de Excel Los formularios constituyen una de las opciones para el intercambio de información con los procedimientos en VBA y con las hojas de Excel. En los formularios se tienen varios controles que recogen información del usuario, como lo son las cajas de texto, cuadros de listas, cajas combinadas, casillas de verificación, veri ficación, botones botones de opción, barras de desplazam despl azamient iento, o, botones botones de número número y otros.
Interacción Entre Entre el e l Formulario y VBA Los valores val ores qu q ue son recogidos en los controles controles pueden ser asign a signados ados a variables dentro de VBA, y ser utilizados en procedimientos. Existen procedim procedi mientos ientos de lectura, donde donde los valores val ores de un control control son so n asignados asignados a una una variable var iable y existen existen procedimiento procedimiento de escritu escr itura ra donde los l os resultados r esultados del procedim procedi miento iento son enviados enviados de vu v uelta al formulario, formulario, a un control control que puede puede ser una caja de texto, una etiqueta o un cuadro de lista.
El intercambio intercambio de inform información ación puede realizarse reali zarse sin necesidad de incluir las hojas de Excel. Procedimiento Procedimiento de Le Lectura ctura
Lee un valor del formulario (UserForm) y lo incorpora a un procedimiento. Este tipo de declar d eclaración ación tiene la sigu si guient ientee sint si ntaxis: axis: Variable = UserFormName.ControlName.Text Variable = UserFormName.ControlName.Value
Estas declaraciones pueden incluirse en eventos Change o en eventos Click. A continuaci continuación, ón, un ejemplo de d e un procedi pro cedim miento que utiliza utili za un evento Change Change para recoger re coger el valor de una caja de texto texto (Text (TextBox Box)) y asignarlo asignarlo a una una variable. Private Sub txtValA_Change() A = Val(frmEjemplo2.txtValA.Value) End Sub Procedimiento de Escritura
Una vez que se ejecuta el procedimiento los resultados pueden ser devueltos al formulario formulario utilizando utilizando declaraci decl araciones ones de escritu escr itura, ra, las l as cuales tienen tienen la siguiente sintaxis: UserFormName.ControlName.Value = Expresión UserFormName.ControlName.Text = Expresión Se puede utilizar una una etiqueta para devolver un valor al formu formulario: lari o: UserFormNam ser FormName.LabelControlName.Caption e.LabelControlName.Caption = Expresió Expre sión n Tambié ambién n se puede p uede utilizar utili zar un control control de Lista, is ta, utilizando el e l método AddItem. AddItem. UserFormName.ListBoxName.AddItem Expresion Donde Donde expresión puede ser una variable variabl e que almacena almacena el valor de un cálculo o una expresión aritmética propiamente dicha que es ejecutada dentro de un procedim procedi miento iento asociado asocia do a un evento evento como como hacer hacer clic cl ic en un un botón botón de comando comando o al evento Change de algún control, como una caja de texto. A continuación, un procedimiento para un evento Click de un botón de comando, que realiza una operación aritmética y devuelve el resultado a una caja de texto. Private Sub Sub cmdMu cmdMultiplic ltiplicar_Clic ar_Click k() C=A*B frmEjemplo2.txtValC.Value = C End Sub
Interacción Entre Entre el e l Formulario y la Hoja Propie Propie dad ControlSource
La propiedad ControlSource permite enlazar el valor de un control con una celda de la hoja, el enlace es en e n ambas ambas direcci di recciones. ones. Los Los controles que tienen esta propiedad son: Caja de Texto (TextBox) Lista (ListBox) Caja Combinada Combinada (ComboBox) (ComboBox) Casilla de Verificación (CheckBox) Botón de Opción (Option Button) Botón de Alternar (Toggle Button) Barra de Desplazamiento Desplazamiento (ScrollBar) Botón de Número (Spin Button) Esta propiedad puede ser cam ca mbiada en la ventana ventana de propiedades propie dades o utilizando tilizando un procedimiento en VBA.
La direcci di rección ón se coloca col oca con la siguient siguientee sint si ntaxis: axis: nombre nombre de la l a hoja seguido de un signo signo de adm ad miración iraci ón y la direcci di rección ón de la celda: cel da: Hoja1!A Hoja1 !A1. 1. Si el nombre nombre de la hoja tiene espacios o caracteres especiales hay que colocar el nombre de la hoja entre comillas simples, 'mi hoja'!A1. Propie Propie dad RowSource
RowSource RowSource es una una propiedad pr opiedad de los l os controles Lista (ListBox) (ListBox) y Caja Caja Combinada (ComboBox), que permite asociar un rango de una hoja con los elementos de una Lista o de una caja combinada. La referencia al rango tiene la siguiente sintaxis, nombre de la hoja seguido de signo de admiración (!) y el rango en formato A1, ejemplo: Hoja1!A2:A8. Si el nombre tiene espacios vacíos debe encerrarse entre comillas simples, ejemplo: 'mi 'mi hoja'!A2:A8. hoja'!A2:A8. Si la Lista o la Caja Combinada tiene múltiples columnas hay que establecer
el número de columnas con la propiedad ColumnCount, para que las columnas aparezcan en el cuadro de Lista o Caja Combinada Combinada creado. crea do. La propiedad RowSource y ColumnCount pueden ser cambiadas en la ventana de propiedades o mediante código en un procedimiento en VBA.
Utilizando código de VBA para Enlazar Formulario y oja de Excel Se pueden utilizar declaraciones de lectura y escritura para leer los valores desde un formulario y escribirlos en una hoja. Declaracion Declaracionee s de Lectu Lect ura
Se pueden leer los valores va lores almacenados almacenados en los controles y asignarlos asignarlos a una una variable. varia ble. La sintaxis sintaxis es la l a sigu si guient iente: e: Variable = UserFormName.ControlName.Text Variable = UserFormName.ControlName.Value Ejemplo: ValorA = UserForm1.txtValor.Value Asigna a la variable ValorA el contenido del control Caja de Texto de nombre txtValor. Declaraciones de Escritura
Se pueden escribir valores almacenados en variables, o en las propiedades Text o Value de los controles a rangos de celdas de la hoja. Referencia del Rango = Variable Referencia del Rango Rango = UserFormNam ser FormName.ControlName.T e.ControlName.Text ext Referencia del Rango = UserFormName.ControlName.Value Ejemplo: Worksheets("Hoja1").Range("A1") = Me.txtA.Value Coloca el valor del control Caja de texto de nombre txtA del formulario activo (Me) en la celda A1 de la Hoja1 del libro activo.
Utilizando Utilizando El Formulario de Forma Independient Indepe ndientee
Los formularios, formularios, a pesar de que son parte de la aplicación aplic ación Excel, Excel, pueden ser diseñados diseñad os y programados programados para pa ra ser s er "seudo independientes". independientes". Decimos Decimos seudo se udo independient independientes es porque por que no no se utili utilizan zan las hojas de cálculo cá lculo de Excel Excel para almacenar o intercambiar información con el formulario, pero no son totalmente independientes, porque tienen que ser ejecutados desde la aplicación. Todo el proceso de entrada entrada de datos, procesam proc esamient iento o y salida de result res ultados ados se realiza entre los formularios y VBA. La entrada y salida de datos en el formulario y VBA para programar la lectura, procesamientos, cálculos y escritu escri tura ra de vuelta vuelta al formu formulario. lari o. Para dar la im i mpresión presi ón de que el formulario formulario es e s una una aplicaci apl icación ón independiente independiente se puede program programar ar para qu q ue el objeto obj eto Application (Excel) tenga tenga la propiedad Visible igual a False, una vez que la forma se muestre. Hay que recordar que debe tenerse un botón dentro dentro del formulario formulario que regrese la l a visibil vis ibilidad idad de Excel, porque si no pasaremos un momento de angustia tratando de ver como recuperamos recuperamos Excel. En caso de que eso suceda tendríamos tendríamos que recurrir recurri r al administrador de tareas, y desde allí cerrar la sesión de Excel. Cuando Excel se abre abr e por defecto la propiedad propi edad Visi Visible ble está es tá en True, True, enton entonces ces las l as hojas de Excel son visibles. A continuación, los procedimientos para hacer que un formulario parezca como una aplicación independiente. 1.- Crear el formulario formulario de la forma forma normal, normal, con c on los controles que se requieran. 2.- Crear un botón en una hoja y programarlo para ocultar Excel y abrir el formulario. Public Public Sub Sub HacerIn Hacer Invisi visibleExcel() bleExcel() Application.Visi Application.Visible ble = False frmList.Show End Sub Es important importantee el orden de las l as declara de claraciones. ciones. Primero hay que ocultar ocultar la la aplicación y luego mostrar el formulario. 3.- Cuando se cree el formulario crear un botón, que al ocultar el formulario haga haga que la propiedad pr opiedad Visible isi ble de la Application Appli cation regrese regrese a su valor True. Private Sub cmdCerrar cmdCerrar_Click() _Click()
Application.Visible = True Me.Hide End Sub En caso de que se desee cerrar con la X en la parte superior derecha de la barra de título título es conveniente conveniente program programar ar el event e vento o UserForm_Q UserForm_Query ueryClose Close para que también también devuelva devuelva la l a visibili visi bilidad dad de Excel. Excel. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Application.Visible = True Me.Hide End Sub
Resumen En este libro hemos presentado una visión general de los formularios (UserForms), (UserForms), y los controles están e stándar dar que se present pres entan an en la caja de herramientas, revisando el uso de los mismos. Hemos Hemos revisado re visado la forma forma de diseñar d iseñar y constru construir ir los formulari formularios, os, las la s herramient herramientas as para pa ra dar da r formato, formato, las propiedades propieda des más important importantes es de los controles, la forma en que se cambian los valores de estas propiedades utilizando la ventana de propiedades o mediante código en procedimientos en VBA. Se ha revisado revis ado la l a forma forma de programar programar los l os formu formularios lari os y sus controles controles utili utilizan zando do los l os diferen di ferentes tes eventos que proporcionan proporci onan los controles controles.. Se ha visto la forma en que interactúan los formularios con VBA y con las hojas de Excel. La forma en que pueden utilizarse los Formularios como si estos fuesen una seudo aplicación. A lo largo de los 9 capítulos de este libro se ha tratado de mostrar el lado practico de los l os conceptos y se han añadido una una gran cantidad cantidad de figuras figuras y ejemplos para ayudar ayudar a la com c omprensión prensión de los mismos. Sincerament Sinceramentee espero esper o que este libro libr o haya haya sido si do de utilidad para ti, y de ser se r así por favor recomiéndalo recomiéndalo a tus amigos. amigos.
Acerca del Autor Luis Brito es un consultor de Ingeniería. Ha tenido interés en VBA para Excel por más más de 15 años y ha ha recopilado recopi lado durante durante este tiempo tiempo una una gran cantidad cantidad de notas notas de diferentes diferentes fuentes fuentes que han han servido para la l a preparaci prepa ración ón de este libro. libr o. Ha escrito una gran cantidad de artículos sobre el uso de VBA Excel y ha escrito varios libros de la serie VBA Excel, del cual este es la tercera entrega.
View more...
Comments