Académique Documents
Professionnel Documents
Culture Documents
NDICE...............................................................................................................................................................1 INTRODUCCIN........................................................................................................................................... 2 1. MACRO........................................................................................................................................................3 1.1. CONCEPTO DE MACRO...................................................................................................................3 1.2. GRABACIN DE MACROS...............................................................................................................3 1.3. USO DE REFERENCIAS ABSOLUTAS.......................................................................................... 4 1.4. ADMINISTRAR LAS MACROS.........................................................................................................5 1.4.1. CUADRO DE DILOGO DE MACROS..................................................................................6 1.4.2. EJECUTAR UNA MACRO........................................................................................................7 1.4.3. ELIMINAR UNA MACRO..........................................................................................................7 1.4.4. UBICACIN Y OPCIONES.......................................................................................................8 1.5. EDITAR EL CDIGO DE LAS MACROS.....................................................................................14 1.5.1. INTRODUCCIN AL ENTORNO DE VISUAL BASIC PARA APLICACIONES (VBA) ..................................................................................................................................................................15 1.5.2. EL MODELO DE OBJETOS DE VBA: MTODOS Y PROPIEDADES....................... 19 1.5.3. LOS MDULOS, LOS PROCEDIMIENTOS Y LAS PALABRAS RESERVADAS.........27 1.5.4. CONCEPTOS DE PROGRAMACIN ESTRUCTURADA.................................................33 1.5.5. INSERCIN DE CDIGO EN UNA MACRO EXISTENTE..............................................66 2. FUNCIONES PERSONALIZADAS..................................................................................................69 2.1. CONCEPTO DE FUNCIN DEFINIDA POR EL USUARIO (FDU)......................................... 69 2.2. DISEO DE UNA FDU.........................................................................................................................70 2.2.1. NOMBRE Y ARGUMENTOS..................................................................................................70 2.2.2. FUNCIONES DISPONIBLES EN VBA..................................................................................70 2.3. USO DE UNA FDU........................................................................................................................... 72 2.3.1. FLEXIBILIDAD Y ADAPTACIN...........................................................................................72 2.4. DEPURACIN....................................................................................................................................76 BIBLIOGRAFIA............................................................................................................................................82
INTRODUCCIN
Este manual de Macros con Excel para Office XP tiene como propsito auxiliarlo a utilizar de una manera mas productiva y eficiente la Hoja de Calculo de Excel, que aunque en estricto sentido , no podemos considerar los procedimientos descritos en este manual como indispensables para la realizacin de sus procedimientos con la Hoja, stos si le permitirn optimizar el manejo de sus datos automatizando los procesos que intervienen en su desarrollo y ahorrarse tiempo y esfuerzo. Con el texto, encontrar una serie de ejercicios sencillos, los cuales son sumamente ilustrativos y convenientes para que usted se vaya ejercitando en el tema que le corresponda, facilitando as el proceso de enseanza aprendizaje dando un mayor dominio y comprensin de los temas expuestos. Hay algunas convenciones tipogrficas para estandarizar y facilitar la identificacin de algunos elementos a que se hace referencia, a continuacin se sealan cules son estas convenciones: Presentaci n Botn Seleccin Empleo Muestra
Cuando se mencione el empleo de botones, el Aceptar texto que lo identifica se presenta subrayado Cuando se requiera que se efecte una Archivo | determinada seleccin de la barra de comandos o en algn men, podr reconocerlo Abrir... por su presentacin en letra tipo Times New Roman en cursiva negrita. Las diferentes secciones que sean necesarias se separan una de otra con una pipe ( | ); en caso del ejemplo, este hace referencia a la accin de hacer clic sobre el men Archivo y a continuacin hacer otro segundo clic sobre la opcin Abrir... Esta misma convencin tipogrfica se emplea para indicar el nombre de los recuadros de opciones dentro de los cuadros de dilogo. Esta caracterstica se emplea para resaltar puntos o elementos importantes a los que hay que presentar atencin tales como nombres de cuadros de dilogo, identificacin de celdas, nombres de funcin, etc. Se utilizar para distinguir el Texto que deba introducirse en los cuadros de texto o en la hoja de clculo Se utilizar negrita y subrayado para indicar que debe oprimirse una tecla o combinacin de
Elemento s
Texto Teclas
teclas.
1. Macro
1.1. CONCEPTO DE MACRO
Una macro son un conjunto de instrucciones que sirven para automatizar procesos. Refirindonos a Excel, supongamos que realizamos frecuentemente la accin de seleccionar un rango para aplicarle negrita, cambio de fuente y centrado. En lugar de hacer estas acciones manualmente, se puede elaborar una macro e invocarla para que ejecute los tres procesos automticamente. As pues, una macro es una secuencia de instituciones que le indican a Excel qu acciones debe efectuar. Las instrucciones se escriben en el lenguaje de programacin Visual Basic para Aplicaciones (VBA).
Para la segunda forma Excel tiene incorporada una herramienta denominada grabadora de macros que convierte automticamente las acciones efectuadas por el usuario en instrucciones del lenguaje de programacin Visual Basic para Aplicaciones, por tal motivo no es necesario tener conocimientos de programacin para crear macros. Es importante que antes de iniciar la grabacin de un macro se tengan perfectamente definidas las acciones a desarrollar. Una vez activada la grabadora de macros, todas las operaciones que se efecten sern grabadas.
Cuando estamos grabando la macro, ver aparecer una nueva barra de herramientas, en este caso conteniendo tan slo dos botones. El de la izquierda, segn puede verse en la figura 2 . detendr la grabacin, poniendo fin a la creacin de la macro. El de la derecha alternar entre el uso de referencias relativas modo por defecto, y referencias absolutas. Al pulsar dicho botn las referencias introducidas en la macro sern absolutas y , por tanto, al reproducirse siempre se ejecutarn sobre las mismas celdas.
3. Seleccione Herramientas | Macros | Grabar nueva macro... a continuacin se desplegar el cuadro de dilogo Grabar Macro, como se muestra en la
figura 3 .
Figura 3. El cuadro de dilogo Grabar macro permite dar un nombre a la macro que esta prximo a grabar.
1. En
el cuadro de texto Nombre de la macro introduzca Formato_de_celda ,observe que para separar las palabras se usaron guiones de subrayado, esto se debe a que Excel no permite que se utilicen espacios para nombrar macros, vea la figura 4 .
Figura 4. En el cuadro de texto Nombre de la macro es importante nombrar la macro sin espacios, para esto puede utilizar guiones de subrayado.
letra a en el cuadro de edicin que se ubica a la derecha de CTRL+. De esta manera, para ejecutar la macro slo requerir de oprimir la combinacin de tecla CTRL+a.
2. Ejecute un clic en Aceptar. 3. Excel presenta en la barra de estado el mensaje Grabando y coloca sobre
la pantalla el botn Detener Grabacin, ver figura 5 . A partir de este momento todas las acciones que se efecten sern registradas por la grabadora de macros.
1. Seleccione Formato | Celdas y se desplegar el cuadro de dilogo Formato de Celdas. Seleccione la ficha Fuente.
2. Establezca a 16 puntos el tamao de la fuente y su color a rojo. Haga clic en Aceptar. 3. Haga clic en el botn Detener grabacin de la barra de herramientas. Con esto finaliza la sesin de grabacin de la macro. Despus de que haya grabado la macro podr ejecutarla: Seleccione el conjunto de celdas de A1 a D1, esto es, seleccionar el rango de celdas de A1:D1 y utilice el mtodo abreviado CTRL + a. y observe los resultados.
1.4.1. CUADRO DE DILOGO DE MACROS
Ha creado su primera macro en un libro de Excel. Lgicamente puede crear todas las que necesite. Las macros por defecto se almacenan en el libro que est abierto en ese momento, aunque es posible alojarlas en un libro nuevo o un libro de macros
personal, si es que son macros cuyo propsito pueda extenderse a otros documentos.
Las macros no solo pueden crearse y ejecutarse o reproducirse con los pasos que ya conocemos, sino tambin pueden eliminarse y modificarse. Todas estas operaciones, que podemos considerar de administracin, las efectuaremos desde el cuadro de dilogo que aparece en la figura 6 . Para abrirlo utilice la opcin Herramientas | Macro | Macros...
Figura 6. Cuadro de dilogo Macro para administrar las macros. Actualmente tan solo aparece en la lista una macro, la que hemos creado previamente.
1.4.2. EJECUTAR UNA MACRO
Para ejecutar la macro que hemos creado previamente solo tenemos que usar el botn de Ejecutar . Esta es otra forma de ejecutar la macro adems de la del mtodo abreviado que anteriormente aprendimos. Siga los siguientes pasos para ejemplificar su uso: 1. Seleccione el conjunto de celdas de A1 a D1, esto es, sombree el rango de celdas de A1:D1 y utilice el mtodo abreviado CTRL + a. y observe los resultados.
2.
Herramientas |
Para eliminar la macro que hemos creado previamente solo tenemos que usar el botn de Eliminar .Siga los siguientes pasos para ejemplificar su uso:
Herramientas |
2. Seleccione la macro Formato_de_celda de la lista Nombre de la Macro. Ya no podemos recuperar la macro, a menos que hayamos previamente guardado el libro de trabajo.
Cuando cre su primera macro, acept la ubicacin predeterminada. Como se haba mencionado hay tres posibles lugares para guardar una macro: Este libro Libro nuevo Libro de macros personal
1. Seleccione opcin
Para
desplegar el cuadro de dilogo Grabar macro. 2. Introduzca TextoFormateado en el cuadro de texto Nombre de la macro, ver figura 7. 3. Seleccione Libro de Macros personal en la lista desplegable macro en. 4. Haga clic en Aceptar. Ahora esta en modo de grabacin. 5. Ahora seleccionaremos formatos de la barra de herramientas de formato para grabar algo en la macro. Haga clic en el botn Cursiva de la barra de herramientas. Guardar
6. Haga clic en el botn Subrayado de la barra de herramientas Formato. 7. Detenga la grabacin de la macro.
5. Seleccione Herramientas | Macro | Macros..... A continuacin se desplegar el cuadro de dilogo Macro y ver que la macro TextoFormateado se lista
como PERSONAL.XLS!TextoFormateado, ver figura 8 . 6. Seleccione la macro TextoFormateado y haga clic en Ejecutar. de la celda que seleccion ahora est en cursivas y subrayado. El texto
Figura 8. Cuadro de dilogo Macro presentando la macro TextoFormateado del libro de macros personal
Sub TextoFormateado() ' ' TextoFormateado Macro ' Macro grabada el 03/06/2002 por Oscar A. Glz. B ' ' Acceso directo: CTRL+t ' Selection.Font.Italic = True Selection.Font.Underline = xlUnderlineStyleSingle End Sub
Nota:
El cdigo generado en su computadora puede diferir del mostrado en este texto ya que no sera nada extrao que usted hubiese efectuado algunas de estas acciones en otro orden o llevado a cabo otras adicionales .
Como usted puede apreciar, si usted hubiese introducido todo ste cdigo por medio del teclado le habra tomado ms tiempo del que consumi en el proceso de la grabacin de la macro, adicionalmente al hecho de que hubiese tenido que saber programar en Visual Basic. Por el momento para el lector que desconozca este lenguaje, el cdigo anterior puede parecerle algo sumamente complejo, sin embargo cuando se discuta ste ver que es sumamente lgico y no tan difcil de comprender como aparenta ser en un principio.
1: 2: 3: 4: 5: 6: 7: 8:
Sub TextoFormateado() ' ' TextoFormateado Macro ' Macro grabada el 03/06/2002 por Oscar A. Glz. B ' ' Acceso directo: CTRL+t ' Selection.Font.Italic = True
9: 10:
La lnea 1 el la identificacin de su macro y contiene el nombre que le asign a sta precedido por la palabra Sub, los renglones 2 al 7 que comienzan con un apstrofo ' son simplemente comentarios. A continuacin en la lnea 8 dice Selection.Font.Italic = True lo cual indica que el texto de la celda o rango que se encuentre previamente seleccionado ser formateado con letra tipo cursiva o itlica El texto de la lnea 9 , Selection.Font.Underline = xlUnderlineStyleSingle le indica que el texto de la celda o rango que se encuentre previamente seleccionado ser subrayado. El texto de la lnea 10, End Sub es un indicativo de que ese fragmento o subrutina de cdigo terminado. Como se puede apreciar, en algunos casos con un poco de conocimiento del idioma ingls y algo de atencin de su parte, es posible comprender el cdigo que se gener para la macro y tal vez hasta hacer algunos cambios a ste. Suponga ahora que se equivoc al momento de ejecutar las acciones para grabar e procedimiento y que deseaba que la letra fuera de tipo Times New Roman de tamao 16 de color verde, itlica y que no estuviera subrayada. Aqu puede optar por volver a generar la macro, sin embargo ya que ha comprendido que hacen algunas lneas de cdigo, puede proceder a modificarlas en lo posible haciendo lo siguiente: Modifique la lnea 9 el texto, Selection.Font.Underline = xlUnderlineStyleSingle que le indica que el texto de la celda o rango que se encuentre previamente seleccionado ser subrayado para que no lo subraye, ahora su cdigo deber decir: Selection.Font.Underline = xlUnderlineStyleNone Agregue las siguientes lneas despus de la lnea 9 y antes del fin de la subrutina Fin Sub : Selection.Font.Name = "Times New Roman" Selection.Font.Size = 16 Selection.Font.ColorIndex = 4
El cdigo resultante debe estar como se ve a continuacin: 1. 2. 3. 4. 5. 6. 7. 8. 9. Sub TextoFormateado() ' ' TextoFormateado Macro ' Macro grabada el 03/06/2002 por Oscar A. Glz. B ' ' Acceso directo: CTRL+t ' Selection.Font.Italic = True Selection.Font.Underline = xlUnderlineStyleNone
10.Selection.Font.Name = "Times New Roman" 11.Selection.Font.Size = 16 12.Selection.Font.ColorIndex = 4 13. End Sub El objetivo de la lnea 10 es utilizar la propiedad Name del objeto Font para establecer el tipo de letra Times New Roman . En la lnea 11 se utiliza la propiedad Size para establecer un tamao de letra de 16 . En la lnea 12 le asigna a la propiedad ColorIndex del objeto Font el color 4 que corresponde al Verde. Por el momento no se preocupe de no saber las propiedades del objeto Font, ya que con la ayuda del Editor de Visual Basic para Aplicaciones usted puede revisar las propiedades del objeto Font, adems de que es un tema que abordaremos ms adelante. Guarde la macro con el comando Archivo | Guardar PERSONAL.XLS para que las modificaciones hechas en el cdigo se registren en el libro de macros personal. Ahora pruebe su macro; Escriba su nombre en la celda A1 de un nuevo libro de trabajo de trabajo y de formato a la celda A1, utilizando el Acceso directo CTRL+t o ejecutndola como se vio previamente con el comando Herramientas | Macro | Macros..... A continuacin se desplegar el cuadro de dilogo Macro y ver que la macro TextoFormateado aparece en la lista. Seleccione la macro TextoFormateado y haga clic en Ejecutar. El texto de la celda que seleccion ahora est en cursivas, tipo Times New Roman de tamao 16 de color verde y sin subrayar.
Estas limitaciones son solo algunas de las razones por las que necesitar crear su propio cdigo de VBA.
opciones y una barra de herramientas. A la izquierda y en la parte superior tenemos la ventana de proyectos, y en la parte inferior la ventana de propiedades. El resto del espacio est libre y en l suelen
aparecer el editor de cdigo, el examinador de objetos y otras ventanas auxiliares.
Como cualquier lenguaje de programacin el Visual Basic para Aplicaciones tiene una herramienta de desarrollo integrada de mens, ventanas, barras de herramientas, editor, interprete, depurador, etc. y que usaremos para crear macros y funciones, mdulos, subrutinas , generalmente simples y asociadas a un determinado libro de trabajo de Excel. Entre los elementos ms sobresalientes de ste entorno se encuentran las barras de herramientas, la Ayuda en lnea y el Examinador de Objetos. La barra de herramientas Estndar, ver figura 12 , se encuentra divida en tipos de comandos.
Figura 12. Barra de herramientas Estndar. La primera seccin de botones, ver la figura 13, se relaciona con los libros; por medio de los botones puede regresar a Excel, agregar elementos al proyecto actual y guardar su trabajo.
Figura 13. Botones Ver Microsoft Excel, Insertar UserForm y Guardar de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Insertar UserForm.
Guardar. Guarda el documento principal, incluidos el proyecto y todos sus componentes: formularios y mdulos.
La siguiente seccin de botones, ver figura 14, se relaciona con las funciones de edicin. Estos botones se utilizan para copiar, cortar y pegar texto. En sta seccin tambin hay un botn para buscar texto. Figura 14. Botones Cortar, Copiar, Pegar y Buscar de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Cortar.
Portapapeles.
Copiar.
Portapapeles.
Copia
el
control
texto
seleccionado
en
el
Pegar. Inserta el contenido del Portapapeles en la ubicacin actual del cursor. Buscar. Abre el cuadro de dilogo Buscar y busca el texto especificado en el cuadro Buscar.
tiene dos
La tercera seccin de la barra de herramientas, vea la figura 15, botones, Deshacer y Rehacer.
Figura 15. Botones Deshacer y Rehacer de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Deshacer. Deshace la ltima accin de edicin. Rehacer. Restaura las ltimas acciones descartadas de edicin
de texto si no se han realizado otras acciones desde la ltima operacin de Deshacer.
Luego vienen los botones que tienen funciones de prueba y error, vea figura 16. Los primeros tres botones de esta seccin permiten ejecutar, interrumpir y restablecer la ejecucin de un procedimiento. El ltimo botn de esta seccin pone al formulario en modo de diseo. Figura 16. Botones Ejecutar Sub/UserForm, Interrumpir, Restablecer y Modo de diseo de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Ejecutar Sub/UserForm o Ejecutar macro. Ejecuta el procedimiento actual si el cursor est en un procedimiento, ejecuta el UserForm si un UserForm est activo actualmente o ejecuta una macro si no est activa la ventana Cdigo ni un UserForm. Interrumpir. Detiene la ejecucin de un programa y cambia al
modo de interrupcin.
La siguiente seccin , vea figura 17, de la barra de herramientas Estndar se emplea para ver las diferentes secciones del Editor de Visual Basic. Estos botones le permiten desplegar el Explorador de proyectos, la ventana Propiedades, el Examinador de objetos y el Cuadro de herramientas. Figura 17. Botones Explorador de proyectos, Ventana de Propiedades, Examinador de Objetos y Cuadro de herramientas de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Abre el Explorador de proyectos que muestra una lista jerrquica de los proyectos abiertos actualmente y su contenido. Abre la ventana de Propiedades para que puedan verse las propiedades del control seleccionado.
Explorador de proyectos.
Ventana de Propiedades.
Examinador de objetos. Muestra el Examinador de objetos, que presenta una lista de bibliotecas de objetos, biblioteca de tipos, clases, mtodos, propiedades, eventos y constantes que se pueden utilizar en cdigo, as como los mdulos y procedimientos definidos para el proyecto.
Muestra u oculta el cuadro de herramientas que contiene todos los controles y los objetos insertables (Como un grfico de Microsoft Excel) disponibles para la aplicacin. Slo est disponible cuando est activo un UserForm. Finalmente est el botn de Ayuda de Microsoft Visual Basic, vea figura 18 . Este botn funciona del mismo modo que el botn de Ayuda que ha visto a travs de las aplicaciones de Microsoft.
Cuadro de herramientas.
Figura 18. Botn Ayuda de Microsoft Visual Basic de la barra de herramientas Estndar del Entorno de Visual Basic para Aplicaciones.
Otra herramienta til del Ambiente de Visual Basic para Aplicaciones es la barra de herramientas de Edicin , ver figura 19. Los botones de sta barra afectan y aumentan el entorno de desarrollo de Visual Basic.
Figura 19. Barra de herramientas de Edicin. Los botones que se encuentran en la barra de herramientas de Edicin son:
Lista de propiedades y mtodos: Al hacer clic en ste botn se muestra una lista de propiedades y mtodos aplicables al objeto sobre el que se localiza el cursor. Lista de constantes:
que aplican al argumento actual. Despliega las constantes del sistema
Informacin rpida:
rpida que proporciona seleccionado.
Palabra completa: Termina de escribir la palabra que usted ha comenzado, una vez que cuenta con los caracteres suficientes para identificarla. Sangra derecha: Desplaza a la derecha el texto seleccionado. Sangra
seleccionado.
izquierda:
Desplaza
la
izquierda
el
texto
Alternar punto de interrupcin: Coloca un punto de interrupcin en la lnea de cdigo seleccionada. ( un punto de interrupcin es una de las operaciones que se pueden realizar para depurar el cdigo ) Bloque de comentarios: Convierte el texto seleccionado en
un comentario. Esto se emplea durante la fase de depuracin y prueba
Marcador siguiente: Se desplaza al marcador siguiente. Marcador anterior: Se desplaza al marcador anterior. Borrar todos los marcadores: Borra todos los marcadores
del texto.
1.5.2. EL MODELO DE OBJETOS DE VBA: MTODOS Y PROPIEDADES
A la hora de trabajar con macros en excel, deben tenerse claros ciertos conceptos de lo que se llama programacin orientada a objetos (POO). No nos extenderemos demasiado sobre la POO, pero si definiremos a continuacin los conceptos de Objeto, Mtodos y Propiedades.
Objeto.
Cuando en el mundo real nos referimos a objeto significa que hablamos de algo ms o menos abstracto que puede ser cualquier cosa. Si decidimos concretar un poco ms podemos referirnos a objetos coche, objetos silla, objetos casa, etc. En POO, la generalizacin (o definicin) de un objeto se llama Clase, as la clase coche sera como la representante de todos los coches del mundo, mientras que un objeto coche seria un coche en concreto. De momento, no definiremos ni estudiaremos las clases sino que nos concentraremos en los objetos, pero tenga en cuenta pero que cualquier objeto est definido por una clase.
Figura 20. La clase coche y los objetos coche creados a partir de la clase.
Cuando decimos que la clase coche representa a todos los coches del mundo significa que define como es un coche, cualquier coche, ver figura 20. Dicho de otra forma y para aproximarnos a la definicin informtica, la clase coche define algo que tiene cuatro ruedas, un motor, un chasis,... entonces, cualquier objeto real de cuatro ruedas, un motor, un chasis,... es un objeto de la clase coche.
Mtodos.
La mayora de objetos tienen comportamientos o realizan acciones, por ejemplo, una accin evidente de un objeto coche es el de moverse o lo que es lo mismo, trasladarse de un punto inicial a un punto final. Cualquier proceso que implica una accin o pauta de comportamiento por parte de un objeto se define en su clase para que luego pueda manifestarse en cualquiera de sus objetos. As, en la clase coche se definiran en el mtodo mover todos los procesos necesarios para llevarlo a cabo (los procesos para desplazar de un punto inicial a un punto final), luego cada objeto de la clase coche simplemente tendra que invocar este mtodo para trasladarse de un punto inicial a un punto final, cualesquiera que fueran esos puntos.
Propiedades.
Cualquier objeto tiene caractersticas o propiedades como por ejemplo el color, la forma, peso, medidas, etc. Estas propiedades se definen en la clase y luego se particularizan en cada objeto. As, en la clase coche se podran definir las propiedades Color, Ancho y Largo , luego al definir un objeto concreto como coche ya se particularizaran estas propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y Largo =3,5 metros. Repasemos a continuacin todos estos conceptos pero ahora desde el punto de vista de algunos de los objetos que nos encontraremos en Excel como WorkSheet (Objeto hoja de clculo) o Range (Objeto casilla o rango de casillas). Un objeto Range est definido por una clase donde se definen sus propiedades, recordemos que una propiedad es una caracterstica, modificable o no, de un objeto. Entre las propiedades de un objeto Range estn Value , que contiene el valor de la casilla , Column y Row que contienen respectivamente la fila y la columna de la casilla, Font que contiene la fuente de los caracteres que muestra la casilla, etc. Como objeto, tambin tiene mtodos, recordemos que los mtodos sirven llevar a cabo una accin sobre un objeto. Por ejemplo el mtodo Activate, hace activa una celda determinada, Clear, borra el contenido de una celda o rango de celdas, Copy, copia el contenido de la celda o rango de celdas en el portapapeles.
Conjuntos. Un conjunto es una coleccin de objetos del mismo tipo, para los que conozcan algn lenguaje de programacin es un array de objetos. Por ejemplo, dentro de un libro de trabajo puede existir ms de una hoja ( WorkSheet), todas las hojas de un libro de trabajo forman un conjunto, el conjunto WorkSheets. Cada elemento individual de un conjunto se referencia por un ndice, de esta forma, la primera, segunda y tercera hoja de un libro de trabajo, se referenciarn por WorkSheets(1), WorkSheets(2) y WorkSheets(3).
Objetos de Objetos.
Es muy habitual que una propiedad de un objeto sea otro objeto. Siguiendo con el coche, una de las propiedades del coche es el motor, y el motor es un objeto con propiedades como cubicaje, caballos, nmero de vlvulas, etc. y mtodos, como aumentar_revoluciones, coger_combustible, mover_pistones, etc. En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range tiene la propiedad Font que es tambin un objeto y Font tiene la propiedad Bold (negrita). Tenga esto muy presente ya que utilizaremos frecuentemente Propiedades de un objeto que sern tambin Objetos. Dicho de otra forma, hay propiedades que devuelven objetos, por ejemplo, la propiedad Range de un objeto WorkSheet devuelve un objeto de tipo Range. Programacin Orientada a Objetos o Programacin Basada en Objetos. Hay una sutil diferencia entre las definiciones del ttulo. Programacin Orientada a Objetos, significa que el programador trabaja con objetos fabricados por l mismo, es decir, el programador es quien implementa las clases para luego crear objetos a partir de ellas. Lo que haremos nosotros, por el momento, ser utilizar objetos ya definidos por la aplicacin Excel (WorkSheets, Range,...) sin implementar ni ninguno de nuevo, por lo que en nuestro caso es ms correcto hablar de programacin basada en objetos. Observe que esta es una de las grandes ventajas de la POO, utilizar objetos definidos por alguien sin tener que conocer nada sobre su implementacin, slo debemos conocer sus propiedades y mtodos y utilizarlos de forma correcta. Bueno, despus de esta extensa pero necesaria introduccin pasemos ya a hacer alguna cosa en Excel. No es necesario que se aprenda lo anterior al pie de la letra y tampoco es necesario que lo comprenda al cien por cien, slo tngalo presente para las definiciones que vienen a continuacin y ver como va asimilando los conceptos de Objeto, propiedades, mtodos, etc. El modelo de objetos de Excel. Ver el modelo de objetos de Excel es una de las primeras cosas que debe hacer al empezar a programar en Excel por medio de VBA. Excel tiene mas de 100 objetos en su modelo, pero no piense que hay que aprendrselos todos. El usuario promedio trabajar con 20 o menos objetos al programar. Para ver una lista de los objetos de Excel, haga lo siguiente: 1. Cierre todos los libros abiertos para que pueda tener un entorno despejado.
2. Abra un libro nuevo. 3. Oprima Alt+F11 para abrir el Editor de Visual Basic. 4. Oprima F1 para invocar a la Ayuda. 5. Introduzca la pregunta, Qu es un objeto? 6. Oprima Entrar. Haga doble clic en el tema Objetos de Microsoft Excel. Se desplegar el diagrama detallado del modelo de objetos, vea la figura 21 .
Figura 21. La ayuda en lnea le permite conocer el modelo de objetos de Excel. 7. Haga clic en la flecha derecha de Worksheets. sta expande el nivel del modelo de objetos, vea figura 22.
Figura 22. Como puede ver, un gran nmero de objetos estn contenidos dentro del objeto Worksheet.
Al observar este modelo, ver figura 22 , podr observar que el objeto Aplication est en la parte superior de la jerarqua porque ste contiene todos los otros objetos de Excel. El siguiente objeto que debe observar en la jerarqua es Workbook, el cual es equivalente a un libro de trabajo o archivo Excel. Una vez familiarizado con el entorno de Excel puede darse cuenta que dentro de un libro hay varias hojas de clculo y que las hojas de clculo, entre otros objetos, contienen rangos. No se sorprenda si ahora ya conoce cuatro de los cinco objetos ms utilizados en Excel en la programacin de VBA. Los cinco objetos ms empleados en Excel Aunque existen ms de 100 objetos en el modelo de objetos de Excel, casi siempre utilizar los cinco objetos siguientes: Aplication ( aplicacin ) Workbook ( libro de trabajo ) Worksheet ( hoja de clculo ) Range ( rango ) Chart ( grfico )
Jerarqua de objetos. Al observar el modelo de objetos se dar cuenta que tiene forma de un grfico por jerarquas. Application est en la parte superior de la jerarqua. Debajo del objeto Application encontrar, entre otros objetos a Workbook. De acuerdo con la terminologa del paradigma de la Programacin Orientada a Objetos , el objeto Workbook esta contenido dentro de Aplication. De la misma manera, el objeto Worksheet est contenido en el objeto Workbook, y as sucesivamente. Contencin significa que los objetos pueden estar dentro de otros objetos. Hacer referencia a los objetos en el cdigo. El concepto de contencin entra en accin cuando usted hace referencia a los objetos en el cdigo. Para calificar completamente al nombre del objeto en el cdigo debe atravesar por toda el camino o ruta de la jerarqua del modelo de objetos, as por ejemplo, para referirse al rango A1 en la Hoja1 del Libro1, debera emplear el siguiente cdigo: Application.Workbooks(Libro1).Worksheets(Hoja1).Range(A1) En realidad se puede omitir la referencia Application en la mayora de los casos ( una excepcin es Application.Inputbox ) Tambin puede hacer referencia al rango A1 por medio del siguiente cdigo: Workbooks(Libro1).Worksheets(Hoja1).Range(A1) No siempre tendr que utilizar el nombre completo del cdigo de un objeto en el cdigo. En algunos casos, como se ha activado una hoja de clculo en el cdigo, lo puede lograr con una referencia ms corta: Range(A1)
Conforme se vaya familiarizando en el uso de los objetos usted aprender que tanto tiene que calificar a los objetos. Para distinguir un objeto de otro objeto con el mismo nombre, es necesario que lo califique. Por ejemplo podra tener dos libros abiertos, cada uno con una hoja de clculo llamada Hoja1. En ste caso debera darles un nombre completo para evitar ambigedades. Application.Workbooks(Libro1).Worksheets(Hoja1).Range(A1) Application.Workbooks(Libro2).Worksheets(Hoja1).Range(A1) Para trabajar con los objetos en el cdigo Cuando se trabaje con objetos en el cdigo, se recomienda hacer algo como lo siguiente: Establecer las propiedades de un objeto. Obtener las propiedades de un objeto Ejecutar los mtodos de un objeto.
Como trabajar con las propiedades Para establecer las propiedades de un objeto, utilice la siguiente sintaxis: Objeto.Nombredelapropiedad = valor Donde: Objeto Nombredelapropiedad Valor es el nombre del objeto. es el nombre de la propiedad que se cambi. se refiere al valor que se le asign a la propiedad.
El nombre del objeto est separado de la propiedad por un punto. Por ejemplo, para establecer la propiedad Value del objeto Range, utilice el siguiente cdigo: Range(A1).Value = 100 Para obtener el valor de las propiedades del objeto es semejante a establecer la propiedad. La sintaxis bsica es: NombreVariable = Objeto.Nombredelapropiedad En esta sintaxis se lee el valor de la propiedad del objeto en una variable u otro contenedor, tal como otra propiedad. Si desea obtener la propiedad Value de un rango, utilice el siguiente cdigo: Dim sngValor As Single sngValor = Range(A1).Value Puede emplear el valor de la propiedad para muchas otras formas. Por ejemplo, puede desplegar dicho valor en un cuadro de mensaje por medio del siguiente cdigo: MsgBox El valor del rango es & Range.(A1).Value
Uso de los mtodos Para implementar los mtodos de un objeto se debe utilizar la siguiente sintaxis: Objeto.Mtodo Cuando ejecute el mtodo de un objeto, utilice un punto para separar el nombre del objeto del nombre del mtodo. Por ejemplo, para ejecutar el mtodo Open de un libro, puede usar el siguiente cdigo: Workbooks(Ejemplo de Macros de Excel).Open Los mtodos tienen argumentos que algunas veces son necesarios y otras, opcionales. Por ejemplo , el siguiente cdigo guarda un libro con el nombre de Seguridad Pblica: ThisWorkbook.SaveAs Filename:= Seguridad Pblica A los mtodos tambin se les conoce o se refieren a ellos como los procedimientos y funciones especficos del objeto. Esto explica el hecho de que algunos mtodos tengan argumentos. Incluso algunos mtodos pueden devolver un valor. Colecciones Una coleccin es un grupo de objetos similares. Workbooks es una coleccin. Worksheets es otra coleccin. Vea el siguiente ejemplo: Application.Workbooks(Libro1).Worksheets(Hoja1).Range(A1) El Libro1 es un elemento de la coleccin Workbooks. Observe que la mayora de las colecciones estn en plural. Tambin puede uno darse cuenta que no existe el objeto Ranges porque una de las cosas que puede hacer con una coleccin es agregarlo y no se pueden agregar ms rangos porque ya estn definidos y limitados por Excel. 1. Para ver algunas de las colecciones disponibles en Excel, siga estos pasos: 2. Restaure la ventana Ayuda de Microsoft Visual Basic 3. Seleccione la ficha Contenido 4. Haga clic en el libro Referencia de Visual Basic en Microsoft Excel para que despliegue sus temas. Bajo la pregunta Qu desea hacer? Escriba objetos de Microsoft Excel 5. En los temas encontrados seleccione Objetos de Microsoft Excel y, en el panel derecho, se desplegar el modelo de objetos de Microsoft Excel. 6. Desplcese a la parte inferior del tema Objetos de Microsoft Excel y ver que el modelo de objetos est codificado por colores. Los elementos en amarillo son objetos y colecciones. Los elementos en azul celeste solamente son objetos El diagrama del modelo de objetos es una herramienta til para entender e identificar las colecciones de Excel.
Mtodo Add Una caracterstica importante de las colecciones es la capacidad de aceptar lo que se les agregue, es decir, agregar es crear nuevos elementos en la coleccin. Para crear un elemento nuevo en una coleccin, utilice el mtodo Add. Por ejemplo, para agregar un libro nuevo, deber usar el siguiente cdigo: Workbooks.Add Este cdigo es equivalente a ir al men Archivo de Excel y agregar un libro nuevo. Para agregar una hoja de clculo nueva en un libro, debe emplear el siguiente cdigo: Worksheets.Add Propiedad Count Las colecciones soportan una propiedad muy til llamada Count. sta almacena el nmero de elementos en una coleccin. Si desea saber cuntas hojas de clculo hay en un libro, debe usar el siguiente cdigo: Dim CuentaLasHojas As Integer CuentaLasHojas = Worksheets.Count Usted podra utilizar sta propiedad cuando est creando una aplicacin que contiene una hoja de clculo para cada da de negocios de la semana hasta que el libro se complete. Si usa la propiedad Count, podra saber si el libro contiene siete hojas de clculo. En este caso podra emplear un cdigo similar a:
Sub CuentaLasHojas() Dim CuentaHojas As Integer Dim Aviso As String CuentaHojas = Worksheets.Count If CuentaHojas <> 7 Then Aviso = El libro tiene & CuentaHojas Aviso = Aviso & . Debe contener 7 hojas de clculo. MsgBox Aviso End If End Sub
Mdulos
Un mdulo se define como una coleccin de procedimientos y declaraciones de VBA que se almacenan juntos como unidad. Existen dos tipos de mdulos; los mdulos estndar y los mdulos de clase. Los mdulos de clase de VBA le permiten construir sus propios objetos, ya que ellos contienen la definicin de un objeto. La mayor parte del trabajo que se realiza en las macros se lleva a cabo en un mdulo estndar ( o simplemente mdulo ). Cuando se graba una macro, automticamente se crear un mdulo, si es que no existe alguno, aunque si lo prefiere puede agregar mdulos adicionales. A Excel y VBA les tiene sin cuidado donde se ubique su procedimiento o procedimientos, en tanto se ubiquen dentro de un libro abierto.
Procedimientos
Un procedimiento Sub es una serie de instrucciones Visual Basic, encerradas entre un par de instrucciones Sub y End Sub, que realizan acciones especficas pero no devuelven ningn valor. Un procedimiento Sub puede aceptar argumentos, como constantes, variables o expresiones que le pasa el procedimiento que ha efectuado la llamada. Si un procedimiento Sub no tiene argumentos, la instruccin Sub debe incluir un par de parntesis vaco. El objetivo de utilizar procedimientos es la antigua frmula del divide y vencers, es decir, con los procedimientos podremos tratar cada problema o tarea de forma ms o menos aislada de forma que construiremos el programa paso a paso evitando tener que resolver o controlar mltiples cosas a la vez. Cada tarea la realizar un procedimiento, si esta tarea implica la ejecucin de otras tareas, cada una se implementar y solucionar en su correspondiente procedimiento de manera que cada uno haga una cosa concreta. As, los diferentes pasos que se deben ejecutar para que un programa haga algo, quedaran bien definidos cada uno en su correspondiente procedimiento, si el programa falla, fallar a partir de un procedimiento y de esta forma podremos localizar el error ms rpidamente. Los procedimientos son tambin un eficaz mecanismo para evitar la repeticin de cdigo en un mismo programa e incluso en diferentes programas. Suponemos que habr intuido que hay muchas tareas que se repiten en casi todos los programas, veremos como los procedimientos que ejecutan estas tareas se pueden incluir en un mdulo de forma que este sea exportable a otros programas y de esta manera ganar tiempo que, como dice el tpico, es precioso.
Definir un procedimiento
Ya lo hemos hecho unas cuantas veces, pero ah va de nuevo.
Sub Nombre_Procedimento()
Sentencias
Sub ProcesoUno
Sentencias.
Call ProcesoDos
Sentencias
End Sub
Las secuencias del procedimiento ProcesoUno se ejecutan hasta llegar a la lnea Call ProcesoDos, entonces se salta al procedimiento ProcesoDos, se ejecutan todas las sentencias de este procedimiento y el programa continua ejecutndose en el procedimiento ProcesoUno a partir de la sentencia que sigue a Call ProcesoDos.
Figura 23. La ventana del explorador de proyectos lleva un registro de los elementos que componen su aplicacin
2. Seleccione Insertar | Procedimiento. Se desplegar el cuadro de dilogo Agregar procedimiento, como se muestra en la figura 24 .
Figura 24. Cuadro de dilogo Agregar procedimiento sirve para crear nuevos procedimientos Sub y Function.
3. Introduzca MiprimerProcedimiento como nombre del procedimiento. En el rea Tipo, asegrese de que est seleccionado el botn de opcin
Procedimiento. Haga clic en Aceptar. Se ha creado un procedimiento nuevo dentro del mdulo, como se muestra en la figura 25.
Figura 25. El procedimiento insertado empieza con la sentencia Public Sub y termina con la instruccin Sub.
4. El punto de insercin ( cursor ) debe estar en la lnea blanca que se encuentra en el procedimiento. Oprima la tecla Tab y teclee lo
siguiente: MsgBox Hola a todos, este es mi primer procedimiento de macros con VBA. Cuando teclee MsBox aparecer un cuadro de dilogo para darle informacin acerca de ste comando. Esta caracterstica se llama Informacin rpida automtica. 5. Oprima Entrar. El procedimiento terminado se muestra en la figura 26. Nota: VBA tiene reglas para la nomenclatura de procedimientos Sub y El primer carcter debe ser una letra. Los nombres pueden contener letras, nmeros y guiones bajos. Los nombres no pueden contener espacios, exclamacin () o los caracteres @, &, $, #. El nmero mximo de caracteres es de 255. puntos, signos de
Figura 26. Este procedimiento solo tiene tres lneas de cdigo o sentencias de VBA.
Figura 27. La nica lnea de cdigo dentro del procedimiento sirvi para desplegar ste mensaje.
Palabras reservadas
Las palabras reservadas o palabras clave son un conjunto bastante amplio de palabras que estn reservadas para el lenguaje de programacin de VBA, esto es, una palabra o un smbolo reconocido como parte del lenguaje de programacin; por ejemplo, una instruccin, un nombre de funcin o un operador. Como stas palabras estn ya reservadas, el usuario no puede hacer uso de ellas para nombrar un procedimiento, funcin, variable, etc. La lista de stas palabras las podemos encontrar con la ayuda del Editor de Visual Basic , vea figura 28. Siga los siguientes pasos para encontrar el tema de palabras clave: 1. Abra un libro nuevo Se abrir la ventana del Editor.
2. Seleccione Herramientas | Macro | Editor de Visual Basic . 6. Seleccione Ayuda | Ayuda de Microsoft Visual Basic F1
3. Seleccione la ficha de Contenido. De doble clic al icono del libro Referencia del lenguaje Visual Basic. Aparece otro subconjunto de libros, entre ellos esta el de palabras clave. De doble clic sobre el icono del libro palabras clave.
Figura 28. Con la ayuda de contenido del Editor de Visual Basic para Aplicaciones podemos conocer la palabras clave o palabras reservadas del lenguaje VBA.
En esta seccin veremos algunos conceptos tiles de la programacin estructurada que nos conviene conocer para escribir con mayor eficiencia programas de macros de Visual Basic para Aplicaciones. La programacin estructurada es: Un conjunto de mtodos y tcnicas para disear y escribir programas utilizando el mtodo cientfico y no solamente el mtodo de ensayo y error. La programacin es una actividad mental compleja que se divide en varias etapas y cuya finalidad es comprender con claridad el problema que va a resolverse o simularse en la computadora, y entender con detalle cual ser el procedimiento mediante el cual la computadora obtendr la solucin esperada
Variable
Una variable es un lugar de almacenamiento con nombre que puede contener cierto tipo de datos que puede ser modificado durante la ejecucin del programa. Cada variable tiene un nombre nico que la identifica dentro de su nivel de mbito. Puede especificar un tipo de datos o no. Nombres de variable deben comenzar con un carcter alfabtico, deben ser nicos dentro del mismo mbito, no deben contener ms de 255 caracteres y no pueden contener un punto o carcter de declaracin de tipo. Con Visual Basic para Aplicaciones es posible determinar el tipo de dato que puede contener una variable en particular. Para ello cuenta con una instruccin que reserva el espacio en memoria para la variable y adems, si as se desea , puede definir el tipo de dato que contendr. Esta instruccin es Dim, que permite reservar el espacio en memoria para una variable si cumple con la sintaxis:
Dim
nombre_variable
Variable = Valor
El valor puede ser un texto (que debe ir entre comillas), un nmero, una frmula, etc. Por ejemplo: Nombre = "Escriba su nombre" Cuenta = 12 Inters = 10000 * 24 * 30 / 36500 La instruccin Dim, adems de reservar el lugar en memoria para la variable, permite identificar el tipo de dato que contendr. Adems sirve para validar el ingreso de dato por parte del usuario. La sintaxis es la siguiente: Dim nombre_variable As Tipo_de_dato
Tipo de dato
El tipo de dato que define a una variable es una palabra reservada e identifica el tamao que tendr la variable en la memoria, limitando adems el ingreso del dato por parte del usuario o del programa. La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamao de almacenamiento y el intervalo. Algunos tipos de variables pueden ser identificados utilizando signos al final del nombre de la variable. Esto significa que la instruccin Dim puede escribirse sin incluir As tipo - de - dato. Por ejemplo, puede declarar una variable entera utilizando cualquiera de las dos siguientes opciones:
Dim Var_Objeto As Objeto Por Ejemplo Dim R As Range Dim Hoja As WorkSheet
Tipo de datos
Byte Boolean Integer Long (entero largo) Single (coma flotante/ precisin simple) Double (coma flotante/ precisin doble)
Tamao de almacenamiento
1 byte 2 bytes 2 bytes 4 bytes 0 a 255 True o False
Intervalo
4 bytes
-3,402823E38 a 1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos -1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos -922.337.203.685.477,5808 a 922.337.203.685.477,5807 +/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo decimal; el nmero ms pequeo distinto de cero es +/-0,0000000000000000000000000001 1 de enero de 100 a 31 de diciembre de 9999 Cualquier referencia a tipo Object Desde 0 a 2.000 millones
8 bytes
8 bytes
14 bytes
Date Object String (longitud variable) String (longitud fija) Variant (con nmeros) Variant (con caracteres) Definido por el usuario (utilizando Type)
16 bytes
Cualquier valor numrico hasta el intervalo de un tipo Double El mismo intervalo que para un tipo String de longitud variable El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.
Veamos a continuacin un ejemplo de cmo utilizar este tipo de variables, Ejemplo de utilizacin de variables:
Algo muy simple, llenar el rango de A1 a B10 con la palabra "Hola" y despus poner negrita, observe como se asigna una variable objeto al objeto y luego como se trabaja con esa variable de la misma forma que trabajara directamente sobre el objeto.
1: Sub obj() 2: Dim R As Range 3: Set R = ActiveSheet.Range("A10:B15") 4: R.Value = "Hola" 5: R.Font.Bold = True 6: End Sub
Operadores y expresiones Las expresiones son frmulas construidas con combinaciones de constantes, variables, operadores, operandos y nombres de funciones especiales. Cada expresin al evaluarse toma un valor que se determina tomando en cuenta los tipos de las variables y constantes implicadas adems de la ejecucin de las operaciones indicadas por los operadores
Prioridad de los operadores Cuando hay varias operaciones en una misma expresin, cada parte de la misma se evala y se resuelve en un orden predeterminado segn la prioridad de los operadores. Cuando hay expresiones que contienen operadores de ms de una categora, se resuelven antes las que tienen operadores aritmticos, a continuacin las que tienen operadores de comparacin y por ltimo las de operadores lgicos. Los operadores de comparacin tienen todos la misma prioridad; es decir, se evalan de izquierda a derecha, en el orden en que aparecen. Los operadores lgicos y aritmticos se evalan en el siguiente orden de prioridad:
Aritmticos Negacin () Multiplicacin y divisin (*, /) Divisin de enteros (\) Mdulo aritmtico (Mod) Adicin y substraccin (+, ) Concatenacin de cadenas (&)
Comparacin Not And Or Xor Eqv Imp Desigualdad (<>) Menor que (<) Mayor que (>) Menor o igual que (<=) Mayor o igual que (>=) Like Is
Lgicos
Cuando hay multiplicacin y divisin en la misma expresin, cada operacin se evala a medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan adiciones y substracciones en una misma expresin, cada operacin se evala tal como aparecen de izquierda a derecha. Es posible usar parntesis para saltar el orden de preferencia y forzar que algunas partes de una expresin se evalen antes que otras. Las operaciones entre parntesis se realizan antes que las de fuera. Sin embargo, dentro de los parntesis, la precedencia de los operadores se mantiene. El operador de concatenacin de cadenas ( &) no es realmente un operador aritmtico, pero en orden de prioridad se encuentra a continuacin de todos los operadores aritmticos y antes que todos los operadores de comparacin. Las tablas que aparecen a continuacin son un resumen de los operadores de Visual Basic, se presentan con ejemplos para que el lector pueda verificarlos y as conocer stos operadores:
Se utiliza para elevar un Dim MiValor nmero a la potencia MiValor = 2 ^ 2 ' Devuelve 4. del exponente MiValor = 3 ^ 3 ^ 3 ' Devuelve 19683. MiValor = (-5) ^ 3 ' Devuelve -125. Se utiliza para Dim MiValor multiplicar dos nmeros MiValor = 2 * 2 ' Devuelve 4. MiValor = 459.35 * 334.90 ' Devuelve Se utiliza para dividir dos nmeros y obtener un resultado de signo flotante. Se utiliza para dividir dos nmeros y obtener un resultado entero. Divide dos nmeros y devuelve slo el resto. Dim MiValor MiValor = 10 / 4 MiValor = 10 / 3 3.333333. 153836.315.
Dim MiValor MiValor = 11 \ 4 ' Devuelve 2. MiValor = 9 \ 3 ' Devuelve 3. MiValor = 100 \ 3 ' Devuelve 33. Dim MiResultado MiResultado = 10 Mod 5 Devuelve 0. MiResultado = 10 Mod 3 Devuelve 1. MiResultado = 12 Mod 4.3 Devuelve 0. MiResultado = 12.6 Mod 5 Devuelve 3. ' ' ' '
+ (Suma)
Dim MiNmero, Var1, Var2 MiNmero = 2 + 2 ' Devuelve 4. MiNmero = 4257.04 + 98112 ' Devuelve 102369.04. Var1 = "34": Var2 = 6 ' Inicializa variables mezcladas. MiNmero = Var1 + Var2 ' Devuelve 40. Var1 = "34": Var2 = "6" ' Inicializa las variables con cadenas. MiNmero = Var1 + Var2 ' Devuelve "346" ' (concatenacin de cadenas).
(Resta)
Se utiliza para hallar la diferencia entre dos nmeros o para indicar el valor negativo de una expresin numrica.
Dim MiResultado MiResultado = 4 - 2 ' Devuelve 2. MiResultado = 459.35 - 334.90 ' Devuelve 124.45.
Tipo de Operadores
Operador True si expresin1 < expresin2 expresin1 <= expresin2 expresin1 > expresin2 expresin1 >= expresin2 expresin1 = expresin2
Operadores
False si expresin1 >= expresin2 expresin1 > expresin2, expresin1 <= expresin2 expresin1 < expresin2 expresin1 <> expresin2 Null si expresin1 o expresin2 = Null expresin1 o expresin2 = Null expresin1 o expresin2 = Null expresin1 o expresin2 = Null expresin1 o expresin2 = Null
< (Menor que) , <= (Menor o igual que) > (Mayor que) >= (Mayor o igual que) = (Igual a)
Operadores Uso
Se utiliza para forzar la concatenacin de las cadenas de dos expresiones
Ejemplos
Dim MyStr MyStr = "Hola" & " mundo" ' Devuelve "Hola mundo". MyStr = "Prueba " & 123 & " Prueba" ' Devuelve "Prueba 123 Prueba".
se utiliza el operador + para sumar nmeros. El operador + puede utilizarse tambin para concatenar cadenas de caracteres pero, para evitar ambigedades, es mejor utilizar para ello el operador &.
Dim MiNmero, Var1, Var2 MiNmero = 2 + 2 ' Devuelve 4. MiNmero = 4257.04 + 98112 ' Devuelve 102369.04. Var1 = "34": Var2 = 6 ' Inicializa variables mezcladas. MiNmero = Var1 + Var2 ' Devuelve 40. Var1 = "34": Var2 = "6" ' Inicializa las variables con cadenas. MiNmero = Var1 + Var2 ' Devuelve "346" ' (concatenacin de cadenas).
Operadores
Operad or And
Uso
Se utiliza para efectuar una conjuncin lgica de dos expresiones
Ejemplos
Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa las variables. MiPrueba = A > B And B > C ' Devuelve True. MiPrueba = B > A And B > C ' Devuelve False. MiPrueba = A > B And B > D ' Devuelve Null. MiPrueba = A And B ' Devuelve 8 (comparacin bit a bit). Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa variable. MiPrueba = A > B Eqv B > C ' Devuelve True. MiPrueba = B > A Eqv B > C ' Devuelve False. MiPrueba = A > B Eqv B > D ' Devuelve Null. MiPrueba = A Eqv B ' Devuelve -3 (comparacin bit por bit). Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa variables. MiPrueba = A > B Imp B > C ' Devuelve True. MiPrueba = A > B Imp C > B ' Devuelve False. MiPrueba = B > A Imp C > B ' Devuelve True. MiPrueba = B > A Imp C > D ' Devuelve True. MiPrueba = C > D Imp B > A ' Devuelve Null. MiPrueba = B Imp A ' Devuelve -1 (comparacin bit por bit). Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa variables. MiPrueba = Not(A > B) ' Devuelve False. MiPrueba = Not(B > A) ' Devuelve True. MiPrueba = Not(C > D) ' DevuelveNull MiPrueba = Not A ' Devuelve -11 (comparacin bit por bit) Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa variables. MiPrueba = A > B Or B > C ' Devuelve True. MiPrueba = B > A Or B > C ' Devuelve True. MiPrueba = A > B Or B > D ' Devuelve True. MiPrueba = B > D Or B > A ' Devuelve Null. MiPrueba = A Or B ' Devuelve 10 (comparacin bit por bit). Dim A, B, C, D, MiPrueba A = 10: B = 8: C = 6: D = Null ' Inicializa variables. MiPrueba = A > B Xor B > C ' Devuelve False. MiPrueba = B > A Xor B > C ' Devuelve True. MiPrueba = B > A Xor C > B ' Devuelve False. MiPrueba = B > D Xor A > B ' Devuelve Null. MiPrueba = A Xor B ' Devuelve 2 (comparacin bit a bit).
Eqv
Imp
Not
Or
Xor
La Funcin InputBox.
Esta funcin es muy utilizada para introducir datos y muestra un cuadro de dilogo para que el usuario pueda teclear datos. Cuando se pulsa sobre Aceptar, los datos introducidos pasan a la variable a la que se ha igualado la funcin. Vea la lnea siguiente. Texto = InputBox("Introduzca el texto", "Entrada de datos"). Si en el cuadro que muestra InputBox pulsa sobre el botn Aceptar, los datos tecleados se guardarn el la variable Texto.
Sintaxis de InputBox. InputBox(Mensaje, Ttulo, Valor por defecto, Posicin horizontal, Posicin
Vertical, Archivo ayuda, Nmero de contexto para la ayuda). Mensaje : Es el mensaje que se muestra el cuadro. Si desea poner ms de una lnea ponga Chr(13) para cada nueva lnea, vea el ejemplo siguiente. Ttulo : Es el ttulo para el cuadro de InputBox. Es un parmetro opcional. Valor por defecto: Es el valor que mostrar por defecto el cuadro donde el usuario entra el valor. Es un parmetro opcional. Posicin Horizontal: La posicin X de la pantalla donde se mostrar el cuadro, concretamente es la posicin para la parte izquierda. Si se omite el cuadro se presenta horizontalmente centrado a la pantalla. Posicin Vertical: La posicin Y de la pantalla donde se mostrar el cuadro, concretamente es la posicin para la parte superior. Si se omite el cuadro se presenta verticalmente centrado a la pantalla. Archivo Ayuda: Es el archivo que contiene la ayuda para el cuadro. Es un parmetro opcional. Nmero de contexto para la ayuda: Nmero asignado que corresponde al identificador del archivo de ayuda, sirve para localizar el texto que se debe mostrar. Si se especifica este parmetro, debe especificarse obligatoriamente el parmetro Archivo Ayuda.
' Chr(13) sirve para que el mensaje se muestre en dos Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", ActiveSheet.Range("A1").Value = Texto
End Sub
Option Explicit Sub IntroducirValorCelda() Dim Celda As String Dim Texto As String
Celda = InputBox("En que celda quiere introducir el valor", "De la referencia") Texto = InputBox("Dame un texto " & Chr(13) & "Para la celda " & Celda , "Introduce dato") ActiveSheet.Range(Celda).Value = Texto
End Sub
dato " & Chr(13) & "Para la celda A1", "Entrada de datos") ActiveSheet.Range("A1").Value = Dado
Observe que el programa no hace lo que se pretenda que hiciera. Efectivamente, Dato y Dado son dos variables diferentes, como no se ha declarado ninguna y ni se ha utilizado Option Explicit Visual Basic no da ningn tipo de error y ejecuta el programa. Pruebe el siguiente procedimiento e intente ejecutarlo.
Option Explicit Sub IntroduceValorConExplicit() Dim Dato As String Dato = InputBox("Introducir un dato " & Chr(13) & "Para la casilla A1",
"Entrada de dato") ActiveSheet.Range("A1").Value = Dado
End Sub
Observe que el programa no se ejecuta, al poner Option Explicit, as forzamos a que se declaren todas las variables. Visual Basic detecta que la variable Dado no ha sido declarada y as lo indica mostrando Error, entonces es cuando es ms fcil darnos cuenta del error que hemos cometido al teclear y cambiamos Dado por Dato. Ahora imagine que el error se produce en un programa de cientos de lneas que necesita otras tantas variables.
La funcin MsgBox.
Esta funcin muestra un mensaje en un cuadro de dilogo hasta que el usuario pulse un botn. La funcin devuelve un dato tipo Integer en funcin del botn pulsado por el usuario. A la hora de invocar est funcin, s e permiten diferentes tipos de botones.
Mensaje : Obligatorio, es el mensaje que se muestra dentro del cuadro de dilogo. Botones : Opcional. Es un nmero o una suma de nmeros o constantes (vea tabla Valores para botones e Iconos), que sirve para mostrar determinados botones e iconos dentro del cuadro de dilogo. Si se omite este argumento asume valor 0 que corresponde a un nico Botn OK. Ttulo : Opcional. Es el texto que se mostrar en la barra del ttulo del cuadro de dilogo. Archivo de Ayuda : Opcional. Si ha asignado un texto de ayuda al cuadro de dilogo, aqu debe especificar el nombre del archivo de ayuda donde est el texto. Context: Opcional. Es el nmero que sirve para identificar el texto al tema de ayuda correspondiente que estar contenido en el archivo especificado en el parmetro Archivo de Ayuda.
End If
.....
End Sub
Constante
vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel VbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal vbMsgBoxHelpButton VbMsgBoxSetForegrou nd vbMsgBoxRight vbMsgBoxRtlReading
Valor
0 1 2 3 4 5 16 32 48 64 0 256 512 768 0 4096 16384 65536
Descripcin
Slo el botn Aceptar (predeterminado) Los botones Aceptar y Cancelar Los botones Anular, Reintentar e Ignorar Los botones S, No y Cancelar. Los botones S y No Los botones Reintentar y Cancelar Mensaje crtico Consulta de advertencia Mensaje de advertencia Mensaje de informacin El primer botn es el predeterminado (predeterminado) El segundo botn es el predeterminado El tercer botn es el predeterminado El cuarto botn es el predeterminado Cuadro de mensajes de aplicacin modal (predeterminado) Cuadro de mensajes modal del sistema Agrega el botn Ayuda al cuadro de mensaje Especifica la ventana del cuadro de mensaje como la ventana de primer plano El texto se alinea a la derecha Especifica que el texto debe aparecer para leer de derecha a izquierda en sistemas hebreos y rabes
524288 104857 6
Aplicaciones. Por tanto, el nombre de las mismas puede utilizarse en cualquier lugar del cdigo en vez de sus valores reales.
Los valores que puede devolver la funcin MsgBox en funcin del botn que pulse el usuario se muestran en la tabla siguiente.
Tabla de valores que puede devolver MsgBox. (Tabla copiada del archivo de ayuda de Microsoft
VBA)
Constant e
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo
Valo r
1 2 3 4 5 6 7
Descripcin
Botn Aceptar presionado Botn Cancelar presionado Botn Anular presionado Botn Reintentar presionado Botn Ignorar presionado Botn S presionado Botn No presionado
Algunas veces puede que le interese simplemente desplegar un cuadro MsgBox para mostrar un mensaje al usuario sin que se requiera recoger ningn valor. En este caso puede optar por la forma siguiente:
usuaria,
Ha
acabado
el
proceso",
Lo que no puede hacer porque Visual Basic dara error es poner la primera forma sin igualarla a ninguna variable. Por ejemplo, la expresin siguiente es incorrecta,
Un programa (macro de Excel en Visual Basic para Aplicaciones) puede ser escrito utilizando nicamente tres tipos de estructuras de control de secuencia:
Secuencial:
Public Sub ConozcoSuNombre() Dim suNombre As String Dim suMensaje As Variant End Sub
Aqu podemos ver que se definen dos variables, una de tipo cadena o String y otra de tipo Variant. La funcin InputBox servir para introducir por teclado el valor de la variable suNombre de tipo String, y la funcin MsgBox desplegar el mensaje. Note que & es el operador de concatenacin.
Selectiva: Aqu tenemos tres casos; la selectiva simple, doble y mltiple. Selectiva Simple:
Cuando el programa llega a la instruccin Si Condicin Entonces , se evala la condicin, si esta se cumple (es cierta), se ejecutan todas las sentencias que estn encerradas en el bloque, si no se cumple la condicin, se saltan estas sentencias. Esta estructura en Visual Basic tiene la sintaxis siguiente
If condicin Then
Sentncia1 Sentncia2 ... SentnciaN
End If
Sub SelectivaSimple()
' Poner las casillas donde se guardan los valores 0. ActiveSheet.Range("A1").Value = 0 ActiveSheet.Range("A2").Value = 0 ActiveSheet.Range("A3").Value = 0 ActiveSheet.Range("A1").Value = Val(InputBox("Entrar el precio", "Entrar")) ' Si el valor de la casilla A1 es mayor que 1000, entonces, pedir descuento If ActiveSheet.Range("A1").Value > 1000 Then ActiveSheet.Range("A2").Value = Val(InputBox("Entrar Descuento", "Entrar"))
Ejemplo 2 de condicional simple con variables Sub SelectivaSimpleConVariables() Dim Precio As Integer Dim Descuento As Integer
Precio = 0 Descuento = 0 Precio = Val(InputBox("Entrar el precio", "Entrar")) ' Si el valor de la variable precio es mayor que 1000, entonces, pedir descuento If Precio > 1000 Then Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
End If
End Sub
Selectiva Doble:
En Visual Basic la instruccin Si Condicin Entonces ... Sino ... Fin Si se expresa con las instrucciones siguientes.
If Condicin Then
Sentncia1 Sentncia2 ... SentnciaN Sentncia1 Sentncia2 ... SentenciaN
Else
End If
Ejemplo 1 de selectiva doble if ... Then ... Else ... End If.
Entrar una cantidad que representa el precio de algo por el teclado con la instruccin InputBox y guardarlo en la celda A10 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A10) es superior a 5000, se aplica un descuento del 15% sino se aplica un descuento del 8%, el descuento se guarda en la casilla A11 de la hoja activa. Colocar en A12, el total descuento y en A13 el total menos el descuento.
Precio = 0 Precio = Val(InputBox("Introduzca el precio", "Entrar")) ' Si el valor de la variable precio es mayor que 5000, entonces, aplicar descuento del 15% If Precio > 5000 Then Descuento = Precio * (15 / 100) ActiveSheet.Range("A11").Value =15% Else ' Sino Aplicar descuento del 5% Descuento = Precio * (8/ 100) ActiveSheet.Range("A11").Value = 8%
End If
End Sub
Selectiva Mltiple:
En Visual Basic la instruccin Caso ... hacer se expresa con las instrucciones siguientes; . Select Case y tiene la sintaxis siguiente:
Select Case Expresin Case valores : Instrucciones. Case valores : Instrucciones. .... Case valores: Instrucciones. Case Else Instrucciones en caso que no sean ninguno de los valores anteriores. End Select
Sub Seleccion_MultipleUno() Dim Operador As String Dim Valor1 As Single, Valor2 As Single, Total As Single Valor1 = ActiveSheet.Range("A1").Value Valor2 = ActiveSheet.Range("B1").Value Operador = ActiveSheet.Range("C1").Value Select Case Operador Case "+" Total = Valor1 + Valor2 Case "-" Total = Valor1 - Valor2 Case "*" Total = Valor1 * Valor2 Case "/" Total = Valor1 / Valor2 Case Else Total = 0 End Select ActiveSheet.Range("D1").Value = Total End Sub
Sub Selectiva_multipleDos() Dim Examen1 As Integer, Examen2 As Integer, Examen3 As Integer Dim Promedio As Single Examen1 = Val(InputBox("De calificacin 1er. examen", "calificacin")) Examen2 = Val(InputBox("De calificacin 2do. examen", "calificacion")) Examen3 = Val(InputBox("De calificacin 3er. examen", "calificacion")) Promedio = (Examen1 + Examen2 + Examen3) / 3.0 ActiveSheet.Range("E1").Value = Examen1 ActiveSheet.Range("E2").Value = Examen2 ActiveSheet.Range("E3").Value = Examen3 ActiveSheet.Range("E4").Value = Promedio Select Case Promedio Case 0 To 2 ActiveSheet.Range("E5").Value = "Muy deficiente" Case 3 ActiveSheet.Range("E5").Value = "Deficiente" Case 4 ActiveSheet.Range("E5").Value = "Insuficiente" Case 5 ActiveSheet.Range("E5").Value = "Suficiente" Case 6 ActiveSheet.Range("E5").Value = "Bien" Case 7 To 8 ActiveSheet.Range("E5").Value = "Notable" Case >8 ActiveSheet.Range("E5").Value = "Sobresaliente" End Select End Sub
Repetitivas: Hay tres casos particulares, el ciclo while , el repeat y el for. Repetitiva (ciclo while):
Esta estructura repetitiva est controlada por una expresin lgica, la repeticin del bloque de sentencias depender de si se va cumpliendo la condicin de la expresin lgica. En Visual Basic la instruccin Mientras ... hacer se expresa con las instrucciones siguientes; . Do ... While y tiene la sintaxis siguiente:
Loop
Sub EjemploUnoDoWhile() Dim Nombre As String Dim Ciudad As String Dim Edad As Integer Dim fecha As Date Activar hoja1 WorkSheets("Hoja1").Activate Activar celda A2 ActiveSheet.Range("A2").Activate Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre") Mientras la variable Nombre sea diferente a cadena vaca Do While Nombre <> "" Ciudad = InputBox("Entre la Ciudad : ", "Ciudad") Edad = Val(InputBox("Entre la Edad : ", "Edad")) Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha")) Copiar los datos en las casillas correspondientes With ActiveCell .Value = Nombre .Offset(0,1).Value = Ciudad .Offset(0,2).Value = Edad .Offset(0,3).Value = fecha End With Hacer activa la celda de la fila siguiente a la actual ActiveCell.Offset(1,0).Activate Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre") Loop End Sub
Sub EjemploDosDoWhile() . Activar hoja1 WorkSheets("Hoja1").Activate Activar casilla A2 ActiveSheet.Range("A1").Activate Mientras la celda activa no est vaca Do While Not IsEmpty(ActiveCell) Hacer activa la celda situada una fila por debajo de la actual ActiveCell.Offset(1,0).Activate Loop End Sub
Sub EjemploTresDoWhile() Dim Dim Dim Dim Nombre As String Ciudad As String Edad As Integer fecha As Date
WorkSheets("Hoja1").Activate ActiveSheet.Range("A1").Activate Buscar la primera celda vaca de la columna A y convertirla en activa Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1,0).Activate Loop Nombre = InputBox("Introduzca el Nombre (Return para Terminar) : ", "Nombre") Mientras la variable Nombre sea diferente a cadena vaca Do While Nombre <> "" Ciudad = InputBox("Introduzca la Ciudad : ", "Ciudad") Edad = Val(InputBox("Introduzca la Edad : ", "Edad")) Fecha=Cdate(InputBox("Introduzca la Fecha : ", "Fecha")) With ActiveCell .Value = Nombre .Offset(0,1).Value = Ciudad .Offset(0,2).Value = Edad .Offset(0,3).value = fecha End With ActiveCell.Offset(1,0).Activate Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre") Loop End Sub
El funcionamiento de esta estructura repetitiva es similar a la anterior salvo que la condicin se evala al final, la inmediata consecuencia de esto es que las instrucciones del cuerpo del bucle se ejecutaran al menos una vez . En Visual Basic la instruccin Repetir .. hasta se expresa con las instrucciones siguientes; . Do ... Loop Until y tiene la sintaxis siguiente:
Sub EjemploUnoDoLoopUntil() Dim Nombre As String Dim Ciudad As String Dim Edad As Integer Dim fecha As Date WorkSheets("Hoja1").Activate ActiveSheet.Range("A1").Activate Buscar la primera celda vaca de la columna A y convertirla en activa Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1,0).Activate Loop Do Nombre = InputBox("Introduzca el Nombre (Return para Terminar) : ", "Nombre") Ciudad = InputBox("Introduzca la Ciudad : ", "Ciudad") Edad = Val(InputBox("Introduzca la Edad : ", "Edad")) Fecha=Cdate(InputBox("Introduzca la Fecha : ", "Fecha")) With ActiveCell .Value = Nombre .Offset(0,1).Value = Ciudad .Offset(0,2).Value = Edad .Offset(0,3).value = fecha End With ActiveCell.Offset(1,0).Activate
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")
Hasta que Mas_Datos sea igual a vbNo Loop Until Mas_Datos=vbNo End Sub
Sub EjemploUnoDoLoopWhile() Dim Nombre As String Dim Ciudad As String Dim Edad As Integer Dim fecha As Date WorkSheets("Hoja1").Activate ActiveSheet.Range("A1").Activate Buscar la primera celda vaca de la columna A y convertirla en activa Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1,0).Activate Loop Do Nombre = InputBox("Introduzca el Nombre (Return para Terminar) : ", "Nombre") Ciudad = InputBox("Introduzca la Ciudad : ", "Ciudad") Edad = Val(InputBox("Introduzca la Edad : ", "Edad")) Fecha=Cdate(InputBox("Introduzca la Fecha : ", "Fecha")) With ActiveCell .Value = Nombre .Offset(0,1).Value = Ciudad .Offset(0,2).Value = Edad .Offset(0,3).value = fecha End With ActiveCell.Offset(1,0).Activate Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos") Mientras Mas_Datos = vbYes Loop While Mas_Datos = vbYes End Sub
Esta estructura sirve para repetir la ejecucin de una sentencia o bloque de sentencias, un nmero definido de veces. La estructura es la siguiente:
FinPara
Var es una variable que la primera vez que se entra en el bucle se iguala a vi (valor inicial), las sentencias del bucle se ejecutan hasta que Var llega al vf (valor final) cada vez que se ejecutan el bloque de instrucciones se incrementa segn el valor de inca (incremento). En Visual Basic para Excel la estructura Para se implementa con la instruccin For ... Next y tiene la siguiente sintaxis;
Ejemplo 1 de la estructura repetitiva For .. to .. Next Esta es una estructura muy utilizada, aqu veremos de ejemplo muy sencillo de un programa que usa esta estructura para repetir el sonido de campana un numero determinado de veces. Sub EjemploUnoFor() Dim iContador As Integer For iContdor = 1 To 5 Beep Next End Sub
Ejemplo 2 de la estructura repetitiva For .. to .. Next Calcula cuanto dinero tendr una persona despus de un nmero de aos determinado. En este ejemplo como en el anterior el incremento o step es de 1 . Sub EjemploDosFor() Dim iNumeroDeAos As Integer Dim cAhorros As Currency Dim iContador As Integer cAhorros = InputBox("Introduzca la cantidad que va a depositar en su cuenta:") iNumeroDeAos = InputBox("Introduzca el nmero de aos que quiere ahorrar su dinero: ") For iContador = 1 To iNumeroDeAos cAhorros = cAhorros * 1.1 Next MsgBox "En " & iNumeroDeAos & " aos tendr " & _ Format(cAhorros, "0.00") & " pesos." End Sub
Ejemplo 3 de estructura repetitiva For.. to ..Next con uso de Step Una operacin bastante habitual cuando se trabaja con Excel es el recorrido de rangos de celdas para llenarlas con valores, checar su contenido, etc. Las estructuras repetitivas son aplicadas para recorrer grupos de celdas o rangos. Vea como se utilizan las propiedades Cells
Propiedad Cells. Esta propiedad, sirve para referenciar una celda o un rango de celdas segn coordenadas de fila y columna. Llenar el rango de las casillas A1..A5 con valores pares consecutivos empezando por el 2. Sub EjemploTresFor()
Dim Fila As Integer Dim i As Integer Fila = 1 For i=2 To 10 Step 2 ActiveSheet.Cells(Fila,1).Value = i Fila = Fila+1 Next i End Sub
Ejemplo 4 de estructura repetitiva For.. to ..Next con uso de Step Llenar un rango de filas, empezando por una celda, que se debe especificar desde teclado, con una serie de 10 valores consecutivos comenzando por el 10 y decrementndose hasta llegar a el 1 con el uso de Step -1.
Sub EjemploCuatroFor() Dim CeldaInicial As String Dim i As Integer Dim Fila As Integer, Columna As Integer CeldaInicial = InputBox("Introducir la celda Inicial : ", "Casilla Inicial") ActiveSheet.Range(CeldaInicial).Activate Coger el valor de fila de la celda activa sobre la variable Fila Fila = ActiveCell.Row Coger el valor de columna de la celda activa sobre la variable Fila Columna = ActiveCell.Column For i = 10 To 1 Step -1 ActiveSheet.Cells(Fila, Columna).Value = i Fila = Fila + 1 Next i End Sub
Ejemplo 2 de la estructura repetitiva For Each Entrar valores para las celdas del rango A1:B10 de la hoja Activa. Sub Ejemplodosdeforheach() Dim R As Range Para cada celda del rango A1:B10 de la hoja activa For Each R in ActiveSheet.Range("A1:B10") R.Value = InputBox("Entrar valor para la celda " & R.Address, "Entrada de valores") Next End Sub Nota: Observe que se ha declarado una variable tipo Range, este tipo de datos, como
puede imaginar y ha visto en el ejemplo sirve para guardar Rangos de una o ms casillas, estas variables pueden luego utilizar todas las propiedades y mtodos propios de los Objetos Range. Tenga en cuenta que la asignacin de las varaibles que sirven para guardar o referenciar objetos (Range, WorkSheet, etc.) deben inicializarse muchas veces a travs de la instruccin SET.
La insercin de cdigo en una macro existente es una de las operaciones ms comunes que se pueden realizar con el Editor de Visual Basic ya que permite trabajar fcilmente si usted ya esta familiarizado con Microsoft Word puede utilizar las teclas de navegacin para ubicar texto de cdigo y copiar y pegar. Teclas de Navegacin Para ir a
Principio de lnea Fin de lnea Principio de mdulo Fin de mdulo Siguiente Palabra Palabra Anterior Procedimiento siguiente Procedimiento anterior
Copiar cdigo de ejemplo de la ayuda A veces puede desear copiar un ejemplo til de la Ayuda de Visual Basic. Mientras que muchos ejemplos necesitan mucho cdigo para funcionar correctamente, algunos ejemplos son tiles para ver cmo se comporta un procedimiento particular en una tcnica de flujo de control. Copiar cdigo de ejemplo de la Ayuda a la aplicacin 1. Utilice Ayuda para mostrar el tema cuyo ejemplo desea utilizar. Por ejemplo la ayuda sobre el mtodo SaveAs del objeto WorkBook. 2. Seleccione la parte del cdigo que desea copiar oprimiendo el botn derecho del ratn , ver figura 29 . Tambin si lo prefiere puede Seleccionar todo el men contextual oprimiendo el botn derecho del ratn. 3. Elija Copiar del men contextual.
Figura 29. Muestra la seleccin del cdigo que se desea probar en la ventana de ayuda de Microsoft Visual Basic.
4. Alterne a la ventana Cdigo del Editor de Visual Basic y coloque el puntero del mouse donde desea insertar el cdigo. Se recomienda crear un nuevo procedimiento para alojar dicho cdigo con el comando Insertar | Procedimiento... , ver figura 30
5. Ubique el punto de insercin dentro del procedimiento vaci recin creado y haga clic con el botn secundario del mouse de nuevo y elija Pegar para insertar el ejemplo de cdigo en la ventana Cdigo , ver figura 31.
Figura 31. Cdigo insertado dentro del procedimiento existente para ser probado. Nota: Tambin puede presionar CTRL+C para copiar un ejemplo seleccionado en la
ventana Ayuda. Presione CTRL+V para pegar el ejemplo en la ventana Cdigo.
2. FUNCIONES PERSONALIZADAS
2.1. CONCEPTO DE FUNCIN DEFINIDA POR EL USUARIO (FDU)
Funciones. Una funcin o funcin definida por el usuario es lo mismo que un procedimiento con la diferencia de que este devuelve un valor al procedimiento o funcin que lo llama. Vea el siguiente ejemplo, de una funcin que suma dos nmeros y devuelve el resultado. Ejemplo uno de Funcin Funcin que devuelve la suma de dos valores que se le pasan como parmetros. Observe las diferentes formas en como se llama la funcin. Sub EjemploUnoFuncion() Dim x As Integer Dim n1 As Integer, n2 As Integer x = Suma(5, 5) MsgBox "x=Suma(5,5): " & x n1 = Val(InputBox("De un nmero n1: ", "Entrada")) n2 = Val(InputBox("De otro nmero n2 : ", "Entrada")) x = Suma(n1, n2) MsgBox "x=Suma(n1,n2): " & x ActiveCell.Value = Suma(ActiveSheet.Range("A1").Value, ActiveSheet.Range("A2").Value) MsgBox "x=Suma(A1,A2): " & ActiveCell.Value x = Suma(5, 4) + Suma(n1, n2) MsgBox "x=Suma(5,3) + Suma(n1,n2): " & x End Sub
Function Suma(V1 As Integer, V2 As Integer) As Integer Dim Total As Integer Total = V1 + V2 Suma = Total End Function
Observe la sintaxis de la cabecera de funcin del apartado anterior: Function Suma(V1 As Integer, V2 As Integer) As Integer
VBA ofrece al usuario funciones muy potentes. Efectivamente, VBA ofrece una gran cantidad de funciones integradas en las que, adems de las funciones matemticas que son las ms comunes, se incluyen tambin funciones para el procesamiento de cadenas de caracteres, funciones de conversin de tipos, funciones de fecha y una larga serie de funciones especiales. La siguiente tabla contiene las funciones de VBA ms importantes. Todas las funciones se activan con uno o varios argumentos y siempre devuelven un valor. Para informarse sobre las funciones disponibles, consultuelas en la Ayuda de Visual Basic.
Tabla de funciones utilizadas comnmente en Visual Basic para Aplicaciones Funcin Significado
Cos DateAdd Devuelve un tipo Double que especifica el coseno de un ngulo en radianes Devuelve un valor de tipo Variant (Date) con una fecha a la que se ha agregado un intervalo de tiempo especificado. Devuelve un valor de tipo Variant (Long) que especifica el nmero de intervalos de tiempo entre dos fechas determinadas. Devuelve un valor de tipo Variant (Integer) que contiene la parte especificada de la fecha dada. Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia. Devuelve la parte entera de un nmero. Devuelve un tipo Integer que indica el siguiente nmero de archivo disponible para su uso en la instruccin Open. Devuelve un valor de tipo Variant (Integer) que especifica un nmero entero entre 0 y 23, inclusive, que representa la hora del da. Devuelve un tipo Variant (Long) que especifica la posicin de la primera aparicin de una cadena en otra. Devuelve la parte entera de un nmero. Devuelve un tipo Variant (String) que contiene un nmero especificado de caracteres del lado izquierdo de una cadena. Devuelve un tipo Long que contiene el nmero de caracteres en una cadena o el nmero de bytes necesarios para almacenar una variable. Devuelve un tipo Double que especifica el logaritmo natural de un nmero. Devuelve una cadena que indica el mes especificado. Devuelve un valor de tipo Variant (Date) que especifica la fecha y hora actuales de acuerdo con la configuracin de la fecha y la hora del sistema de su equipo. Devuelve un tipo Variant (String) que contiene un nmero especificado de caracteres del lado derecho de una cadena Devuelve un tipo Single que contiene un nmero aleatorio. Devuelve un valor de tipo Variant (Integer) que especifica un nmero entero entre 0 y 59, inclusive, que representa un segundo. Devuelve un valor de tipo Variant (Date) indicando la hora actual del sistema. Devuelve un tipo Variant (String) que contiene una copia de una cadena determinada sin espacios a la izquierda (LTrim), sin espacios a la derecha ( RTrim) o sin espacios ni a la derecha ni a la izquierda (Trim). Devuelve un valor de tipo Variant (Integer) que contiene un nmero entero que representa el da de la semana. Devuelve un valor de tipo Variant (Integer) que contiene un nmero entero que representa el ao.
DateDiff
DatePart
Exp
Fix FreeFile Hour Instr Int Left Len Log MonthName Now
Rigth
Weekday Year
Activar funciones de Excel Uno de los puntos fuertes de Excel es que cuenta con un amplio repertorio de funciones que se pueden activar directamente realizando una entrada en una celda y que tienen, en parte, un comportamiento especial. Excel cuenta con ms de 100 funciones que no son funciones VBA, sino funciones integradas en Excel que se pueden activar independientemente de VBA. Esto significa que no se pueden activar sin ms desde un programa VBA. Para ello es necesario utilizar la propiedad WorkSheetFunction del objeto Aplication, la cual devuelve un objeto WorkSheetFunction. La particularidad de este objeto es que contiene todas las funciones activables de Excel en forma de mtodo. El ejemplo siguiente , ver figura 32 muestra como, a travs de la funcin Average, se puede calcular la media de una serie de celdas agrupadas todas en un objeto Range: 'Para ejecutar esta macro debe tener la Hoja3 activa Sub ValorMedio() Dim rngArea As Range Dim sngValorMedio As Single Set rngArea = ActiveSheet.Range("A2:C2") sngValorMedio = Application.WorksheetFunction.Average(rngArea) MsgBox Prompt:="El valor medio es: " & sngValorMedio End Sub
Figura 32. Macro con funcin activable Average. Muestra la flexibilidad que tiene VBA para invocar funciones de Excel con el Objeto Application.
Activar funciones VBA en Excel. La operacin inversa tambin desempea un papel importante en la flexibilidad que tienen las funciones en Excel. Activar directamente un procedimiento VBA en una celda de Excel. En este caso se debe tener en cuenta lo siguiente. 1. El procedimiento VBA debe estar definido como funcin a travs del comando Function, y ha de devolver un valor. Los procedimientos Sub quedan por lo tanto, excluidos 2. El procedimiento VBA debe estar contenido en un mdulo general (si forma parte de un mdulo de hoja de clculo, no se puede activar). 3. El nombre del procedimiento se puede escribir directamente en la celda, o bien se puede seleccionar a travs del asistente de funciones, tal como se hace con las funciones integradas. 4. Los parmetros se trasmiten entre parntesis, igual que las funciones integradas de Excel. El ejemplo siguiente muestra cmo se puede activar una sencilla funcin VBA desde una celda de Excel. La funcin NumeroPrimitivo devuelve un nmero aleatorio dentro del intervalo 1 a 49. Public Function NumeroPrimitiva() As Integer Dim intNumeroPrimitiva As Integer Randomize Timer intNumeroPrimitiva = Int(Rnd * 49) + 1 NumeroPrimitiva = intNumeroPrimitiva End Function Los pasos para activar la funcin son: 1. Inicie Excel y cree un nuevo libro de trabajo en blanco. 2. Vaya con Alt + F11 al editor de VBA
7. En el Explorador de proyectos seleccione VBAproject (libro1) y de clic con el botn derecho del ratn. Seleccione la opcin Insertar | Mdulo. ,
ver figura 33 . Si usted lo prefiere tambin pudo haber seleccionado el comando Insertar | Mdulo de la barra de mens del editor de Visual Basic.
En el cuadro de texto Nombre del Cuadro de dilogo Agregar procedimiento escriba el nombre de la funcin. En Tipo, el botn de opcin Funcin debe estar seleccionado ,vea figura 34. De clic en Aceptar, se agrega una funcin vaca, esto es, sin sentencias:
Public Function NumeroPrimitiva() End Function 3. Agregue al cuerpo de la funcin las sentencias para que quede as: Public Function NumeroPrimitiva() As Integer Dim intNumeroPrimitiva As Integer Randomize Timer intNumeroPrimitiva = Int(Rnd * 49) + 1 NumeroPrimitiva = intNumeroPrimitiva End Function
Figura 33. Insertar un mdulo general al proyecto para crear la funcin VBA.
Figura 35. El asistente de funciones de Excel reconoce la nueva funcin NumeroPrimitiva definida por el usuario. Ahora supongamos que usted quiere que la funcin sea ms flexible, esto es, que en lugar de que nos devuelva un nmero aleatorio del 1 al 49 como ya estaba establecido anteriormente. Digamos que usted quiere que le permita un nmero aleatorio que este comprendido en un rango mayor o menor. Esto lo podemos resolver modificando la funcin NumeroPrimitiva con el editor de Visual Basic. Siga los siguientes pasos para la realizacin: 1. Abra el editor de VBA y ubique la funcin NumeroPrimitiva. 2. Modifique la funcin de la siguiente manera: Function NmeroPrimitiva(limite As Integer) As Integer Dim intNmeroPrimitiva As Integer Randomize Timer intNmeroPrimitiva = Int(Rnd * limite) + 1 NmeroPrimitiva = intNmeroPrimitiva End Function 1. Como puede observar hemos agregado el parmetro limite para conseguir que sea ms flexible la funcin definida por el usuario.
Figura 36. La funcin definida por el usuario (FDU) se ha vuelto ms flexible porque ahora nos pide un argumento en el asistente de insertar funcin.
2.4. DEPURACIN
A medida que los programas van creciendo la probabilidad de cometer errores tambin va creciendo. Los errores se clasifican normalmente en tres categoras. Errores en tiempo de compilacin. Son los tpicos errores que impiden hacer funcionar el programa debido, por ejemplo, a errores de sintaxis en las instrucciones, llamadas a funciones que no existen o llamadas con el tipo o el nmero de parmetros incorrectos, etc. Este tipo de errores no dan demasiados problemas, primero porque el compilador avisa de donde se han producido y luego porque simplemente revisando la sintaxis se solucionan rpidamente. Errores en tiempo de ejecucin . Estos errores se producen por una mala programacin del cdigo al no haber previsto determinados casos concretos o especiales, como por ejemplo intentar abrir un archivo que no existe, imprimir sin comprobar que la iimpresora est conectada, definir mal la dimensin de un array e intentar acceder a miembros que no existen, etc. Cuando se produce este tipo de errores se detiene la ejecucin del programa y normalmente se informa del tipo de error que se ha producido. Muchos de estos errores se pueden solucionar mediante rutinas o funciones de tratamiento de errores, estudiaremos este tipo de rutinas un poco ms adelante. Errores de funcin. Son los ms complicados de detectar ya que ni se detectan en la fase de ejecucin, ni provocan la detencin del programa, son debidos a la incorrecta programacin de algn proceso y como resultado se obtienen datos errneos. Errores de este tipo son clculos mal hechos, bucles infinitos, devolucin de valores incorrectos, etc. Como ni los detecta el compilador, ni provocan la interrupcin del programa deben revisarse a mano (prueba de escritorio), y claro, si el programa es extenso y trata muchos datos, su deteccin puede resultar dificultosa. Visual Basic, y todos los entornos de programacin incorporan herramientas para facilitar la deteccin de este tipo de errores, son las herramientas de depuracin. Antes de comenzar a describir como funcionan estas herramientas, le recomendamos, que modularice su programa utilizando procedimientos cortos que realicen trabajos concretos y
precisos, de esta forma conseguir, adems de que el programa quede ms elegante y en un futuro sea ms sencillo modificarlo, evitar el tener que revisar grandes bloques de cdigo para detectar errores de este tipo.
Herramientas de depuracin.
Como se acaba de indicar, estas herramientas son muy tiles a la hora de probar paso a paso el funcionamiento del programa y detectar los procesos que provocan un mal funcionamiento del mismo. Copie los datos siguientes en la primera hoja de un libro de trabajo, estos datos sern utilizados por las funciones que utilizaremos para explicar el funcionamiento de las herramientas de depuracin.
Copie el cdigo siguiente, es el que utilizaremos para estudiar y ver ejemplos sobre las herramientas de depuracin. La primera ( Sub Prueba) recorre los datos de las columnas hasta encontrar una vaca, esta funcin va llamando a Recorrer_Columna, sirve para recorrer las filas de una columna hasta encontrar una vaca, va sumando los valores que encuentra en las filas y va contando cuantas hay de llenas, al final llama a la funcin Clculos, esta funcin coloca en respectivas celdas, la suma de los valores de la columna, lla cantidad de celdas llenas que ha encontrado, y la media. Una vez haya copiado las funciones ejectelas para comprobar su correcto funcionamiento antes de proceder al estudio de las herramientas de depuracin. Sub Prueba() Worksheets(1).Range("B2").Activate ' Recorrer las casillas de una fila hasta que se encuentre una vaca Do While Not IsEmpty(ActiveCell) Call Recorrer_Columna ActiveCell.Offset(0, 1).Activate Loop End Sub
Private Sub Recorrer_Columna() Dim Suma_Columna As Long 'Suma de los valores de la columna Dim Mayor_Que_Cero As Integer ' Contar casillas con valores mayores que cero Dim Desp_Fila As Integer ' Incremento de Fila Suma_Columna = 0 Mayor_Que_Cero = 0 Desp_Fila = 0 ' Recorrer las filas de una columna hasta que se encuentre una vaca Do While Not IsEmpty(ActiveCell.Offset(Desp_Fila, 0)) If ActiveCell.Offset(Desp_Fila, 0).Value > 0 Then Suma_Columna = Suma_Columna + ActiveCell.Offset(Desp_Fila, o).Value Mayor_Que_Cero = Mayor_Que_Cero + 1 End If Desp_Fila = Desp_Fila + 1 Loop Call Calcular(Suma_Columna, Mayor_Que_Cero, Desp_Fila) End Sub Private Sub Calcular(Suma As Long, Q As Integer, F As Integer) ActiveCell.Offset(F + 2, 0).Value = Suma ActiveCell.Offset(F + 3, 0).Value = Q ActiveCell.Offset(F + 4, 0).Value = Suma / Q End Sub Active la barra de depuracin para ver los botones que se utilizarn en las secciones que se explican a continuacin ( Ver/ Barras de Herramientas/ Depuracin)., vea figura 37.
Figura 37. Barra de herramientas de depuracin de Visual Basic Modo Ejecucin paso a paso por instrucciones. El modo paso a paso permite la ejecucin del programa instruccin por instruccin, de esta forma es posible ver que el funcionamiento del programa es el correcto, es decir que la ejecucin de instrucciones sigue los pasos que se haban previsto. Para ejecutar un procedimiento paso a paso, slo debe ir pulsando sobre el botn , activar la opcin de men Depuracin /Paso a Paso por Instrucciones o ir pulsando la tecla F8, que seguramente es lo ms cmodo.
Ejemplo 1 de depuracin Paso a Paso por Instrucciones 1. Site el cursor dentro del procedimiento Prueba.
Sirve para detener la ejecucin del programa. Sirve para ejecutar el resto del programa. Sirve para ejecutar todo un procedimiento. Cuando en la ejecucin de un procedimiento, se llega a una lnea que llama a otro procedimiento o funcin, pulsando este botn se puede provocar la ejecucin de todo el cdigo de esta funcin para luego continuar con el modo paso a paso. Ejemplo 2 de depuracin. 1. Site el cursor dentro del procedimiento Prueba. 2. Vaya ejecutando paso a paso hasta la lnea Call Recorrer_Columna
, y observe como se ejecuta toda el procedimiento Recorrer_Columna para luego continuar con la ejecucin normal de Paso a Paso. Para activar esta opcin, tambin puede activar la opcin Depuracin/ Paso a paso por procedimientos , o bien pulsar la combinacin MAY+F8. Sirve para ejecutar todas las instrucciones del procedimiento activo y volver (o terminar).
Ejemplo 3 de depuracin. 1. Site el cursor dentro del procedimiento Prueba. 2. Vaya ejecutado paso a paso hasta la instruccin Mayor_Que_Cero = Mayor_Que_Cero + 1 Ya dentro del procedimiento Recorrer_Columna. Pulse sobre el botn y ver como se termina la ejecucin de este procedimiento y se vuelve al procedimiento Prueba para continuar con la ejecucin paso a paso. Para activar esta opcin, tambin puede la opcin Depuracin/ Paso a paso para salir , o bien pulsar la combinacin CONTROL+ MAY+ F8.
El modo Interrupcin. En programas largos resulta fastidioso tener que ejecutarlos paso a paso, sobretodo si sabemos que el error se produce en una parte avanzada del programa. El modo iinterrupcin, permite la ejecucin del programa hasta una instruccin determinada para que a partir de esta, ejecutar paso a paso y as poder detectar el error. Definir puntos de interrupcin. 1. Site el cursor sobre la instruccin en la cual debe detenerse el programa para continuar paso a paso.
2. Pulse sobre el botn . Tambin puede activar la opcin Depuracin/ Alternar punto de interrupcin, pulsar la tecla F9 o bien
hacer un clic en la parte izquierda de la ventana del mdulo (la franja vertical en color gris). Para desactivar un punto de interrupcin siga los mismos pasos. Solucionar los errores. Todo lo dicho anteriormente no servira de gran cosa si no fuera posible revisar los valores que las variables van cogiendo a medida que vamos avanzando o si no tuviramos ocasin de evaluar las expresiones del programa. A continuacin veremos como llevar a cabo estas acciones. Inspecciones rpidas de variables. Estas opciones sirven para revisar el valor de las variables a medida que se va ejecutando el programa. Para ver los valores que van tomando las variables es conveniente tener visible la Ventana de inspeccin, para activarla Ver/ Ventana de Inspeccin o pulse sobre el botn. Aadir una variable a la ventana de inspeccin. Aunque no es necesario estar ejecutando el programa en modo paso a paso, es conveniente. 1. Seleccione la variable que desee aadir a la ventana haciendo un clic sobre ella.
2. Pulse sobre el botn , tambin puede activar Depuracin/ Inspeccin rpida o pulsar la combinacin MAY+F9. Aparece un
cuadro de dilogo donde se muestra el valor actual de la variable. Si no est ejecutando el programa paso a paso, aparecer el valor Fuera de Contexto.
3. Pulse sobre el botn Agregar para aadir la variable a la ventana de inspeccin. Debe tener en cuenta que para revisar las variables las expresiones que les asignan valores deben de ejecutarse al menos una vez.
Ejemplo 4 de depuracin. 1. Site un punto de interrupcin en la lnea. Mayor_Que_Cero = Mayor_Que_Cero + 1. 2. Ejecute el programa, cuando este se detenga en el punto de interrupcin, site el cursor sobre la variable Suma_Columna (puede ponerlo en cualquier parte). 3. Pulse sobre el botn . 4. Pulse sobre el botn Agregar para que la variable se inserte en la ventana Inspecciones. Repita los pasos anteriores para las variables Mayor_Que_Cero y Desp_Fila 5. Vaya ejecutando el programa paso a paso y observe como va cambiando el valor de las variables en la ventana de inspeccin. Recuerde que puede agregar una variable a la ventana de inspeccin aunque no est ejecutando el programa.
Borrar una variable de la ventana de Inspeccin. Slo debe seleccionarla en la ventana de inspeccin y pulsar sobre la tecla SUPR. Modificar el valor de una variable en tiempo de ejecucin. A veces resulta interesante cambiar el valor de alguna variable cuando se est ejecutando el programa, para ver que ocurre si coge determinados valores, para terminar un bucle, etc. Ejemplo 5 de depuracin. 1. Site un punto de interrupcin en la lnea. Mayor_Que_Cero = Mayor_Que_Cero + 1 2. Agregue a la ventana de inspeccin (si no est) la variable Suma_Columna. 3. Ejecute el programa, al detenerse, observe en la Ventana de Inspeccin que la variable Suma_Columna tiene un valor que ahora cambiaremos. 4. Haga doble clic sobre el valor de Suma_Columna dentro de la ventana de inspeccin. 5. Borre el valor que tiene, cmbielo por otro y pulse ENTER. Ahora puede continuar con la ejecucin normal del programa.
BIBLIOGRAFIA
Mindi Martin/Steven M.Hasen/Beth Klinger La Biblia de Excel 2000 Ed Anaya Multimedia Mxico, 2000 Monadjemi Peter VBA con Office 2000 Boixareu Editores Alfaomega Marcombo Mxico, 2001 Podlin Sharon Programacin con Microsoft Excel 2000 en 24 hrs. Pearson Education Mxico, 2001 Snchez Claudio Tcnicas avanzadas con Microsoft Excel 2000 MP Ediciones S.A. / Manuales COMPUMAGAZINE Argentina, 2000 Wells Eric / Harshbarger Steve Microsoft Excel 97 Desarrollo de soluciones McGraw Hill Microsoft Press Espaa, 1998