curso de macros y programacion excel.doc

115
ÍNDICE ÍNDICE .................................................................. 1 INTRODUCCIÓN ............................................................ 2 1. MACRO ................................................................ 3 1.1. CONCEPTO DE MACRO ................................................ 3 1.2. GRABACIÓN DE MACROS .............................................. 3 1.3. USO DE REFERENCIAS ABSOLUTAS. .................................... 4 1.4. ADMINISTRAR LAS MACROS ........................................... 5 1.4.1. CUADRO DE DIÁLOGO DE MACROS ......................................................................................... 6 1.4.2. EJECUTAR UNA MACRO ............................................................................................................ 7 1.4.3. ELIMINAR UNA MACRO. ............................................................................................................ 7 1.4.4. UBICACIÓN Y OPCIONES. ......................................................................................................... 8 1.5. EDITAR EL CÓDIGO DE LAS MACROS. ................................. 14 1.5.1. INTRODUCCIÓN AL ENTORNO DE VISUAL BASIC PARA APLICACIONES (VBA) ................... 15 1.5.2. EL MODELO DE OBJETOS DE VBA: MÉTODOS Y PROPIEDADES ......................................... 19 1.5.3. LOS MÓDULOS, LOS PROCEDIMIENTOS Y LAS PALABRAS RESERVADAS .............................. 27 1.5.4. CONCEPTOS DE PROGRAMACIÓN ESTRUCTURADA .............................................................. 33 1.5.5. INSERCIÓN DE CÓDIGO EN UNA MACRO EXISTENTE. .......................................................... 66 2. FUNCIONES PERSONALIZADAS ............................................ 69 2.1. CONCEPTO DE FUNCIÓN DEFINIDA POR EL USUARIO (FDU) ............... 69 2.2. DISEÑO 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 ADAPTACIÓN ................................................................................................. 72 2.4. DEPURACIÓN ...................................................... 76 BIBLIOGRAFIA ........................................................... 82

Upload: genaro-garcia

Post on 02-Jan-2016

67 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: curso de macros y programacion excel.doc

ÍNDICE

ÍNDICE ............................................................................................................................................................... 1

INTRODUCCIÓN ........................................................................................................................................... 2

1. MACRO ........................................................................................................................................................ 3

1.1. CONCEPTO DE MACRO ................................................................................................................... 3 1.2. GRABACIÓN DE MACROS ............................................................................................................... 3 1.3. USO DE REFERENCIAS ABSOLUTAS. ......................................................................................... 4 1.4. ADMINISTRAR LAS MACROS ......................................................................................................... 5

1.4.1. CUADRO DE DIÁLOGO DE MACROS .................................................................................. 6 1.4.2. EJECUTAR UNA MACRO ........................................................................................................ 7 1.4.3. ELIMINAR UNA MACRO. ......................................................................................................... 7 1.4.4. UBICACIÓN Y OPCIONES. ...................................................................................................... 8

1.5. EDITAR EL CÓDIGO DE LAS MACROS. .................................................................................... 14 1.5.1. INTRODUCCIÓN AL ENTORNO DE VISUAL BASIC PARA APLICACIONES (VBA) .................................................................................................................................................................. 15 1.5.2. EL MODELO DE OBJETOS DE VBA: MÉTODOS Y PROPIEDADES ........................ 19 1.5.3. LOS MÓDULOS, LOS PROCEDIMIENTOS Y LAS PALABRAS RESERVADAS ......... 27 1.5.4. CONCEPTOS DE PROGRAMACIÓN ESTRUCTURADA .................................................. 33 1.5.5. INSERCIÓN DE CÓDIGO EN UNA MACRO EXISTENTE. .............................................. 66

2. FUNCIONES PERSONALIZADAS .................................................................................................. 69

2.1. CONCEPTO DE FUNCIÓN DEFINIDA POR EL USUARIO (FDU) ......................................... 69 2.2. DISEÑO 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 ADAPTACIÓN ........................................................................................... 72

2.4. DEPURACIÓN .................................................................................................................................... 76

BIBLIOGRAFIA ............................................................................................................................................ 82

Page 2: curso de macros y programacion excel.doc

INTRODUCCIÓN

Este manual de Macros con Excel para Office XP tiene como propósito 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 realización de sus procedimientos con la Hoja, éstos si le permitirán 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 enseñanza aprendizaje dando un mayor dominio y comprensión de los temas expuestos.

Hay algunas convenciones tipográficas para estandarizar y facilitar la identificación de algunos elementos a que se hace referencia, a continuación se señalan cuáles son estas convenciones:

Presentación

Empleo Muestra

Botón Cuando se mencione el empleo de botones, el texto que lo identifica se presenta subrayado

Aceptar

Selección Cuando se requiera que se efectúe una determinada selección de la barra de comandos o en algún menú, podrá reconocerlo por su presentación 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 acción de hacer clic sobre el menú Archivo y a continuación hacer otro segundo clic sobre la opción Abrir...

Esta misma convención tipográfica se emplea para indicar el nombre de los recuadros de opciones dentro de los cuadros de diálogo.

Archivo | Abrir...

Elementos

Esta característica se emplea para resaltar puntos o elementos importantes a los que hay que presentar atención tales como nombres de cuadros de diálogo, identificación de celdas, nombres de función, etc.

Cuadro de diálogo de Macro

“Texto” Se utilizará para distinguir el Texto que deba introducirse en los cuadros de texto o en la hoja de cálculo

“Mi_macro“

Teclas Se utilizará negrita y subrayado para indicar que debe oprimirse una tecla o combinación de

Ctrl+A

Page 3: curso de macros y programacion excel.doc

teclas.

Page 4: curso de macros y programacion excel.doc

1. Macro

1.1. CONCEPTO DE MACRO

Una macro son un conjunto de instrucciones que sirven para automatizar procesos. Refiriéndonos a Excel, supongamos que realizamos frecuentemente la acción 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 automáticamente.

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 programación Visual Basic para Aplicaciones (VBA).

1.2. GRABACIÓN DE MACROS

Hay a nuestra disposición dos formas de de crear una macro:

La primera es sumamente poderosa, pero de uso menos frecuente porque se deben tener conocimientos de el lenguaje de programación Visual Basic para Aplicaciones para escribir paso a paso las instrucciones del proceso que deseamos automatizar.

La segunda forma para crear macros es mas usual y fácil que la anterior y consiste en apoyarse en Excel especificándole que usted va a ejecutar una serie de pasos que desea incluir en la macro, y que debe “recordar” éstos, para reproducirlos posteriormente cuando se le soliciten. Esta segunda forma tiene dos ventajas;

no se requiere de ningún conocimiento adicional a Excel por parte del usuario.

Es fácil y rápida de aprender para aquellas personas que no conozcan o programen con fluidez en Visual Basic para Aplicaciones. Incluso los expertos en (VBA) hacen uso frecuente de esta forma para así evitarse escribir múltiples secuencias de instrucciones, o para conocer algún aspecto del lenguaje que no conocen.

Para la segunda forma Excel tiene incorporada una herramienta denominada grabadora de macros que convierte automáticamente las acciones efectuadas por el usuario en instrucciones del lenguaje de programación Visual Basic para Aplicaciones, por tal motivo no es necesario tener conocimientos de programación para crear macros.

Es importante que antes de iniciar la grabación de un macro se tengan perfectamente definidas las acciones a desarrollar. Una vez activada la grabadora de macros, todas las operaciones que se efectúen serán grabadas.

Para poner en marcha la grabación de una nueva macro utilice la opción Herramientas | Macros | Grabar nueva macro...

Page 5: curso de macros y programacion excel.doc

En el cuadro de diálogo que aparece, similar al de la figura 1 , introduciremos un título o nombre para la macro, una combinación de teclas para activarla y un comentario o descripción. En realidad todos son parámetros opcionales pudiendo omitirse y dejar los valores que aparecen por defecto, aunque no es lo mas conveniente.

Figura 1. Inicio de la grabación de una macro

1.3. USO DE REFERENCIAS ABSOLUTAS.

Excel dispone de dos métodos de grabación de macros: con referencias relativas y con referencias absolutas.

El método utilizado de referencias relativas se utiliza cuando se quiere que la macro pueda ser utilizada en cualquier rango o parte de la hoja de cálculo. Cuando se ejecuta una macro

Las macros grabadas con referencia absoluta operan invariablemente sobre las mismas celdas, independientemente de cuál sea la celda activa o el rango seleccionado en el momento en que se ejecuta la macro.

Cuando estamos grabando la macro, verá aparecer una nueva barra de herramientas, en este caso conteniendo tan sólo dos botones.

El de la izquierda, según puede verse en la figura 2 . detendrá la grabación, poniendo fin a la creación de la macro. El de la derecha alternará entre el uso de referencias relativas modo por defecto, y referencias absolutas. Al pulsar dicho botón las referencias introducidas en la macro serán absolutas y , por tanto, al reproducirse siempre se ejecutarán sobre las mismas celdas.

Figura 2. Barra de herramientas de Detener Grabación para macros

Page 6: curso de macros y programacion excel.doc

1.4. ADMINISTRAR LAS MACROS

Primero necesitamos crear la macro que pretendemos administrar.

En el siguiente ejemplo se van a grabar una macro muy sencilla que cambia la fuente y el color de la celda seleccionada.

1. Abra un libro nuevo. En la celda A1, introduzca su nombre; en la B1 su apellido; en la C1, la ciudad donde vive; y en la D1, el nombre de su país. Esto le proporciona algunos datos para trabajar con el ejemplo.

2. Seleccione la celda o rango a la que se va a dar formato, en nuestro ejemplo la celda A1.

3. Seleccione Herramientas | Macros | Grabar nueva macro... a continuación se desplegará el cuadro de diálogo Grabar Macro, como se muestra en la figura 3 .

Figura 3. El cuadro de diálogo Grabar macro permite dar un nombre a la macro que esta próximo 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.

Page 7: curso de macros y programacion excel.doc

1. Active la opción Método abreviado e introduzca la letra “a” en el cuadro de edición que se ubica a la

derecha de CTRL+. De esta manera, para ejecutar la macro sólo requerirá de oprimir la combinación 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 botón Detener Grabación, ver figura 5 . A partir de este momento todas las acciones que se efectúen serán registradas por la grabadora de macros.

Figura 5. Barra de herramientas de Detener grabación, con su botón Detener grabación

1. Seleccione Formato | Celdas… y se desplegará el cuadro de diálogo Formato de Celdas. Seleccione la ficha Fuente.

2. Establezca a 16 puntos el tamaño de la fuente y su color a rojo. Haga clic en Aceptar.

3. Haga clic en el botón Detener grabación de la barra de herramientas. Con esto finaliza la sesión de grabación de la macro.

Después 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 método abreviado CTRL + a. y observe los resultados.

1.4.1. CUADRO DE DIÁLOGO DE MACROS

Ha creado su primera macro en un libro de Excel. Lógicamente 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

Page 8: curso de macros y programacion excel.doc

personal, si es que son macros cuyo propósito pueda extenderse a otros documentos.

Page 9: curso de macros y programacion excel.doc

Las macros no solo pueden crearse y ejecutarse o reproducirse con los pasos que ya conocemos, sino también pueden eliminarse y modificarse. Todas estas operaciones, que podemos considerar de administración, las efectuaremos desde el cuadro de diálogo que aparece en la figura 6 . Para abrirlo utilice la opción Herramientas | Macro | Macros...

Figura 6. Cuadro de diálogo 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 botón de Ejecutar . Esta es otra forma de ejecutar la macro además de la del método 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 método abreviado CTRL + a. y observe los resultados.

2. Para abrir el cuadro de diálogo Macros utilice la opción Herramientas | Macro | Macros...

3. Seleccione la macro “Formato_de_celda” de la lista Nombre de la Macro

4. De clic al botón Ejecutar

1.4.3. ELIMINAR UNA MACRO.

Para eliminar la macro que hemos creado previamente solo tenemos que usar el botón de Eliminar .Siga los siguientes pasos para ejemplificar su uso:

1. Para abrir el cuadro de diálogo Macros utilice la opción Herramientas | Macro | Macros...

2. Seleccione la macro “Formato_de_celda” de la lista Nombre de la Macro.

3. De clic al botón Eliminar

Ya no podemos recuperar la macro, a menos que hayamos previamente guardado el libro de trabajo.

Page 10: curso de macros y programacion excel.doc

1.4.4. UBICACIÓN Y OPCIONES.

Cuando creó su primera macro, aceptó la ubicación predeterminada. Como se había mencionado hay tres posibles lugares para guardar una macro:

Este libro

Libro nuevo

Libro de macros personal

CREACIÓN DE UN LIBRO DE MACROS PERSONAL

Cuando se elige la opción Este libro la macro se guarda en el libro actual. Esto significa que la macro estará disponible solamente cuando éste abierto éste libro. También se tiene la opción de guardar su macro en un libro nuevo. Si selecciona ésta opción , el nuevo libro se creará automáticamente. La opción final es guardar la macro en el libro de macros personal.

Un libro de macros personal es un libro especial oculto que se reserva sólo para las macros. La primera vez que elige guardar una macro en este libro, se crea un archivo nuevo llamado PERSONAL.XLS. Después de que el archivo ha sido creado, se abrirá automáticamente cuando inicie Excel. Debido a que el libro de macros personal está abierto en todo momento, cualquier macro que guarde ahí siempre estará disponible. Esto significa que si crea una macro que sea lo bastante general para ser usada por múltiples libros, necesitará guardarla en el libro de macros personal

Para guardar una macro en el libro de macros personal es básicamente lo mismo que guardar una macro con la opción Este libro. Solo tiene que realizar los siguientes pasos.

1. Seleccione opción Herramientas | Macro | Grabar nueva macro.. Para desplegar el cuadro de diálogo 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 Guardar macro en.

4. Haga clic en Aceptar. Ahora esta en modo de grabación.

5. Ahora seleccionaremos formatos de la barra de herramientas de formato para grabar algo en la macro. Haga clic en el botón Cursiva de la barra de herramientas.

Page 11: curso de macros y programacion excel.doc

6. Haga clic en el botón Subrayado de la barra de herramientas Formato.

7. Detenga la grabación de la macro.

Figura 7. Grabación de una macro en un libro de macros personal.

UTILIZANDO UNA MACRO DEL LIBRO DE MACROS PERSONAL

Ya que haya guardado la macro en el libro de macros personal, podrá utilizarla con cualquier libro. Para ello, de los siguientes pasos:

1. Cierre todos los libros. De esta forma sabrá que todas las macros que utilice se guardarán en el libro de macros personal.

2. Abra un libro nuevo.

3. En la celda A1, introduzca su nombre.

4. Seleccione la celda A1.

5. Seleccione Herramientas | Macro | Macros..... A continuación se desplegará el cuadro de diálogo 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. El texto de la celda que seleccionó ahora está en cursivas y subrayado.

Figura 8. Cuadro de diálogo Macro presentando la macro “TextoFormateado” del libro de macros personal

Page 12: curso de macros y programacion excel.doc

EDITANDO UNA MACRO DEL LIBRO DE MACROS PERSONAL

Para la edición de una macro que forma parte del libro de macros personal, se maneja de forma diferente a la edición de una macro de otros libros. El libro de macros personal es un libro oculto y se debe mostrar antes de poder editar su contenido. Para mostrar el libro de macros personal y editar una de sus macros, siga los siguientes pasos:

1. Seleccione Ventana | Mostrar... y se desplegará el cuadro de diálogo que se muestra en la figura 9 .

Figura 9. Cuadro de diálogo Mostrar

1. Seleccione “PERSONAL.XLS” y haga clic en Aceptar. El libro de macros personal se muestra y ahora es el libro activo. Vea la barra de título de la ventana del libro actual. Dice Personal.

2. Seleccione Herramientas | Macro | Macros..... y se desplegará el cuadro de diálogo correspondiente.

3. Seleccione “TextoFormateado” y haga clic en Modificar. Aparecerá la ventana del Editor de Microsoft de Visual Basic, ver figura 10 .

4. Haga los cambios que desee a su macro y cierre la ventana del Editor de Microsoft Visual Basic

Page 13: curso de macros y programacion excel.doc

Figura 10. Ventana de Microsoft Visual Basic para Aplicaciones.

Page 14: curso de macros y programacion excel.doc

VISTA DE CÓDIGO GRABADO

Si observa el recuadro grande ubicado al lado derecho de la figura 10 , el texto que ahí aparece es el código de Visual Basic que fue generado por Excel con base en el procedimiento que usted le “enseño” y contiene las indicaciones ( comandos ) correspondientes a las acciones ejecutadas anteriormente y que a continuación se reproduce:

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 = xlUnderlineStyleSingleEnd Sub

Nota: El código generado en su computadora puede diferir del mostrado en este texto ya que no sería nada extraño 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 código por medio del teclado le habría tomado más tiempo del que consumió en el proceso de la grabación 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 código anterior puede parecerle algo sumamente complejo, sin embargo cuando se discuta éste verá que es sumamente lógico y no tan difícil de comprender como aparenta ser en un principio.

COMO MODIFICAR EL CÓDIGO

Sucede a veces que las macros fallan cuando hay errores en éstas. Cuando la serie de pasos grabados por el grabador de macros son pocos es conveniente borrarla y crearla de nuevo, pero a veces no es práctico cuando son muchos los pasos grabados y pocos los errores, entonces se hace necesario corregir el código de Visual Basic, para ello entre al Editor de Visual Basic en la forma descrita anteriormente cuando trato de Editar el código de las macros. Observe las líneas del código de la macro que se reproducen a continuación para proceder a analizarlas y comprenderlas.

1: Sub TextoFormateado()2: '3: ' TextoFormateado Macro4: ' Macro grabada el 03/06/2002 por Oscar A. Glz. B5: '6: ' Acceso directo: CTRL+t7: '8: Selection.Font.Italic = True

Page 15: curso de macros y programacion excel.doc

9: Selection.Font.Underline = xlUnderlineStyleSingle

10: End Sub

La línea 1 el la identificación 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 apóstrofo ' son simplemente comentarios.

A continuación en la línea 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 itálica

El texto de la línea 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 línea 10, End Sub es un indicativo de que ese fragmento o subrutina de código terminado.

Como se puede apreciar, en algunos casos con un poco de conocimiento del idioma inglés y algo de atención de su parte, es posible comprender el código 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 tamaño 16 de color verde, itálica y que no estuviera subrayada. Aquí puede optar por volver a generar la macro, sin embargo ya que ha comprendido que hacen algunas líneas de código, puede proceder a modificarlas en lo posible haciendo lo siguiente:

Modifique la línea 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 código deberá decir: Selection.Font.Underline = xlUnderlineStyleNone

Agregue las siguientes líneas después de la línea 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 código resultante debe estar como se ve a continuación:

1. Sub TextoFormateado()2. '3. ' TextoFormateado Macro4. ' Macro grabada el 03/06/2002 por Oscar A. Glz. B5. '6. ' Acceso directo: CTRL+t7. '8. Selection.Font.Italic = True9. Selection.Font.Underline = xlUnderlineStyleNone10.Selection.Font.Name = "Times New Roman"

Page 16: curso de macros y programacion excel.doc

11.Selection.Font.Size = 1612.Selection.Font.ColorIndex = 413. End Sub

El objetivo de la línea 10 es utilizar la propiedad Name del objeto Font para establecer el tipo de letra Times New Roman .

En la línea 11 se utiliza la propiedad Size para establecer un tamaño de letra de 16 .

En la línea 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, además de que es un tema que abordaremos más adelante.

Guarde la macro con el comando Archivo | Guardar PERSONAL.XLS para que las modificaciones hechas en el código 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 ejecutándola como se vio previamente con el comando Herramientas | Macro | Macros..... A continuación se desplegará el cuadro de diálogo 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 tamaño 16 de color verde y sin subrayar.

LIMITACIONES DEL GRABADOR DE MACROS

Muchos de los procesos de Excel que usted necesita automatizar, pueden lograrse mediante la grabación de sus acciones. Pero el grabador de macros tiene sus limitaciones. Entre las cosas que no puede realizar mediante el grabador de macros se encuentran:

Pedir información a un usuario mientras se esta ejecutando la macro.

Ejecutar diferentes acciones basadas en los datos proporcionados por el usuario o en el valor de las celdas

Desplegar cuadros de dialogo de Excel, por ejemplo el cuadro de diálogo de Guardar como.

Desplegar y emplear formularios personalizados.

Estas limitaciones son solo algunas de las razones por las que necesitará crear su propio código de VBA.

1.5. EDITAR EL CÓDIGO DE LAS MACROS.

La edición del código de las macros se hace mediante el editor de Visual Basic el cual consta de una serie de elementos los cuales iremos viendo para que podemos utilizarlos. Al abrir este editor, pulsando Alt+F11 y suponiendo que estábamos en un libro nuevo, nos encontraremos con una ventana como la de la figura 11 . En ella distinguiremos, en la parte superior, el menú de opciones y una barra de herramientas. A la izquierda y en la parte

Page 17: curso de macros y programacion excel.doc

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 código, el examinador de objetos y otras ventanas auxiliares.

Figura 11. El editor de Visual Basic para Aplicaciones.

1.5.1. INTRODUCCIÓN AL ENTORNO DE VISUAL BASIC PARA APLICACIONES

(VBA)

Como cualquier lenguaje de programación el Visual Basic para Aplicaciones tiene una herramienta de desarrollo integrada de menús, ventanas, barras de herramientas, editor, interprete, depurador, etc. y que usaremos para crear macros y funciones, módulos, subrutinas , generalmente simples y asociadas a un determinado libro de trabajo de Excel.

Entre los elementos más sobresalientes de éste entorno se encuentran las barras de herramientas, la Ayuda en línea y el Examinador de Objetos.

La barra de herramientas Estándar, ver figura 12 , se encuentra divida en tipos de comandos.

Figura 12. Barra de herramientas Estándar.

La primera sección 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.

Page 18: curso de macros y programacion excel.doc

Figura 13. Botones Ver Microsoft Excel, Insertar UserForm y Guardar de la barra de herramientas Estándar del Entorno de Visual Basic para Aplicaciones.

Ver Microsoft Excel. Alterna entre la aplicación principal y el documento de Visual Basic activo.

Insertar UserForm. Inserta una forma para usuario para crear un formulario por ejemplo.

Guardar. Guarda el documento principal, incluidos el proyecto y todos sus componentes: formularios y módulos.

La siguiente sección de botones, ver figura 14, se relaciona con las funciones de edición. Estos botones se utilizan para copiar, cortar y pegar texto. En ésta sección también hay un botón para buscar texto.

Figura 14. Botones Cortar, Copiar, Pegar y Buscar de la barra de herramientas Estándar del Entorno de Visual Basic para Aplicaciones.

Cortar. Quita el control o texto seleccionado y lo coloca en el Portapapeles.

Copiar. Copia el control o texto seleccionado en el Portapapeles.

Pegar. Inserta el contenido del Portapapeles en la ubicación actual del cursor.

Buscar. Abre el cuadro de diálogo Buscar y busca el texto especificado en el cuadro Buscar.

La tercera sección de la barra de herramientas, vea la figura 15, tiene dos botones, Deshacer y Rehacer.

Figura 15. Botones Deshacer y Rehacer de la barra de herramientas Estándar del Entorno de Visual Basic para Aplicaciones.

Deshacer. Deshace la última acción de edición.

Rehacer. Restaura las últimas acciones descartadas de edición de texto si no se han realizado otras acciones desde la última operación de Deshacer.

Luego vienen los botones que tienen funciones de prueba y error, vea figura 16. Los primeros tres botones de esta sección permiten ejecutar, interrumpir y

Page 19: curso de macros y programacion excel.doc

restablecer la ejecución de un procedimiento. El último botón de esta sección pone al formulario en modo de diseño.

Figura 16. Botones Ejecutar Sub/UserForm, Interrumpir, Restablecer y Modo de diseño de la barra de herramientas Estándar 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 Código ni un UserForm.

Interrumpir. Detiene la ejecución de un programa y cambia al modo de interrupción.

Restablecer <proyecto>. Borra las variables de nivel de módulo de la pila de ejecución y restablece el proyecto.

Modo de diseño. Activa y desactiva el modo de diseño

La siguiente sección , vea figura 17, de la barra de herramientas Estándar 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 Estándar del Entorno de Visual Basic para Aplicaciones.

Explorador de proyectos. Abre el Explorador de proyectos que muestra una lista jerárquica de los proyectos abiertos actualmente y su contenido.

Ventana de Propiedades. Abre la ventana de Propiedades para que puedan verse las propiedades del control seleccionado.

Examinador de objetos. Muestra el Examinador de objetos, que presenta una lista de bibliotecas de objetos, biblioteca de tipos, clases, métodos, propiedades, eventos y constantes que se pueden utilizar en código, así como los módulos y procedimientos definidos para el proyecto.

Cuadro de herramientas. Muestra u oculta el cuadro de herramientas que contiene todos los controles y los objetos insertables (Como un gráfico de Microsoft Excel) disponibles para la aplicación. Sólo está disponible cuando está activo un UserForm.

Page 20: curso de macros y programacion excel.doc

Finalmente está el botón de Ayuda de Microsoft Visual Basic, vea figura 18 . Este botón funciona del mismo modo que el botón de Ayuda que ha visto a través de las aplicaciones de Microsoft.

Figura 18. Botón Ayuda de Microsoft Visual Basic de la barra de herramientas Estándar del Entorno de Visual Basic para Aplicaciones.

Page 21: curso de macros y programacion excel.doc

Otra herramienta útil del Ambiente de Visual Basic para Aplicaciones es la barra de herramientas de Edición , ver figura 19. Los botones de ésta barra afectan y aumentan el entorno de desarrollo de Visual Basic.

Figura 19. Barra de herramientas de Edición.

Los botones que se encuentran en la barra de herramientas de Edición son:

Lista de propiedades y métodos: Al hacer clic en éste botón se muestra una lista de propiedades y métodos aplicables al objeto sobre el que se localiza el cursor.

Lista de constantes: Despliega las constantes del sistema que aplican al argumento actual.

Información rápida: Despliega el cuadro de información rápida que proporciona información de sintaxis del elemento seleccionado.

Información de parámetros: Muestra información sobre los parámetros de la instrucción seleccionada.

Palabra completa: Termina de escribir la palabra que usted ha comenzado, una vez que cuenta con los caracteres suficientes para identificarla.

Sangría derecha: Desplaza a la derecha el texto seleccionado.

Sangría izquierda: Desplaza a la izquierda el texto seleccionado.

Alternar punto de interrupción: Coloca un punto de interrupción en la línea de código seleccionada. ( un punto de interrupción es una de las operaciones que se pueden realizar para depurar el código )

Bloque de comentarios: Convierte el texto seleccionado en un comentario. Esto se emplea durante la fase de depuración y prueba del desarrollo de la aplicación con objeto de saltarse segmentos de código.

Page 22: curso de macros y programacion excel.doc

Bloque sin comentarios: Devuelve el texto seleccionado a código.

Alternar marcador: Crea un marcador de posición en la línea actual. Un marcador de posición es una señal que usted puede poner en una línea de código para una fácil referencia.

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: MÉTODOS Y PROPIEDADES

A la hora de trabajar con macros en excel, deben tenerse claros ciertos conceptos de lo que se llama programación orientada a objetos (POO). No nos extenderemos demasiado sobre la POO, pero si definiremos a continuación los conceptos de Objeto, Métodos y Propiedades.

Objeto.

Cuando en el mundo real nos referimos a objeto significa que hablamos de algo más o menos abstracto que puede ser cualquier cosa. Si decidimos concretar un poco más podemos referirnos a objetos coche, objetos silla, objetos casa, etc. En POO, la generalización (o definición) de un objeto se llama Clase, así la clase coche sería 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.

Page 23: curso de macros y programacion excel.doc

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 definición informática, 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.

Métodos.

La mayoría de objetos tienen comportamientos o realizan acciones, por ejemplo, una acción 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 acción 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 definirían en el método 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 tendría que invocar este método para trasladarse de un punto inicial a un punto final, cualesquiera que fueran esos puntos.

Propiedades.

Cualquier objeto tiene características 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 podrían definir las propiedades Color, Ancho y Largo , luego al definir un objeto concreto como coche ya se particularizarían estas propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y Largo =3,5 metros.

Repasemos a continuación 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 cálculo) 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 característica, modificable o no, de un objeto. Entre las propiedades de un objeto Range están 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, también tiene métodos, recordemos que los métodos sirven llevar a cabo una acción sobre un objeto. Por ejemplo el método 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.

Page 24: curso de macros y programacion excel.doc

Conjuntos.

Un conjunto es una colección de objetos del mismo tipo, para los que conozcan algún lenguaje de programación es un array de objetos. Por ejemplo, dentro de un libro de trabajo puede existir más 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 referenciarán 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, número de válvulas, etc. y métodos, 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 también un objeto y Font tiene la propiedad Bold (negrita). Tenga esto muy presente ya que utilizaremos frecuentemente Propiedades de un objeto que serán también 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.

Programación Orientada a Objetos o Programación Basada en Objetos.

Hay una sutil diferencia entre las definiciones del título. Programación 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 aplicación Excel (WorkSheets, Range,...) sin implementar ni ninguno de nuevo, por lo que en nuestro caso es más correcto hablar de programación 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 implementación, sólo debemos conocer sus propiedades y métodos y utilizarlos de forma correcta. Bueno, después de esta extensa pero necesaria introducción 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, sólo téngalo presente para las definiciones que vienen a continuación y verá como va asimilando los conceptos de Objeto, propiedades, métodos, 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 aprendérselos 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.

Page 25: curso de macros y programacion excel.doc

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 línea 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 número de objetos están contenidos dentro del objeto Worksheet.

Page 26: curso de macros y programacion excel.doc

Al observar este modelo, ver figura 22 , podrá observar que el objeto Aplication está en la parte superior de la jerarquía porque éste contiene todos los otros objetos de Excel. El siguiente objeto que debe observar en la jerarquía 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 cálculo y que las hojas de cálculo, entre otros objetos, contienen rangos. No se sorprenda si ahora ya conoce cuatro de los cinco objetos más utilizados en Excel en la programación de VBA.

Los cinco objetos más empleados en Excel

Aunque existen más de 100 objetos en el modelo de objetos de Excel, casi siempre utilizará los cinco objetos siguientes:

Aplication ( aplicación )

Workbook ( libro de trabajo )

Worksheet ( hoja de cálculo )

Range ( rango )

Chart ( gráfico )

Jerarquía de objetos.

Al observar el modelo de objetos se dará cuenta que tiene forma de un gráfico por jerarquías. Application está en la parte superior de la jerarquía. Debajo del objeto Application encontrará, entre otros objetos a Workbook. De acuerdo con la terminología del paradigma de la Programación 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. Contención significa que los objetos pueden estar dentro de otros objetos.

Hacer referencia a los objetos en el código.

El concepto de contención entra en acción cuando usted hace referencia a los objetos en el código. Para calificar completamente al nombre del objeto en el código debe atravesar por toda el camino o ruta de la jerarquía del modelo de objetos, así por ejemplo, para referirse al rango A1 en la Hoja1 del Libro1, debería emplear el siguiente código:

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

En realidad se puede omitir la referencia Application en la mayoría de los casos ( una excepción es Application.Inputbox ) También puede hacer referencia al rango A1 por medio del siguiente código:

Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

No siempre tendrá que utilizar el nombre completo del código de un objeto en el código. En algunos casos, como se ha activado una hoja de cálculo en el código, lo puede lograr con una referencia más corta:

Range(“A1”)

Page 27: curso de macros y programacion excel.doc

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 podría tener dos libros abiertos, cada uno con una hoja de cálculo llamada Hoja1. En éste caso debería darles un nombre completo para evitar ambigüedades.

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

Application.Workbooks(“Libro2”).Worksheets(“Hoja1”).Range(“A1”)

Para trabajar con los objetos en el código

Cuando se trabaje con objetos en el código, se recomienda hacer algo como lo siguiente:

Establecer las propiedades de un objeto. Obtener las propiedades de un objeto Ejecutar los métodos de un objeto.

Como trabajar con las propiedades

Para establecer las propiedades de un objeto, utilice la siguiente sintaxis:

Objeto.Nombredelapropiedad = valor

Donde:

Objeto es el nombre del objeto.Nombredelapropiedad es el nombre de la propiedad que se cambió.Valor 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 código:

Range(“A1”).Value = 100

Para obtener el valor de las propiedades del objeto es semejante a establecer la propiedad. La sintaxis básica 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 código:

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 código:

MsgBox “El valor del rango es “ & Range.(“A1”).Value

Page 28: curso de macros y programacion excel.doc

Uso de los métodos

Para implementar los métodos de un objeto se debe utilizar la siguiente sintaxis:

Objeto.Método

Cuando ejecute el método de un objeto, utilice un punto para separar el nombre del objeto del nombre del método. Por ejemplo, para ejecutar el método Open de un libro, puede usar el siguiente código:

Workbooks(“Ejemplo de Macros de Excel”).Open

Los métodos tienen argumentos que algunas veces son necesarios y otras, opcionales. Por ejemplo , el siguiente código guarda un libro con el nombre de Seguridad Pública:

ThisWorkbook.SaveAs Filename:= “Seguridad Pública”

A los métodos también se les conoce o se refieren a ellos como los procedimientos y funciones específicos del objeto. Esto explica el hecho de que algunos métodos tengan argumentos. Incluso algunos métodos pueden devolver un valor.

Colecciones

Una colección es un grupo de objetos similares. Workbooks es una colección. Worksheets es otra colección. Vea el siguiente ejemplo:

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“A1”)

El “Libro1” es un elemento de la colección Workbooks. Observe que la mayoría de las colecciones están en plural. También puede uno darse cuenta que no existe el objeto Ranges porque una de las cosas que puede hacer con una colección es agregarlo y no se pueden agregar más rangos porque ya están 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. Desplácese 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.

Page 29: curso de macros y programacion excel.doc

Método Add

Una característica importante de las colecciones es la capacidad de aceptar lo que se les agregue, es decir, agregar es crear nuevos elementos en la colección. Para crear un elemento nuevo en una colección, utilice el método Add. Por ejemplo, para agregar un libro nuevo, deberá usar el siguiente código:

Workbooks.Add

Este código es equivalente a ir al menú Archivo de Excel y agregar un libro nuevo. Para agregar una hoja de cálculo nueva en un libro, debe emplear el siguiente código:

Worksheets.Add

Propiedad Count

Las colecciones soportan una propiedad muy útil llamada Count. Ésta almacena el número de elementos en una colección. Si desea saber cuántas hojas de cálculo hay en un libro, debe usar el siguiente código:

Dim CuentaLasHojas As IntegerCuentaLasHojas = Worksheets.Count

Usted podría utilizar ésta propiedad cuando está creando una aplicación que contiene una hoja de cálculo para cada día de negocios de la semana hasta que el libro se complete. Si usa la propiedad Count, podría saber si el libro contiene siete hojas de cálculo. En este caso podría emplear un código 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 cálculo.”

MsgBox Aviso

End If

End Sub

Page 30: curso de macros y programacion excel.doc

1.5.3. LOS MÓDULOS, LOS PROCEDIMIENTOS Y LAS PALABRAS RESERVADAS

Módulos

Un módulo se define como una colección de procedimientos y declaraciones de VBA que se almacenan juntos como unidad. Existen dos tipos de módulos; los módulos estándar y los módulos de clase. Los módulos de clase de VBA le permiten construir sus propios objetos, ya que ellos contienen la definición de un objeto. La mayor parte del trabajo que se realiza en las macros se lleva a cabo en un módulo estándar ( o simplemente módulo ). Cuando se graba una macro, automáticamente se creará un módulo, si es que no existe alguno, aunque si lo prefiere puede agregar módulos 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 específicas pero no devuelven ningún 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 instrucción Sub debe incluir un par de paréntesis vacío.

El objetivo de utilizar procedimientos es la antigua fórmula del divide y vencerás, es decir, con los procedimientos podremos tratar cada problema o tarea de forma más o menos aislada de forma que construiremos el programa paso a paso evitando tener que resolver o controlar múltiples cosas a la vez. Cada tarea la realizará un procedimiento, si esta tarea implica la ejecución 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 más rápidamente.

Los procedimientos son también un eficaz mecanismo para evitar la repetición de código 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 módulo de forma que este sea exportable a otros programas y de esta manera ganar tiempo que, como dice el tópico, es precioso.

Page 31: curso de macros y programacion excel.doc

Definir un procedimiento

Ya lo hemos hecho unas cuantas veces, pero ahí va de nuevo.

Sub Nombre_Procedimento()

Sentencias

End Sub

Llamar a un procedimiento.

Para llamar un procedimiento desde otro se utiliza la instrucción Call Nombre_Procedimiento.

Sub ProcesoUno

Sentencias.

Call ProcesoDos

Sentencias

End Sub

Las secuencias del procedimiento ProcesoUno se ejecutan hasta llegar a la línea Call ProcesoDos, entonces se salta al procedimiento ProcesoDos, se ejecutan todas las sentencias de este procedimiento y el programa continua ejecutándose en el procedimiento ProcesoUno a partir de la sentencia que sigue a Call ProcesoDos.

Pasos para crear un procedimiento

1. Abra un libro nuevo

Seleccione Herramientas | Macro | Editor de Visual Basic. Se abrirá la ventana del Editor.

En la parte izquierda del Editor de Visual Basic, debe haber una ventana del Explorador de proyectos ,vea figura 23 . Haga clic con el botón derecho del ratón en ThisWorkbook. Seleccione Insertar | Módulo y un módulo se agregará a su aplicación.

Page 32: curso de macros y programacion excel.doc

Figura 23. La ventana del explorador de proyectos lleva un registro de los elementos que componen su aplicación

2. Seleccione Insertar | Procedimiento. Se desplegará el cuadro de diálogo Agregar procedimiento, como se muestra en la figura 24 .

Figura 24. Cuadro de diálogo Agregar procedimiento sirve para crear nuevos procedimientos Sub y Function.

3. Introduzca MiprimerProcedimiento como nombre del procedimiento. En el área Tipo, asegúrese de que esté seleccionado el botón de opción Procedimiento. Haga clic en Aceptar. Se ha creado un procedimiento nuevo dentro del módulo, como se muestra en la figura 25.

Ventana del explorador

de

proyectos

Page 33: curso de macros y programacion excel.doc

Figura 25. El procedimiento insertado empieza con la sentencia Public Sub y termina con la instrucción Sub.

4. El punto de inserción ( cursor ) debe estar en la línea 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 diálogo para darle información acerca de éste comando. Esta característica se llama Información rápida automática.

5. Oprima Entrar. El procedimiento terminado se muestra en la figura 26.

Nota: VBA tiene reglas para la nomenclatura de procedimientos Sub y Function. Estas reglas son:

El primer carácter debe ser una letra.

Los nombres pueden contener letras, números y guiones bajos.

Los nombres no pueden contener espacios, puntos, signos de exclamación (¡) o los caracteres @, &, $, #.

El número máximo de caracteres es de 255.

Page 34: curso de macros y programacion excel.doc

Cómo ejecutar el módulo de la macro desde el Editor de VBA.

Después de crear su procedimiento puede ejecutarlo inmediatamente. Hay varias maneras para que pueda ejecutar un procedimiento. Puede utilizar el menú Ejecutar o el botón de la barra de herramientas Ejecutar Sub/UserForm u oprimir F5. Realice los siguientes pasos para ejecutar su procedimiento.

1. Haga clic en el botón Ejecutar Sub/UserForm de la barra de herramientas Estándar. El procedimiento se ejecutará y un mensaje se desplegará, vea figura 27.

Figura 26. Este procedimiento solo tiene tres líneas de código o sentencias de VBA.

Figura 27. La única línea de código dentro del procedimiento sirvió para desplegar éste mensaje.

Page 35: curso de macros y programacion excel.doc

Palabras reservadas

Las palabras reservadas o palabras clave son un conjunto bastante amplio de palabras que están reservadas para el lenguaje de programación de VBA, esto es, una palabra o un símbolo reconocido como parte del lenguaje de programación; por ejemplo, una instrucción, un nombre de función o un operador. Como éstas palabras están ya reservadas, el usuario no puede hacer uso de ellas para nombrar un procedimiento, función, 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

2. Seleccione Herramientas | Macro | Editor de Visual Basic. Se abrirá la ventana del Editor.

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.

Page 36: curso de macros y programacion excel.doc

1.5.4. CONCEPTOS DE PROGRAMACIÓN ESTRUCTURADA

En esta sección veremos algunos conceptos útiles de la programación estructurada que nos conviene conocer para escribir con mayor eficiencia programas de macros de Visual Basic para Aplicaciones.

La programación estructurada es:

Un conjunto de métodos y técnicas para diseñar y escribir programas utilizando el método científico y no solamente el método de ensayo y error.

La programación 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 solución esperada

Variable

Una variable es un lugar de almacenamiento con nombre que puede contener cierto tipo de datos que puede ser modificado durante la ejecución 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 carácter alfabético, deben ser únicos dentro del mismo ámbito, no deben contener más de 255 caracteres y no pueden contener un punto o carácter de declaración 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 instrucción que reserva el espacio en memoria para la variable y además, si así se desea , puede definir el tipo de dato que contendrá. Esta instrucción es Dim, que permite reservar el espacio en memoria para una variable si cumple con la sintaxis:

Dim nombre_variable

Posteriormente le asignamos un valor a dicha variable

Variable = Valor

El valor puede ser un texto (que debe ir entre comillas), un número, una fórmula, etc. Por ejemplo:

Nombre = "Escriba su nombre"

Cuenta = 12

Interés = 10000 * 24 * 30 / 36500

La instrucción Dim, además de reservar el lugar en memoria para la variable, permite identificar el tipo de dato que contendrá. Además sirve para validar el ingreso de dato por parte del usuario. La sintaxis es la siguiente:

Dim nombre_variable As Tipo_de_dato

Page 37: curso de macros y programacion excel.doc

Tipo de dato

El tipo de dato que define a una variable es una palabra reservada e identifica el tamaño que tendrá la variable en la memoria, limitando además el ingreso del dato por parte del usuario o del programa. La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamaño 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 instrucción Dim puede escribirse sin incluir As tipo - de - dato.

Por ejemplo, puede declarar una variable entera utilizando cualquiera de las dos siguientes opciones:

Dim Stock As Integer

Variables de Objetos.

Una variable objeto sir ve para hacer referencia a un objeto, esto significa que podremos acceder a las propiedades de un objeto e invocar a sus métodos a través de la variable en lugar de hacerlo directamente a través del objeto. Posiblemente no se utilice demasiado esta clase de variables (esta claro que esto dependerá de las preferencias del programador), pero hay casos en los que no hay más remedio que utilizarlas , por ejemplo en estructuras For Each ... Next como veremos, o cuando sea necesario construir funciones que devuelvan rangos, referencias a hojas, etc. Para declarar una variable objeto se utiliza también la palabra Dim de la forma siguiente;

Dim Var_Objeto As Objeto

Por Ejemplo

Dim R As RangeDim Hoja As WorkSheet

Page 38: curso de macros y programacion excel.doc

Tipos de datos en Visual Basic para Excel. (Tabla copiada de la ayuda en línea de Visual Basic para Excel).

Tipo de datos Tamaño de almacenamiento

Intervalo

Byte 1 byte 0 a 255

Boolean 2 bytes True o False

Integer 2 bytes -32,768 a 32,767

Long(entero largo)

4 bytes -2,147,483,648 a 2,147,483,647

Single(coma flotante/ precisión simple)

4 bytes -3,402823E38 a –1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos

Double(coma flotante/ precisión doble)

8 bytes -1.79769313486231E308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

Currency(entero a escala)

8 bytes -922.337.203.685.477,5808 a 922.337.203.685.477,5807

Decimal 14 bytes +/-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 número más pequeño distinto de cero es +/-0,0000000000000000000000000001

Date 8 bytes 1 de enero de 100 a 31 de diciembre de 9999

Object 4 bytes Cualquier referencia a tipo Object

String (longitud variable)

10 bytes + longitud de la cadena

Desde 0 a 2.000 millones

String(longitud fija)

Longitud de la cadena Desde 1 a 65.400 aproximadamente

Variant(con números)

16 bytes Cualquier valor numérico hasta el intervalo de un tipo Double

Variant(con caracteres)

22 bytes + longitud de la cadena

El mismo intervalo que para un tipo String de longitud variable

Definido por el usuario (utilizando Type)

Número requerido por los elementos

El intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.

Page 39: curso de macros y programacion excel.doc

Para asignar un objeto a una variable debe utilizar la instrucción Set.

Set Variable_Objeto = Objeto

Por Ejemplo

Set R= ActiveSheet.Range("A1:B10")Set Hoja = ActiveSheetSet Hoja = WorkSheets(1)

Veamos a continuación un ejemplo de cómo utilizar este tipo de variables,

Ejemplo de utilización de variables:

Algo muy simple, llenar el rango de A1 a B10 con la palabra "Hola" y después poner negrita, observe como se asigna una variable objeto al objeto y luego como se trabaja con esa variable de la misma forma que trabajaría 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 fórmulas construidas con combinaciones de constantes, variables, operadores, operandos y nombres de funciones especiales.

Cada expresión al evaluarse toma un valor que se determina tomando en cuenta los tipos de las variables y constantes implicadas además de la ejecución de las operaciones indicadas por los operadores

Prioridad de los operadores

Cuando hay varias operaciones en una misma expresión, cada parte de la misma se evalúa y se resuelve en un orden predeterminado según la prioridad de los operadores.

Cuando hay expresiones que contienen operadores de más de una categoría, se resuelven antes las que tienen operadores aritméticos, a continuación las que tienen operadores de comparación y por último las de operadores lógicos. Los operadores de comparación tienen todos la misma prioridad; es decir, se evalúan de izquierda a derecha, en el orden en que aparecen. Los operadores lógicos y aritméticos se evalúan en el siguiente orden de prioridad:

Page 40: curso de macros y programacion excel.doc

Tabla de prioridad de operadores (Tomado de la ayuda del editor de Visual Basic )

Aritméticos Comparación Lógicos

Exponenciación (^) Igualdad (=) Not

Negación (–) Desigualdad (<>) And

Multiplicación y división (*, /)

Menor que (<) Or

División de enteros (\)

Mayor que (>) Xor

Módulo aritmético (Mod)

Menor o igual que (<=)

Eqv

Adición y substracción (+, –)

Mayor o igual que (>=)

Imp

Concatenación de cadenas (&)

LikeIs

 

Cuando hay multiplicación y división en la misma expresión, cada operación se evalúa a medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan adiciones y substracciones en una misma expresión, cada operación se evalúa tal como aparecen de izquierda a derecha. Es posible usar paréntesis para saltar el orden de preferencia y forzar que algunas partes de una expresión se evalúen antes que otras. Las operaciones entre paréntesis se realizan antes que las de fuera. Sin embargo, dentro de los paréntesis, la precedencia de los operadores se mantiene.

El operador de concatenación de cadenas (&) no es realmente un operador aritmético, pero en orden de prioridad se encuentra a continuación de todos los operadores aritméticos y antes que todos los operadores de comparación.

Las tablas que aparecen a continuación son un resumen de los operadores de Visual Basic, se presentan con ejemplos para que el lector pueda verificarlos y así conocer éstos operadores:

Page 41: curso de macros y programacion excel.doc

Resumen de operadores de Visual Basic para Aplicaciones (operadores aritméticos)

Tipo de Operadores

Operadores

Operadores aritméticos

Descripción:Operadores utilizados para ejecutar cálculos matemáticos.

Operador Uso Ejemplos

^ (potencia)

Se utiliza para elevar un número a la potencia del exponente

Dim MiValorMiValor = 2 ^ 2 ' Devuelve 4.MiValor = 3 ^ 3 ^ 3 ' Devuelve 19683.MiValor = (-5) ^ 3 ' Devuelve -125.

* (multiplicación)

Se utiliza para multiplicar dos números

Dim MiValorMiValor = 2 * 2 ' Devuelve 4.MiValor = 459.35 * 334.90

' Devuelve 153836.315.

/ (división)

Se utiliza para dividir dos números y obtener un resultado de signo flotante.

Dim MiValorMiValor = 10 / 4 ' Devuelve 2.5.MiValor = 10 / 3 ' Devuelve 3.333333.

\ Se utiliza para dividir dos números y obtener un resultado entero.

Dim MiValorMiValor = 11 \ 4 ' Devuelve 2.MiValor = 9 \ 3 ' Devuelve 3. MiValor = 100 \ 3 ' Devuelve 33.

Mod (Módulo)

Divide dos números y devuelve sólo el resto.

Dim MiResultadoMiResultado = 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)

Se utiliza para sumar dos números

Dim MiNúmero, Var1, Var2MiNúmero = 2 + 2 ' Devuelve 4.MiNúmero = 4257.04 + 98112

' Devuelve 102369.04.Var1 = "34": Var2 = 6

' Inicializa variables mezcladas.MiNúmero = Var1 + Var2 ' Devuelve 40.Var1 = "34": Var2 = "6"

' Inicializa las variables con cadenas.MiNúmero = Var1 + Var2

' Devuelve "346"

' (concatenación de cadenas).

- (Resta)

Se utiliza para hallar la diferencia entre dos números o para indicar

Dim MiResultadoMiResultado = 4 - 2 ' Devuelve 2.MiResultado = 459.35 - 334.90

Page 42: curso de macros y programacion excel.doc

el valor negativo de una expresión numérica.

' Devuelve 124.45.

Page 43: curso de macros y programacion excel.doc

Resumen de operadores de Visual Basic para Aplicaciones (operadores de comparación)

Tipo de Operadores

Operadores

Operadores de comparación

Descripción:Operadores utilizados para efectuar comparaciones

Operador True si False si Null si

< (Menor que) ,

expresión1 <

expresión2

expresión1 >= expresión2

expresión1 o expresión2 = Null

<= (Menor o igual que)

expresión1 <=

expresión2

expresión1 > expresión2,

expresión1 o expresión2 = Null

> (Mayor que)

expresión1 > expresión2

expresión1 <= expresión2

expresión1 o expresión2 = Null

>= (Mayor o igual que)

expresión1 >= expresión2

expresión1 < expresión2

expresión1 o expresión2 = Null

= (Igual a)

expresión1 = expresión2

expresión1 <> expresión2

expresión1 o expresión2 = Null

Resumen de operadores de Visual Basic para Aplicaciones (operadores de concatenación)

Tipo de Operadores

Operadores

Operadores de concatenación

Descripción:Operadores utilizados para combinar cadenas de caracteres

Operador

Uso Ejemplos

& Se utiliza para forzar la concatenación de las cadenas de dos expresiones

Dim MyStrMyStr = "Hola" & " mundo"

' Devuelve "Hola mundo".MyStr = "Prueba " & 123 & " Prueba" ' Devuelve "Prueba 123 Prueba".

+ se utiliza el operador + para sumar números. El operador + puede utilizarse también para concatenar cadenas de caracteres pero, para evitar ambigüedades, es mejor utilizar para ello el operador &.

Dim MiNúmero, Var1, Var2MiNúmero = 2 + 2 ' Devuelve 4.MiNúmero = 4257.04 + 98112

' Devuelve 102369.04.Var1 = "34": Var2 = 6

' Inicializa variables mezcladas.MiNúmero = Var1 + Var2 ' Devuelve 40.Var1 = "34": Var2 = "6"

' Inicializa las variables con cadenas.MiNúmero = Var1 + Var2

' Devuelve "346"

' (concatenación de cadenas).

Page 44: curso de macros y programacion excel.doc

Resumen de operadores de Visual Basic para Aplicaciones (operadores lógicos)

Tipo de Operador

es

Operadores

Operadores lógicos

Descripción:Operadores usados para realizar operaciones lógicas

Operador

Uso Ejemplos

And Se utiliza para efectuar una conjunción lógica de dos expresiones

Dim A, B, C, D, MiPruebaA = 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 (comparación bit a bit).

Eqv Se utiliza para efectuar una equivalencia lógica de dos expresiones

Dim A, B, C, D, MiPruebaA = 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 (comparación bit por bit).

Imp Se utiliza para efectuar una implicación lógica de dos expresiones.

Dim A, B, C, D, MiPruebaA = 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 (comparación bit por bit).

Not Se utiliza para ejecutar una negación lógica sobre una expresión.

Dim A, B, C, D, MiPruebaA = 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) ' DevuelveNullMiPrueba = Not A ' Devuelve -11 (comparación bit por bit)

Or Se utiliza para ejecutar una disyunción lógica sobre dos expresiones.

Dim A, B, C, D, MiPruebaA = 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 (comparación bit por bit).

Xor Se utiliza para realizar una exclusión lógica entre dos expresiones.

Dim A, B, C, D, MiPruebaA = 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 (comparación bit a bit).

Page 45: curso de macros y programacion excel.doc

La Función InputBox.

Esta función es muy utilizada para introducir datos y muestra un cuadro de diálogo 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 función. Vea la línea siguiente.

Texto = InputBox("Introduzca el texto", "Entrada de datos").

Si en el cuadro que muestra InputBox pulsa sobre el botón Aceptar, los datos tecleados se guardarán el la variable Texto.

Sintaxis de InputBox.

InputBox(Mensaje, Título, Valor por defecto, Posición horizontal, Posición Vertical, Archivo ayuda, Número de contexto para la ayuda).

Mensaje : Es el mensaje que se muestra el cuadro. Si desea poner más de una línea ponga Chr(13) para cada nueva línea, vea el ejemplo siguiente.

Título : Es el título para el cuadro de InputBox. Es un parámetro opcional.

Valor por defecto: Es el valor que mostrará por defecto el cuadro donde el usuario entra el valor. Es un parámetro opcional.

Posición Horizontal: La posición X de la pantalla donde se mostrará el cuadro, concretamente es la posición para la parte izquierda. Si se omite el cuadro se presenta horizontalmente centrado a la pantalla.

Posición Vertical: La posición Y de la pantalla donde se mostrará el cuadro, concretamente es la posición 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 parámetro opcional.

Número de contexto para la ayuda: Número asignado que corresponde al identificador del archivo de ayuda, sirve para localizar el texto que se debe mostrar. Si se especifica este parámetro, debe especificarse obligatoriamente el parámetro Archivo Ayuda.

Page 46: curso de macros y programacion excel.doc

Ejemplo 1 de la función InputBox

Sub IntroduceValor()Dim Texto As String' Chr(13) sirve para que el mensaje se muestre en dos Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", “Introduce dato")ActiveSheet.Range("A1").Value = Texto

End Sub

Este ejemplo también se puede hacer sin variables.

Sub IntruduceValorbis()ActiveSheet.Range("A1").Value = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Introduce dato")

End Sub

Ejemplo 2 de la función InputBox

Repetiremos el ejemplo 1 de InpuBox, pero en lugar de introducir los valores sobre la casilla A1, haremos que el usuario pueda elegir la celda que quiera para introducir los datos, esto es, se le preguntará al usuario mediante un segundo Inputbox sobre que en que celda quiere introducir el valor del primer Inputbox. Serán necesarias dos variables, una para guardar la referencia de la celda que escoja el usuario y otra para guardar el valor.

Option ExplicitSub IntroducirValorCelda()

Dim Celda As StringDim Texto As StringCelda = 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

La sentencia Option Explicit.

En Visual Basic no es necesario declarar las variables, por ejemplo, en el programa anterior se hubiera podido escribir sin las líneas

Dim Celda As String

Dim Texto As String

A pesar de ello, es recomendable que siempre declare las variables que va a utilizar, de esta forma sabrá cuales utiliza el procedimiento y que tipo de datos guarda cada una, piense que a medida que vaya aprendiendo, creará procedimientos cada vez más complicados y que requerirán el uso de más variables, si no declara las variables al principio del procedimiento ocurrirán dos cosas; Primero, las variables no declaradas son asumidas como tipo

Page 47: curso de macros y programacion excel.doc

Variant (este es un tipo de datos que puede almacenar cualquier valor, número, fechas, texto, etc. pero tenga en cuenta que ocupa 20 Bytes y para guardar una referencia a una casilla, por ejemplo el sexo de alguien, etc. no son necesarios tantos bytes); Segundo, reducirá considerablemente la legibilidad de sus procedimientos ya que las variables las utilizará a medida que las necesite, esto, a la larga complicará la corrección o modificación del procedimiento.

La sentencia Option Explicit al principio del módulo fuerza a que se declaren todas las variables. Si al ejecutar el programa, se encuentra alguna variable sin declarar se producirá un error y no se podrá ejecutar el programa hasta que se declare. Si todavía no se ha convencido sobre la conveniencia de declarar las variables y utilizar Option Explicit, pruebe el procedimiento siguiente, cópielo tal cual (Dato y Dado están puestos adrede simulando que nos hemos equivocado al teclear).

Sub IntroduceValorSinExplicit()Dato = InputBox("De un dato " & Chr(13) & "Para la celda A1", "Entrada de datos")ActiveSheet.Range("A1").Value = Dado

End Sub

Observe que el programa no hace lo que se pretendía 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 ningún tipo de error y ejecuta el programa. Pruebe el siguiente procedimiento e intente ejecutarlo.

Option Explicit

Sub IntroduceValorConExplicit()Dim Dato As StringDato = 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 más fácil 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 líneas que necesita otras tantas variables.

La función MsgBox.

Esta función muestra un mensaje en un cuadro de diálogo hasta que el usuario pulse un botón. La función devuelve un dato tipo Integer en función del botón pulsado por el usuario. A la hora de invocar está función, s e permiten diferentes tipos de botones.

Sintáxis de MsgBox.

MsgBox( Mensaje, Botones, Título, Archivo de ayuda, contexto)

Page 48: curso de macros y programacion excel.doc

Mensaje : Obligatorio, es el mensaje que se muestra dentro del cuadro de diálogo.

Botones : Opcional. Es un número o una suma de números o constantes (vea tabla Valores para botones e Iconos), que sirve para mostrar determinados botones e iconos dentro del cuadro de diálogo. Si se omite este argumento asume valor 0 que corresponde a un único Botón OK.

Título : Opcional. Es el texto que se mostrará en la barra del título del cuadro de diálogo.

Archivo de Ayuda : Opcional. Si ha asignado un texto de ayuda al cuadro de diálogo, aquí debe especificar el nombre del archivo de ayuda donde está el texto.

Context: Opcional. Es el número que sirve para identificar el texto al tema de ayuda correspondiente que estará contenido en el archivo especificado en el parámetro Archivo de Ayuda.

Ejemplos de MsgBox.

Sub Tal().' El cuadro Muestra los botones Si y No y un icono en forma de interrogante. Cuando se pulsa' un botón, el valor lo recoge la variable X. En este caso los valores devueltos pueden ser 6 o 7' que corresponden respectivamente a las constantes VbYes y VbNo, observe la instrucción If de'después.X = MsgBox("Desea Continuar", vbYesNo + vbQuestion, "Opción",,)' Se ha pulsado sobre botón SiIf X = vbYes Then.....Else ' Se ha pulsado sobre botón No.....End If.....End Sub

Page 49: curso de macros y programacion excel.doc

Tabla para botones e iconos del cuadro MsgBox. (Tabla copiada de la yuda de Microsoft Excel).

Constante Valor Descripción

vbOKOnly 0 Sólo el botón Aceptar (predeterminado)

vbOKCancel 1 Los botones Aceptar y Cancelar

vbAbortRetryIgnore 2 Los botones Anular, Reintentar e Ignorar

vbYesNoCancel 3 Los botones Sí, No y Cancelar.

VbYesNo 4 Los botones Sí y No

vbRetryCancel 5 Los botones Reintentar y Cancelar

vbCritical 16 Mensaje crítico

vbQuestion 32 Consulta de advertencia

vbExclamation 48 Mensaje de advertencia

vbInformation 64 Mensaje de información

vbDefaultButton1 0 El primer botón es el predeterminado (predeterminado)

vbDefaultButton2 256 El segundo botón es el predeterminado

vbDefaultButton3 512 El tercer botón es el predeterminado

vbDefaultButton4 768 El cuarto botón es el predeterminado

vbApplicationModal 0 Cuadro de mensajes de aplicación modal (predeterminado)

vbSystemModal 4096 Cuadro de mensajes modal del sistema

vbMsgBoxHelpButton 16384 Agrega el botón Ayuda al cuadro de mensaje

VbMsgBoxSetForeground

65536 Especifica la ventana del cuadro de mensaje como la ventana de primer plano

vbMsgBoxRight 524288

El texto se alinea a la derecha

vbMsgBoxRtlReading 1048576

Especifica que el texto debe aparecer para leer de derecha a izquierda en sistemas hebreos y árabes

Nota Estas constantes las especifica Visual Basic para Aplicaciones. Por tanto, el nombre de las mismas puede utilizarse en cualquier lugar del código en vez de sus valores reales.

Page 50: curso de macros y programacion excel.doc

Los valores que puede devolver la función MsgBox en función del botón 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)

Constante

Valor

Descripción

vbOK 1 Botón Aceptar presionado

vbCancel 2 Botón Cancelar presionado

vbAbort 3 Botón Anular presionado

vbRetry 4 Botón Reintentar presionado

vbIgnore 5 Botón Ignorar presionado

vbYes 6 Botón Sí presionado

vbNo 7 Botón No presionado

Algunas veces puede que le interese simplemente desplegar un cuadro MsgBox para mostrar un mensaje al usuario sin que se requiera recoger ningún valor. En este caso puede optar por la forma siguiente:

MsgBox Prompt:="Hola usuaria, Ha acabado el proceso", Buttons:=VbOkOnLy _

Title:="Mensaje"

Lo que no puede hacer porque Visual Basic daría error es poner la primera forma sin igualarla a ninguna variable. Por ejemplo, la expresión siguiente es incorrecta,

MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")

Seria correcto poner

X= MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")

En este caso, aunque X reciba un valor, luego no se utiliza para nada, es decir simplemente se pone para que Visual Basic dé error.

Page 51: curso de macros y programacion excel.doc

Teorema De La Programación Estructurada.

Conocido también como el teorema de Böhm y Jacopini que dice:

Un programa (macro de Excel en Visual Basic para Aplicaciones) puede ser escrito utilizando únicamente tres tipos de estructuras de control de secuencia:

Secuencial Selectiva (simple, doble y multiple) Repetitiva (for, while, repeat)

Secuencial:

Ejemplo1 de estructura secuencial

Public Sub ConozcoSuNombre()Dim suNombre As StringDim suMensaje As VariantsuNombre = InputBox("Introduzca su nombre: ")suMensaje = MsgBox("Hola " & suNombre)

End Sub

Aquí podemos ver que se definen dos variables, una de tipo cadena o String y otra de tipo Variant. La función InputBox servirá para introducir por teclado el valor de la variable suNombre de tipo String, y la función MsgBox desplegará el mensaje. Note que & es el operador de concatenación.

Page 52: curso de macros y programacion excel.doc

Selectiva: Aquí tenemos tres casos; la selectiva simple, doble y múltiple.

Selectiva Simple:

Cuando el programa llega a la instrucción Si Condición Entonces , se evalúa la condición, si esta se cumple (es cierta), se ejecutan todas las sentencias que están encerradas en el bloque, si no se cumple la condición, se saltan estas sentencias. Esta estructura en Visual Basic tiene la sintaxis siguiente

If condición ThenSenténcia1Senténcia2...SenténciaN

End If

Page 53: curso de macros y programacion excel.doc

Ejemplo 1 de condicional simple

Entrar una cantidad que representa el precio de algo por el teclado con la instrucción InputBox y guardarlo en la celda A1 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A1) es superior a 1000, pedir descuento con otro InputBox y guardarlo en la casilla A2 de la hoja activa. Calcular en A3, el precio de A1 menos el descuento de A2.

Sub SelectivaSimple()' Poner las casillas donde se guardan los valores 0.ActiveSheet.Range("A1").Value = 0 ActiveSheet.Range("A2").Value = 0ActiveSheet.Range("A3").Value = 0ActiveSheet.Range("A1").Value = Val(InputBox("Entrar el precio", "Entrar"))' Si el valor de la casilla A1 es mayor que 1000, entonces, pedir descuentoIf ActiveSheet.Range("A1").Value > 1000 Then

ActiveSheet.Range("A2").Value = Val(InputBox("Entrar Descuento", "Entrar"))End IfActiveSheet.Range("A3").Value = ActiveSheet.Range("A1").Value - _ActiveSheet.Range("A2").Value

End Sub

Ejemplo 2 de condicional simple con variables

Sub SelectivaSimpleConVariables()Dim Precio As IntegerDim Descuento As IntegerPrecio = 0Descuento = 0Precio = Val(InputBox("Entrar el precio", "Entrar"))' Si el valor de la variable precio es mayor que 1000, entonces, pedir descuentoIf Precio > 1000 Then

Descuento = Val(InputBox("Entrar Descuento", "Entrar"))End IfActiveSheet.Range("A1").Value = PrecioActiveSheet.Range("A2").Value = DescuentoActiveSheet.Range("A3").Value = Precio - Descuento

End Sub

Page 54: curso de macros y programacion excel.doc

Selectiva Doble:

En Visual Basic la instrucción Si Condición Entonces ... Sino ... Fin Si se expresa con las instrucciones siguientes.

If Condición ThenSenténcia1Senténcia2...SenténciaN

ElseSenténcia1Senténcia2...SentenciaN

End If

Page 55: curso de macros y programacion excel.doc

Ejemplo 1 de selectiva doble if ... Then ... Else ... End If.

Entrar una cantidad que representa el precio de algo por el teclado con la instrucción 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.

Sub Selectiva_Else()Dim Precio As SingleDim Descuento As SinglePrecio = 0Precio = 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 IfActiveSheet.Range("A10").Value = PrecioActiveSheet.Range("A12").Value = DescuentoActiveSheet.Range("A13").Value = Precio - Descuento

End Sub

Page 56: curso de macros y programacion excel.doc

Selectiva Múltiple:

En Visual Basic la instrucción Caso ... hacer se expresa con las instrucciones siguientes; . Select Case y tiene la sintaxis siguiente:

Select Case ExpresiónCase valores :Instrucciones.Case valores :Instrucciones.....Case valores:Instrucciones.

Case ElseInstrucciones en caso que no sean ninguno de los valores anteriores.

End Select

Page 57: curso de macros y programacion excel.doc

Ejemplo1 de Selectiva Múltiple Select...Case

Dado dos números reales en las celdas A1 y B1, y un operador en la celda C1, haga una calculadora simple que calcule la operación indicada en la celda C1 y ponga el resultado en la celda D1

Sub Seleccion_MultipleUno()Dim Operador As StringDim Valor1 As Single, Valor2 As Single, Total As SingleValor1 = ActiveSheet.Range("A1").ValueValor2 = ActiveSheet.Range("B1").ValueOperador = ActiveSheet.Range("C1").ValueSelect Case Operador

Case "+"Total = Valor1 + Valor2

Case "-"Total = Valor1 - Valor2

Case "*"Total = Valor1 * Valor2

Case "/"Total = Valor1 / Valor2

Case ElseTotal = 0

End SelectActiveSheet.Range("D1").Value = Total

End Sub

Page 58: curso de macros y programacion excel.doc

Ejemplo 2 de Selectiva Múltiple Select...Case

Programa que pide tres examenes de un alumno mediante la función InputBox. Los examenes van a parar respectivamente a las casillas E1, E2 y E3 de la hoja activa. El programa calcula la media y la deja en E4. Si el promedio está entre 0 y 2 deja en E5 el mensaje "Muy deficiente", si la nota es 3 deja en E5 el mensaje "Deficiente", si la nota es 4 deja "Insuficiente", si es 5 "Suficiente", si es 6 "Bien", si está entre 7 y 8 deja "Notable", si es mayor que 8 deja "Sobresaliente".

Sub Selectiva_multipleDos()Dim Examen1 As Integer, Examen2 As Integer, Examen3 As IntegerDim Promedio As SingleExamen1 = Val(InputBox("De calificación 1er. examen", "calificación"))Examen2 = Val(InputBox("De calificación 2do. examen", "calificacion"))Examen3 = Val(InputBox("De calificación 3er. examen", "calificacion"))Promedio = (Examen1 + Examen2 + Examen3) / 3.0ActiveSheet.Range("E1").Value = Examen1ActiveSheet.Range("E2").Value = Examen2ActiveSheet.Range("E3").Value = Examen3ActiveSheet.Range("E4").Value = PromedioSelect Case Promedio

Case 0 To 2ActiveSheet.Range("E5").Value = "Muy deficiente"

Case 3ActiveSheet.Range("E5").Value = "Deficiente"

Case 4ActiveSheet.Range("E5").Value = "Insuficiente"

Case 5ActiveSheet.Range("E5").Value = "Suficiente"

Case 6ActiveSheet.Range("E5").Value = "Bien"

Case 7 To 8ActiveSheet.Range("E5").Value = "Notable"

Case >8ActiveSheet.Range("E5").Value = "Sobresaliente"

End SelectEnd Sub

Page 59: curso de macros y programacion excel.doc

Repetitivas: Hay tres casos particulares, el ciclo while , el repeat y el for.

Repetitiva (ciclo while):

Esta estructura repetitiva está controlada por una expresión lógica, la repetición del bloque de sentencias dependerá de si se va cumpliendo la condición de la expresión lógica. En Visual Basic la instrucción Mientras ... hacer se expresa con las instrucciones siguientes; . Do ... While y tiene la sintaxis siguiente:

Do While (se cumpla la condición)Sentencia1Sentencia2....Sentencia N

Loop

Ejemplo 1 de la estructura repetitiva Do While

Para el ejemplo haremos una base de datos donde utilizaremos los campos siguientes; Nombre, Ciudad, Edad, Fecha. Ponga estos títulos en el rango A1:D1 de la Hoja1 (En A1 ponga Nombre, en B1 ponga Ciudad, en C1 ponga Edad y en D1 Fecha), observe que los datos se empezarán a introducir a partir de la celda A2. Para introducir los registros en la base de datos, cada campo se introduce con InputBox. El programa va pidiendo datos mientras se intruduzca un valor en el InputBox correspondiente al nombre, es decir cuando al preguntar el nombre no se intruduzca ningún valor, terminará la ejecución del bloque encerrado entre Do While...Loop. Observe la utilización de la propiedad Offset para colocar los datos en las celdas correspondientes.

Page 60: curso de macros y programacion excel.doc

Sub EjemploUnoDoWhile()Dim Nombre As StringDim Ciudad As StringDim Edad As IntegerDim fecha As Date‘ Activar hoja1WorkSheets("Hoja1").Activate‘ Activar celda A2ActiveSheet.Range("A2").ActivateNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")‘ Mientras la variable Nombre sea diferente a cadena vacíaDo 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 correspondientesWith ActiveCell

.Value = Nombre

.Offset(0,1).Value = Ciudad

.Offset(0,2).Value = Edad

.Offset(0,3).Value = fechaEnd With‘Hacer activa la celda de la fila siguiente a la actualActiveCell.Offset(1,0).ActivateNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

LoopEnd Sub

Page 61: curso de macros y programacion excel.doc

Ejemplo 2 de la estructura repetitiva Do While

Antes que nada observe el ejemplo anterior, fíjese en que siempre empezamos a llenar el rango de la hoja a partir de la celda A2, esto tiene una nefasta consecuencia, la segunda vez que ejecute la macro sobrescribirá los datos de A2:D2 y si continua ejecutando sobrescribirá los datos de los rangos siguientes. Una solución seria observar cual es la casilla vacía siguiente y cambiar en la instrucción ActiveSheet.Range("A2").Activate , la referencia A2 por la que corresponde a la primera celda vacía de la columna A. El código que le mostramos a continuación hará esto por nosotros, es decir recorrerá una fila de celdas a partir de A1 hasta encontrar una vacía y dejará a esta como celda activa para que la entrada de datos comience a partir de ella.

Sub EjemploDosDoWhile()

.‘ Activar hoja1WorkSheets("Hoja1").Activate‘ Activar casilla A2ActiveSheet.Range("A1").Activate‘ Mientras la celda activa no esté vacíaDo While Not IsEmpty(ActiveCell)

‘ Hacer activa la celda situada una fila por debajo de la actualActiveCell.Offset(1,0).Activate

LoopEnd Sub

Ejemplo 3 de la estructura repetitiva Do While

Este programa es la aplicación de los dos anteriores, esto es, habrá un bucle Do While que buscará la primera ceda vacía de la base da datos y otro para pedir los valores de los campos hasta que se pulse Enter en Nombre.

Sub EjemploTresDoWhile()

Dim Nombre As StringDim Ciudad As StringDim Edad As IntegerDim fecha As Date

Page 62: curso de macros y programacion excel.doc

WorkSheets("Hoja1").ActivateActiveSheet.Range("A1").Activate

‘ Buscar la primera celda vacía de la columna A y convertirla en activaDo While Not IsEmpty(ActiveCell)

ActiveCell.Offset(1,0).ActivateLoop

Nombre = InputBox("Introduzca el Nombre (Return para Terminar) : ", "Nombre")

‘ Mientras la variable Nombre sea diferente a cadena vacíaDo 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 = fechaEnd WithActiveCell.Offset(1,0).ActivateNombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

Loop

End Sub

Page 63: curso de macros y programacion excel.doc

Repetitiva (ciclo repeat):

El funcionamiento de esta estructura repetitiva es similar a la anterior salvo que la condición se evalúa 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 instrucción Repetir .. hasta se expresa con las instrucciones siguientes; . Do ... Loop Until y tiene la sintaxis siguiente:

DoSentencia1Sentencia2....Sentencia N

Loop Until ExpresiónLogica

Page 64: curso de macros y programacion excel.doc

Ejemplo 1 de Estructura repetitiva Do Loop Until

Esta estructura es más conveniente, al menos más elegante, si vamos a introducir datos, por lo menos un registro se introducirá y por lo tanto las instrucciones dentro del bucle se ejecutarán al menos una vez, al final del ciclo decidiremos si se repiten o no con la expresión lógica Mas_Datos = vbNo , si el usuario da clic al botón Si se repetirá el ciclo si oprime el botón No el ciclo terminará.

Sub EjemploUnoDoLoopUntil()Dim Nombre As StringDim Ciudad As StringDim Edad As IntegerDim fecha As DateWorkSheets("Hoja1").ActivateActiveSheet.Range("A1").Activate‘ Buscar la primera celda vacía de la columna A y convertirla en activaDo While Not IsEmpty(ActiveCell)

ActiveCell.Offset(1,0).ActivateLoopDo

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 WithActiveCell.Offset(1,0).ActivateMas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")‘Hasta que Mas_Datos sea igual a vbNo

Loop Until Mas_Datos=vbNoEnd Sub

Page 65: curso de macros y programacion excel.doc

Ejemplo 1 de Estructura repetitiva Do Loop While

Es otra estructura que evalúa la condición al final y es una variación de la estructura Do Loop Until . Hay que tomar en cuenta que la interpretación es distinta ya que el bucle se va repitiendo Mientras se cumple la condición y no Hasta que no se cumpla la condición. Cual de los dos utilizar, pues la que usted guste , la que entienda mejor o le guste más.

Sub EjemploUnoDoLoopWhile()Dim Nombre As StringDim Ciudad As StringDim Edad As IntegerDim fecha As DateWorkSheets("Hoja1").ActivateActiveSheet.Range("A1").Activate‘ Buscar la primera celda vacía de la columna A y convertirla en activaDo While Not IsEmpty(ActiveCell)

ActiveCell.Offset(1,0).ActivateLoopDo

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 = fechaEnd WithActiveCell.Offset(1,0).ActivateMas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")‘Mientras Mas_Datos = vbYes

Loop While Mas_Datos = vbYesEnd Sub

Page 66: curso de macros y programacion excel.doc

Repetitiva (ciclo for):

Esta estructura sirve para repetir la ejecución de una sentencia o bloque de sentencias, un número definido de veces. La estructura es la siguiente:

Para var =vi Hasta vf Paso incr HacerSentencia 1Sentencia 2...Sentencia N

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 según el valor de inca (incremento). En Visual Basic para Excel la estructura Para se implementa con la instrucción For ... Next y tiene la siguiente sintaxis;

For Varible = Valor_Inicial To Valor_Final Step IncrementoSentencia 1Sentencia 2...Sentencia N

Next Variable

Nota: Si el incremento es 1, no hace falta poner Step 1.

Page 67: curso de macros y programacion excel.doc

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 IntegerFor iContdor = 1 To 5

BeepNext

End Sub

Ejemplo 2 de la estructura repetitiva For .. to .. Next

Calcula cuanto dinero tendrá una persona después de un número de años determinado. En este ejemplo como en el anterior el incremento o step es de 1 .

Sub EjemploDosFor()Dim iNumeroDeAños As IntegerDim cAhorros As CurrencyDim iContador As IntegercAhorros = InputBox("Introduzca la cantidad que va a depositar en su cuenta:")iNumeroDeAños = InputBox("Introduzca el número de años que quiere ahorrar su dinero: ")For iContador = 1 To iNumeroDeAños

cAhorros = cAhorros * 1.1NextMsgBox "En " & iNumeroDeAños & " años tendrá " & _Format(cAhorros, "0.00") & " pesos."

End Sub

Ejemplo 3 de estructura repetitiva For.. to ..Next con uso de Step

Una operación 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

Page 68: curso de macros y programacion excel.doc

Propiedad Cells.

Esta propiedad, sirve para referenciar una celda o un rango de celdas según 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 IntegerDim i As IntegerFila = 1For i=2 To 10 Step 2

ActiveSheet.Cells(Fila,1).Value = iFila = 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 decrementándose hasta llegar a el 1 con el uso de Step -1.

Sub EjemploCuatroFor()Dim CeldaInicial As StringDim i As IntegerDim Fila As Integer, Columna As IntegerCeldaInicial = InputBox("Introducir la celda Inicial : ", "Casilla Inicial")ActiveSheet.Range(CeldaInicial).Activate‘ Coger el valor de fila de la celda activa sobre la variable FilaFila = ActiveCell.Row‘ Coger el valor de columna de la celda activa sobre la variable FilaColumna = ActiveCell.ColumnFor i = 10 To 1 Step -1

ActiveSheet.Cells(Fila, Columna).Value = iFila = Fila + 1

Next i

End Sub

Page 69: curso de macros y programacion excel.doc

Estructura For Each.

Este bucle se utiliza básicamente para ejecutar un grupo de sentencias con los elementos de una colección o una matriz (pronto veremos los que es). Recuerde que una colección es un conjunto de objetos, hojas, rangos, etc. Vea el ejemplo siguiente que se utiliza para cambiar los nombres de las hojas de un libro de trabajo.

Ejemplo 1 de la estructura repetitiva For Each.

Programa que pregunta el nombre para cada hoja de un libro de trabajo, si no se pone nombre a la hoja, queda el que tiene.

Sub Ejemplodeforeach()Dim Nuevo_Nombre As StringDim Hoja As WorkSheet‘ Para cada hoja del conjunto WorkSheetsFor Each Hoja In WorkSheets

Nuevo_Nombre=InputBox("Nombre de la Hoja : " & Hoja.Name,"Nombrar Hojas")If Nueva_Nombre <> "" Then

Hoja.Name=Nuevo_nombreEnd if

NextEnd Sub

Nota: Hoja va referenciando cada una de las hojas del conjunto WorkSheets a cada paso de bucle.

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 activaFor Each R in ActiveSheet.Range("A1:B10")

R.Value = InputBox("Entrar valor para la celda " & R.Address, "Entrada de valores")

NextEnd 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 más casillas, estas variables pueden luego utilizar todas las propiedades y métodos propios de los Objetos Range. Tenga en cuenta que la asignación de las varaibles que sirven para guardar o referenciar objetos (Range, WorkSheet, etc.) deben inicializarse muchas veces a través de la instrucción SET.

Page 70: curso de macros y programacion excel.doc

1.5.5. INSERCIÓN DE CÓDIGO EN UNA MACRO EXISTENTE.

La inserción de código en una macro existente es una de las operaciones más comunes que se pueden realizar con el Editor de Visual Basic ya que permite trabajar fácilmente si usted ya esta familiarizado con Microsoft Word puede utilizar las teclas de navegación para ubicar texto de código y copiar y pegar.

Teclas de Navegación

Para ir a Oprima esta tecla

Principio de línea Inicio

Fin de línea Fin

Principio de módulo Ctrl + Inicio

Fin de módulo Ctrl + Fin

Siguiente Palabra Ctrl + Flecha derecha

Palabra Anterior Ctrl + Flecha izquierda

Procedimiento siguiente

Ctrl + Flecha hacia arriba

Procedimiento anterior Ctrl + Flecha hacia abajo

Copiar código 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 código para funcionar correctamente, algunos ejemplos son útiles para ver cómo se comporta un procedimiento particular en una técnica de flujo de control.

Copiar código de ejemplo de la Ayuda a la aplicación

1. Utilice Ayuda para mostrar el tema cuyo ejemplo desea utilizar. Por ejemplo la ayuda sobre el método SaveAs del objeto WorkBook.

2. Seleccione la parte del código que desea copiar oprimiendo el botón derecho del ratón , ver figura 29 . También si lo prefiere puede Seleccionar todo el menú contextual oprimiendo el botón derecho del ratón.

3. Elija Copiar del menú contextual.

Page 71: curso de macros y programacion excel.doc

Figura 29. Muestra la selección del código que se desea probar en la ventana de

ayuda de Microsoft Visual Basic.

4. Alterne a la ventana Código del Editor de Visual Basic y coloque el puntero del mouse donde desea insertar el código. Se recomienda crear un nuevo procedimiento para alojar dicho código con el comando Insertar | Procedimiento... , ver figura 30

Figura 30. Se recomienda crear un nuevo procedimiento para probar código.

Page 72: curso de macros y programacion excel.doc

5. Ubique el punto de inserción dentro del procedimiento vació recién creado y haga clic con el botón secundario del mouse de nuevo y elija Pegar para insertar el ejemplo de código en la ventana Código , ver figura 31.

Figura 31. Código insertado dentro del procedimiento existente para ser probado.

Nota: También puede presionar CTRL+C para copiar un ejemplo seleccionado en la ventana Ayuda. Presione CTRL+V para pegar el ejemplo en la ventana Código.

Page 73: curso de macros y programacion excel.doc

2. FUNCIONES PERSONALIZADAS

2.1. CONCEPTO DE FUNCIÓN DEFINIDA POR EL USUARIO (FDU)

Funciones.

Una función o función definida por el usuario es lo mismo que un procedimiento con la diferencia de que este devuelve un valor al procedimiento o función que lo llama. Vea el siguiente ejemplo, de una función que suma dos números y devuelve el resultado.

Ejemplo uno de Función

Función que devuelve la suma de dos valores que se le pasan como parámetros. Observe las diferentes formas en como se llama la función.

Sub EjemploUnoFuncion()Dim x As IntegerDim n1 As Integer, n2 As Integer

x = Suma(5, 5)MsgBox "x=Suma(5,5): " & xn1 = Val(InputBox("De un número n1: ", "Entrada"))n2 = Val(InputBox("De otro número n2 : ", "Entrada"))x = Suma(n1, n2)MsgBox "x=Suma(n1,n2): " & xActiveCell.Value = Suma(ActiveSheet.Range("A1").Value, ActiveSheet.Range("A2").Value)MsgBox "x=Suma(A1,A2): " & ActiveCell.Valuex = 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 IntegerDim Total As IntegerTotal = V1 + V2Suma = Total

End Function

Page 74: curso de macros y programacion excel.doc

2.2. DISEÑO DE UNA FDU

Las funciones en VBA no son oficialmente macros, aun cuando desde el punto de vista técnico de la programación no haya mucha diferencia entre ambas. Las funciones no aparecen en la lista del cuadro de selección de macros. A cambio, se pueden activar desde las hojas de cálculo de Excel y ser utilizadas como alternativa a las funciones de Excel (la única condición es que estén contenidas en un módulo general )

2.2.1. NOMBRE Y ARGUMENTOS

Observe la sintaxis de la cabecera de función del apartado anterior:

Function Suma(V1 As Integer, V2 As Integer) As Integer

La estructura general seria:

Function Nombre_Funcion(par1 As Tipo, par2 As Tipo,..., parN As Tipo) As Tipo.

La sintaxis es similar a la cabecera de un procedimiento, sólo que una función tiene tipo, esto tiene su lógica, ya que una función devuelve un valor, ese valor será de un tipo determinado. Así, en nuestro ejemplo de Function Suma, esta función es de tipo Integer, o dicho de otra manera, la función ejecuta sus sentencias y devuelve un valor hacia el procedimiento o la función que la llamó, el valor devuelto se establece igualando el nombre de la función a algo,

Nombre_Función = ....

En el ejemplo de Function Suma,

Suma = Total

Observe también la sintaxis de la llamada a la función, en el ejemplo hemos utilizado unas cuantas formas de llamarla, lo que debe tener siempre presente es que en cualquier expresión aritmética o de cálculo, se realizan un mínimo de dos operaciones, una de cálculo y otra de asignación. Por ejemplo, A= B+C . La computadora primero calcula el resultado de sumar B+C luego asigna ese resultado a la variable A. En cualquier llamada a una función, por ejemplo, X= suma(n1,n2) Primero se ejecutan todas las sentencias de la función Suma, luego se asigna el cálculo de la función a la variable X. De otro vistazo a la función de ejemplo y vea lo que realiza cada sentencia en la que se llama a la función Suma.

2.2.2. FUNCIONES DISPONIBLES EN VBA

VBA ofrece al usuario funciones muy potentes. Efectivamente, VBA ofrece una gran cantidad de funciones integradas en las que, además de las funciones matemáticas que son las más comunes, se incluyen también funciones para el procesamiento de cadenas de caracteres, funciones de conversión de tipos, funciones de fecha y una larga serie de funciones especiales. La siguiente tabla contiene las funciones de VBA más 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.

Page 75: curso de macros y programacion excel.doc

Tabla de funciones utilizadas comúnmente en Visual Basic para Aplicaciones

Función Significado

Cos Devuelve un tipo Double que especifica el coseno de un ángulo en radianes

DateAdd Devuelve un valor de tipo Variant (Date) con una fecha a la que se ha agregado un intervalo de tiempo especificado.

DateDiff Devuelve un valor de tipo Variant (Long) que especifica el número de intervalos de tiempo entre dos fechas determinadas.

DatePart Devuelve un valor de tipo Variant (Integer) que contiene la parte especificada de la fecha dada.

Exp Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia.

FixDevuelve la parte entera de un número.

FreeFileDevuelve un tipo Integer que indica el siguiente número de archivo disponible para su uso en la instrucción Open.

HourDevuelve un valor de tipo Variant (Integer) que especifica un número entero entre 0 y 23, inclusive, que representa la hora del día.

InstrDevuelve un tipo Variant (Long) que especifica la posición de la primera aparición de una cadena en otra.

IntDevuelve la parte entera de un número.

LeftDevuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado izquierdo de una cadena.

LenDevuelve un tipo Long que contiene el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.

Log Devuelve un tipo Double que especifica el logaritmo natural de un número.

MonthNameDevuelve una cadena que indica el mes especificado.

Now Devuelve un valor de tipo Variant (Date) que especifica la fecha y hora actuales de acuerdo con la configuración de la fecha y la hora del sistema de su equipo.

Rigth Devuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado derecho de una cadena

Rnd Devuelve un tipo Single que contiene un número aleatorio.

SecondDevuelve un valor de tipo Variant (Integer) que especifica un número entero entre 0 y 59, inclusive, que representa un segundo.

Time Devuelve un valor de tipo Variant (Date) indicando la hora actual del sistema.

Trim 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).

WeekdayDevuelve un valor de tipo Variant (Integer) que contiene un número entero que representa el día de la semana.

YearDevuelve un valor de tipo Variant (Integer) que contiene un número entero que representa el año.

Page 76: curso de macros y programacion excel.doc

2.3. USO DE UNA FDU

2.3.1. FLEXIBILIDAD Y ADAPTACIÓN

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 más 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 más 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 método. El ejemplo siguiente , ver figura 32 muestra como, a través de la función 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 activaSub ValorMedio()

Dim rngArea As RangeDim sngValorMedio As SingleSet rngArea = ActiveSheet.Range("A2:C2")sngValorMedio = Application.WorksheetFunction.Average(rngArea)MsgBox Prompt:="El valor medio es: " & sngValorMedio

End Sub

Figura 32. Macro con función activable Average. Muestra la flexibilidad que tiene VBA para invocar funciones de Excel con el Objeto Application.

Page 77: curso de macros y programacion excel.doc

Activar funciones VBA en Excel.

La operación inversa también desempeña 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 función a través 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 módulo general (si forma parte de un módulo de hoja de cálculo, no se puede activar).

3. El nombre del procedimiento se puede escribir directamente en la celda, o bien se puede seleccionar a través del asistente de funciones, tal como se hace con las funciones integradas.

4. Los parámetros se trasmiten entre paréntesis, igual que las funciones integradas de Excel.

El ejemplo siguiente muestra cómo se puede activar una sencilla función VBA desde una celda de Excel. La función NumeroPrimitivo devuelve un número aleatorio dentro del intervalo 1 a 49.

Public Function NumeroPrimitiva() As IntegerDim intNumeroPrimitiva As IntegerRandomize TimerintNumeroPrimitiva = Int(Rnd * 49) + 1NumeroPrimitiva = intNumeroPrimitiva

End Function

Los pasos para activar la función 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 botón derecho del ratón. Seleccione la opción Insertar | Módulo. , ver figura 33 . Si usted lo prefiere también pudo haber seleccionado el comando Insertar | Módulo de la barra de menús del editor de Visual Basic.

8. Seleccione Insertar | Procedimiento. En el cuadro de texto Nombre del Cuadro de diálogo Agregar procedimiento escriba el nombre de la función. En Tipo, el botón de opción Función debe estar seleccionado ,vea figura 34. De clic en Aceptar, se agrega una función vacía, esto es, sin sentencias:

Page 78: curso de macros y programacion excel.doc

Public Function NumeroPrimitiva()

End Function

3. Agregue al cuerpo de la función las sentencias para que quede así:

Public Function NumeroPrimitiva() As IntegerDim intNumeroPrimitiva As IntegerRandomize TimerintNumeroPrimitiva = Int(Rnd * 49) + 1NumeroPrimitiva = intNumeroPrimitiva

End Function

4. Vuelva a Excel e inserte con el comando Insertar | Función la función NumeroPrimitiva() en la celda que guste , vea figura 35.

Figura 33. Insertar un módulo general al proyecto para crear la función VBA.

Figura 34. Insertar un procedimiento de tipo función con el nombre NumeroPrimitiva

Page 79: curso de macros y programacion excel.doc

Figura 35. El asistente de funciones de Excel reconoce la nueva función NumeroPrimitiva definida por el usuario.

Ahora supongamos que usted quiere que la función sea más flexible, esto es, que en lugar de que nos devuelva un número aleatorio del 1 al 49 como ya estaba establecido anteriormente. Digamos que usted quiere que le permita un número aleatorio que este comprendido en un rango mayor o menor. Esto lo podemos resolver modificando la función NumeroPrimitiva con el editor de Visual Basic. Siga los siguientes pasos para la realización:

1. Abra el editor de VBA y ubique la función NumeroPrimitiva.

2. Modifique la función de la siguiente manera:

Function NúmeroPrimitiva(limite As Integer) As IntegerDim intNúmeroPrimitiva As IntegerRandomize TimerintNúmeroPrimitiva = Int(Rnd * limite) + 1NúmeroPrimitiva = intNúmeroPrimitiva

End Function

1. Como puede observar hemos agregado el parámetro limite para conseguir que sea más flexible la función definida por el usuario.

2. Vuelva a Excel e inserte con el comando Insertar | Función la función NumeroPrimitiva(limite) en la celda que guste. , vea figura 36. Observe que ahora ya nos pide el valor del argumento, de un número entero como el 1000 para probar la función.

Page 80: curso de macros y programacion excel.doc

Figura 36. La función definida por el usuario (FDU) se ha vuelto más flexibleporque ahora nos pide un argumento en el asistente de insertar función.

2.4. DEPURACIÓN

A medida que los programas van creciendo la probabilidad de cometer errores también va creciendo. Los errores se clasifican normalmente en tres categorías.

Errores en tiempo de compilación. Son los típicos 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 número de parámetros 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 rápidamente.

Errores en tiempo de ejecución. Estos errores se producen por una mala programación del código 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 dimensión de un array e intentar acceder a miembros que no existen, etc. Cuando se produce este tipo de errores se detiene la ejecución 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 más adelante.

Errores de función. Son los más complicados de detectar ya que ni se detectan en la fase de ejecución, ni provocan la detención del programa, son debidos a la incorrecta programación de algún proceso y como resultado se obtienen datos erróneos. Errores de este tipo son cálculos mal hechos, bucles infinitos, devolución de valores incorrectos, etc. Como ni los detecta el compilador, ni provocan la interrupción del programa deben revisarse a mano (prueba de escritorio), y claro, si el programa es extenso y trata muchos datos, su detección puede resultar dificultosa. Visual Basic, y todos los entornos de programación incorporan herramientas para facilitar la detección de este tipo de errores, son las herramientas de depuración. Antes de comenzar a describir como funcionan estas herramientas, le recomendamos, que modularice su programa utilizando procedimientos cortos que realicen trabajos concretos y

Page 81: curso de macros y programacion excel.doc

precisos, de esta forma conseguirá, además de que el programa quede más elegante y en un futuro sea más sencillo modificarlo, evitar el tener que revisar grandes bloques de código para detectar errores de este tipo.

Herramientas de depuración.

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 serán utilizados por las funciones que utilizaremos para explicar el funcionamiento de las herramientas de depuración.

Copie el código siguiente, es el que utilizaremos para estudiar y ver ejemplos sobre las herramientas de depuración. La primera (Sub Prueba) recorre los datos de las columnas hasta encontrar una vacía, esta función va llamando a Recorrer_Columna, sirve para recorrer las filas de una columna hasta encontrar una vacía, va sumando los valores que encuentra en las filas y va contando cuantas hay de llenas, al final llama a la función Cálculos, esta función 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 ejecútelas para comprobar su correcto funcionamiento antes de proceder al estudio de las herramientas de depuración.

Sub Prueba()Worksheets(1).Range("B2").Activate' Recorrer las casillas de una fila hasta que se encuentre una vacíaDo While Not IsEmpty(ActiveCell)

Call Recorrer_ColumnaActiveCell.Offset(0, 1).Activate

LoopEnd Sub

Page 82: curso de macros y programacion excel.doc

Private Sub Recorrer_Columna()Dim Suma_Columna As Long 'Suma de los valores de la columnaDim Mayor_Que_Cero As Integer ' Contar casillas con valores mayores que ceroDim Desp_Fila As Integer ' Incremento de FilaSuma_Columna = 0Mayor_Que_Cero = 0Desp_Fila = 0' Recorrer las filas de una columna hasta que se encuentre una vacíaDo While Not IsEmpty(ActiveCell.Offset(Desp_Fila, 0))

If ActiveCell.Offset(Desp_Fila, 0).Value > 0 ThenSuma_Columna = Suma_Columna + ActiveCell.Offset(Desp_Fila, o).ValueMayor_Que_Cero = Mayor_Que_Cero + 1

End IfDesp_Fila = Desp_Fila + 1

LoopCall 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 = SumaActiveCell.Offset(F + 3, 0).Value = QActiveCell.Offset(F + 4, 0).Value = Suma / Q

End Sub

Active la barra de depuración para ver los botones que se utilizarán en las secciones que se explican a continuación (Ver/ Barras de Herramientas/ Depuración)., vea figura 37.

Figura 37. Barra de herramientas de depuración de Visual Basic

Modo Ejecución paso a paso por instrucciones.

El modo paso a paso permite la ejecución del programa instrucción por instrucción, de esta forma es posible ver que el funcionamiento del programa es el correcto, es decir que la ejecución de instrucciones sigue los pasos que se habían previsto.

Para ejecutar un procedimiento paso a paso, sólo debe ir pulsando sobre el

botón , activar la opción de menú Depuración /Paso a Paso por Instrucciones o ir pulsando la tecla F8, que seguramente es lo más cómodo.

Page 83: curso de macros y programacion excel.doc

Ejemplo 1 de depuración Paso a Paso por Instrucciones

1. Sitúe el cursor dentro del procedimiento Prueba.

2. Vaya pulsando la tecla F8 y vea como se ejecuta una sola instrucción por cada pulsación. Puede ir alternando con la hoja de cálculo para ver que es lo que ocurre cada vez que se ejecuta una instrucción. Cuando esté ejecutando paso a paso puede utilizar los botones siguientes para llevar a cabo determinadas acciones.

Sirve para detener la ejecución del programa.

Sirve para ejecutar el resto del programa.

Sirve para ejecutar todo un procedimiento. Cuando en la ejecución de un procedimiento, se llega a una línea que llama a otro procedimiento o función, pulsando este botón se puede provocar la ejecución de todo el código de esta función para luego continuar con el modo paso a paso.

Ejemplo 2 de depuración.

1. Sitúe el cursor dentro del procedimiento Prueba.

2. Vaya ejecutando paso a paso hasta la línea

Call Recorrer_Columna

1. En este punto pulse el botón , y observe como se ejecuta toda el procedimiento Recorrer_Columna para luego continuar con la ejecución normal de Paso a Paso. Para activar esta opción, también puede activar la opción Depuración/ Paso a paso por procedimientos, o bien pulsar la combinación MAY+F8.

Sirve para ejecutar todas las instrucciones del procedimiento activo y volver (o terminar).

Ejemplo 3 de depuración.

1. Sitúe el cursor dentro del procedimiento Prueba.

2. Vaya ejecutado paso a paso hasta la instrucción

Mayor_Que_Cero = Mayor_Que_Cero + 1

Ya dentro del procedimiento Recorrer_Columna. Pulse sobre el botón y verá como se termina la ejecución de este procedimiento y se vuelve al procedimiento Prueba para continuar con la ejecución paso a paso. Para activar esta opción, también puede la opción Depuración/ Paso a paso para salir, o bien pulsar la combinación CONTROL+ MAY+ F8.

Page 84: curso de macros y programacion excel.doc

El modo Interrupción.

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 iinterrupción, permite la ejecución del programa hasta una instrucción determinada para que a partir de esta, ejecutar paso a paso y así poder detectar el error.

Definir puntos de interrupción.

1. Sitúe el cursor sobre la instrucción en la cual debe detenerse el programa para continuar paso a paso.

2. Pulse sobre el botón . También puede activar la opción Depuración/ Alternar punto de interrupción, pulsar la tecla F9 o bien hacer un clic en la parte izquierda de la ventana del módulo (la franja vertical en color gris). Para desactivar un punto de interrupción siga los mismos pasos.

Solucionar los errores.

Todo lo dicho anteriormente no serviría de gran cosa si no fuera posible revisar los valores que las variables van cogiendo a medida que vamos avanzando o si no tuviéramos ocasión de evaluar las expresiones del programa. A continuación veremos como llevar a cabo estas acciones.

Inspecciones rápidas 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 inspección, para

activarla Ver/ Ventana de Inspección o pulse sobre el botón.

Añadir una variable a la ventana de inspección.

Aunque no es necesario estar ejecutando el programa en modo paso a paso, es conveniente.

1. Seleccione la variable que desee añadir a la ventana haciendo un clic sobre ella.

2. Pulse sobre el botón , también puede activar Depuración/ Inspección rápida o pulsar la combinación MAY+F9. Aparece un cuadro de diálogo 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 botón Agregar para añadir la variable a la ventana de inspección.

Debe tener en cuenta que para revisar las variables las expresiones que les asignan valores deben de ejecutarse al menos una vez.

Page 85: curso de macros y programacion excel.doc

Ejemplo 4 de depuración.

1. Sitúe un punto de interrupción en la línea.

Mayor_Que_Cero = Mayor_Que_Cero + 1.

2. Ejecute el programa, cuando este se detenga en el punto de interrupción, sitúe el cursor sobre la variable Suma_Columna (puede ponerlo en cualquier parte).

3. Pulse sobre el botón .

4. Pulse sobre el botón 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 inspección.

Recuerde que puede agregar una variable a la ventana de inspección aunque no esté ejecutando el programa.

Nota: Suponemos que ya se habrá dado cuenta que cuando ejecuta el programa paso a paso, si sitúa el puntero de ratón sobre una variable, se muestra el valor de la misma.

Borrar una variable de la ventana de Inspección.

Sólo debe seleccionarla en la ventana de inspección y pulsar sobre la tecla SUPR.

Modificar el valor de una variable en tiempo de ejecución.

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 depuración.

1. Sitúe un punto de interrupción en la línea.

Mayor_Que_Cero = Mayor_Que_Cero + 1

2. Agregue a la ventana de inspección (si no está) la variable Suma_Columna.

3. Ejecute el programa, al detenerse, observe en la Ventana de Inspección 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 inspección.

5. Borre el valor que tiene, cámbielo por otro y pulse ENTER.

Ahora puede continuar con la ejecución normal del programa.

Page 86: curso de macros y programacion excel.doc

BIBLIOGRAFIA

Mindi Martin/Steven M.Hasen/Beth Klinger La Biblia de Excel 2000 Ed Anaya MultimediaMéxico, 2000

Monadjemi Peter VBA con Office 2000Boixareu Editores Alfaomega – MarcomboMéxico, 2001

Podlin Sharon Programación con Microsoft Excel 2000 en 24 hrs.Pearson EducationMéxico, 2001

Sánchez Claudio Técnicas avanzadas con Microsoft Excel 2000MP Ediciones S.A. / Manuales COMPUMAGAZINEArgentina, 2000

Wells Eric / Harshbarger Steve Microsoft Excel 97 Desarrollo de solucionesMcGraw Hill – Microsoft PressEspaña, 1998