You are on page 1of 14

Ediciones ENI

VBA EXCEL 2010


Programacin en Excel: Macros y Lenguaje VBA
Coleccin Recursos Informticos

Extracto del Libro

Captulo 8

A. Presentacin
Un evento es una accin del usuario o del sistema reconocido por un objeto de Microsoft Excel. El evento desencadena un procedimiento, asociado al evento del objeto activo. Estos procedimientos le permiten asociar un cdigo personalizado en respuesta a un evento que se produce en un objeto Excel (libro, hoja, formulario, grfico, etc.).

B. Escritura de eventos
1. Eventos de libro, de hoja o de formulario
Usted puede acceder a los procedimientos de eventos asociados a un objeto de la siguiente manera:

k k

En la ventana Explorador de proyectos, haga doble clic en el objeto deseado (libro, hoja o formulario) para hacer aparecer la ventana de cdigo correspondiente. Abra la lista desplegable a la izquierda de la ventana de cdigo y seleccione Workbook, Worksheet o UserForm, segn el objeto seleccionado.

264

VBA Excel 2010

Administracin de eventos

Tambin puede seleccionar un evento vinculado al objeto seleccionado en la lista desplegable de la derecha, para asociarle un cdigo personalizado. La ejecucin de los procedimientos de eventos, se puede desactivar en cualquier momento asignando el valor False a la propiedad EnableEvents del objeto Application.

Ejemplo Este ejemplo muestra cmo obtener un listado histrico de todos los hipervnculos visitados en la hoja de clculo activa.

Editions ENI - All rights reserved

Programacin en Excel

265

Captulo 8
Resultado en Excel:

2. Eventos del objeto Application


Se necesitan tres etapas para la escritura y ejecucin de los eventos del objeto Application. Etapa 1

Inserte un mdulo de clase: Insertar Mdulo de clase o abra la lista y haga clic en Mdulo de clase.

Una vez insertado el mdulo, asgnele un nombre.

Ejemplo Dele el nombre ObjApplication al mdulo de clase. Etapa 2

En el mdulo de clase, cree un objeto Application con el siguiente cdigo:


Public WithEvents NomObjeto As Application

266

VBA Excel 2010

Administracin de eventos
Ejemplo Creacin del objeto MiAplicacion como aplicacin.
Public WithEvents MiAplicacion As Application

El objeto as creado queda disponible en la lista de la izquierda del mdulo.

Seleccione el objeto creado en la lista de la izquierda del mdulo y luego seleccione el evento esperado en la lista de la derecha. Escriba el cdigo de los procedimientos que desea generar.

Ejemplo Creacin de dos procedimientos de eventos: el primero realiza la insercin de una nueva hoja; el segundo, la creacin de un nuevo libro.
Public WithEvents MiAplicacion As Excel.Application ________________________________________________________________________ Private Sub MiAplicacion_WorkbookNewSheet _ (ByVal Wb As Workbook, ByVal Sh As Object) Dim NomHoja As String ' Cada vez que se agrega una hoja se pide al usuario ' que introduzca un nombre que a continuacin se destinar a la hoja ' insertada tras las hojas existentes NomHoja = InputBox("Introduzca el nombre de la hoja") ActiveSheet.Name = NomHoja ActiveSheet.Move After:=Sheets(Sheets.Count) End Sub _______________________________________________________________________ Private Sub MiAplicacion_NewWorkbook(ByVal Wb As Workbook) Dim NbHojas As Integer Dim NbActual As Integer Dim Diferencia As Integer ' Por cada nuevo libro, ' solicitamos al usuario la cantidad de hojas ' Segn el caso, se agregan o eliminan las hojas necesarias Do NbHojas = Application.InputBox _ ("Cantidad de hojas?", Type:=1) Loop While NbHojas = False NbActual = Sheets.Count Diferencia = NbActual - NbHojas ' Eliminar las hojas de ms ' Eliminar los mensajes de alerta con el fin ' de no obtener mensajes en la eliminacin de hojas

Editions ENI - All rights reserved

Programacin en Excel

267

Captulo 8
Do While Diferencia > 0 Application.DisplayAlerts = False Sheets.Item(Diferencia).Select ActiveWindow.SelectedSheets.Delete Diferencia = Diferencia - 1 Loop ' Agregar hojas necesarias ' Se desactivan los eventos para ' no indicar los nombres de las nuevas hojas Do While Diferencia < 0 Application.EnableEvents = False Sheets.Add Diferencia = Diferencia + 1 Loop ' Reactivar eventos y alertas Application.EnableEvents = True Application.DisplayAlerts = True End Sub

Etapa 3

Active un mdulo cualquiera y conecte el objeto declarado en el mdulo de clase con el objeto Application para las siguientes instrucciones:
Dim NomVariable As New NomModuloDeClase Sub NomProced () Set NomVariable.NomObjeto = Application End Sub

Ejemplo Agregue el siguiente cdigo en el mdulo Declaraciones.


Option Explicit Dim app As New ObjApplication ________________________________________________________________________ Sub InicializaMiAplicacion() Set app.MiAplicacion = Application End Sub

268

VBA Excel 2010

Administracin de eventos
Finalmente, llame al procedimiento InicializaMiAplicacion al abrir el libro (mdulo de clase ThisWorkbook).
Private Sub Workbook_Open() InicializaMiAplicacion End Sub

Cuando se abra el libro, se ejecutarn automticamente los procedimientos de eventos creados durante la etapa 2 y se agregarn los libros o las hojas. Estos procedimientos se desactivarn al cerrar el libro.

3. Evento asociado a un grfico incrustado


La coleccin Charts (del objeto Workbook) contiene todos los grficos del libro especificado. Se necesitan tres etapas para la escritura y la ejecucin de los eventos asociados a un grfico incrustado. Etapa 1

Inserte un mdulo de clase: Insertar Mdulo de clase o abra la lista y haga clic en Mdulo de clase.

k
Editions ENI - All rights reserved

Una vez insertado el mdulo, asgnele un nombre.

Ejemplo Dele el nombre ObjGraficos al mdulo de clase. Etapa 2

En el mdulo de clase, cree un objeto grfico para el siguiente cdigo:


Public WithEvents NomObjeto As Chart

Programacin en Excel

269

Ediciones ENI

Aprenda a crear aplicaciones profesionales: Trabajos prcticos y respuestas

VBA Excel 2010


Coleccin Prcticas Tcnicas

Extracto del Libro

56

VBA Excel 2010


PRCTICAS TCNICAS

Captulo 4: Estructuras de control


X Duracin: 1 hora 45 X Palabras clave: condicin, X Objetivos
Aprender a usar las estructuras de decisin para testear las condiciones y realizar diferentes acciones segn el resultado obtenido. Conocer las instrucciones de iteracin que, asociadas a instrucciones condicionales, permiten escribir cdigo Visual Basic para la toma de decisiones y la repeticin de acciones. Encontrar estas estructuras en la continuacin del libro. En este captulo, nos limitaremos al empleo de cuadros de dilogo ya comentados. seleccin, test, alternativa, bifurcacin condicional, contador, iteracin, incrementar, decrementar, salida.

Requisitos previos
Para comprobar los requisitos previos necesarios, antes de iniciar esta prctica tcnica, responda a las siguientes preguntas (ciertas preguntas admiten ms de una respuesta): 1. Las siguientes estructuras son estructuras de decisin: a. If ... Then ... Else ... End If b. Do ... Loop c. Select Case ... Case ... End Select 2. Resultado = IIf(7 / 2 > 3, IIf(2.8 * 3.3 < 11, "X", "Y"), "Z") La variable Resultado contiene el valor: a. X b. Y c. Z 3. Las siguientes instrucciones, que pertenecen cada una a una estructura de control diferente, son correctas: a. Case If N1 > N2 b. Case A, B, C c. Case 1 to 10 d. Case Num, Is > 50 4. La palabra clave ElseIf: a. puede aparecer seguida de una clusula Else. b. es opcional. c. puede usarse muchas veces en un bloque If.
Editions ENI - Reproduccin prohibida

Estructuras de control
ENUNCIADOS DEL CAPTULO 4

57

5. Repeticin de instrucciones mientras que una condicin tenga el valor True: a. For Each . . . Next b. For ... Next c. Do ... Loop d. While ... Wend e. With ... End With Para las preguntas 6 a la 9, los tems son los mismos que los de la pregunta 5. 6. Uso de un contador para ejecutar instrucciones un cierto nmero de veces: a. For Each . . . Next b. For ... Next c. Do ... Loop d. While ... Wend e. With ... End With 7. Repetir un grupo de instrucciones para cada elemento de una tabla o de una coleccin: a. For Each . . . Next b. For ... Next c. Do ... Loop d. While ... Wend e. With ... End With 8. Repite un grupo de instrucciones la cantidad de veces indicada: a. For Each . . . Next b. For ... Next c. Do ... Loop d. While ... Wend e. With ... End With 9. Ejecutar una srie de instrucciones aplicadas a un nico objeto o a un tipo definido por el usuario: a. For Each . . . Next b. For ... Next c. Do ... Loop d. While ... Wend e. With ... End With Respuesta pg. 244
Editions ENI - Reproduccin prohibida

58 B

VBA Excel 2010


PRCTICAS TCNICAS

Enunciado 4.1: Verificar que el valor introducido es un nmero


Ejercicio 1 Duracin estimada: 10 minutos
Escriba un procedimiento ControlEntrada que muestra un cuadro de entrada y verifica que se trata de un nmero. En ese caso, realice la operacin que consiste en multiplicar el nmero por s mismo. En caso contrario, mostrar un mensaje. Ejemplo:

Sugerencia
Use la funcin IsNumeric para testear la entrada.

Ejercicio 2 Duracin estimada: 5 minutos


Complete el procedimiento anterior para que verifique que el operador ha hecho clic en el botn Aceptar. En caso contrario, mostrar un mensaje. Ejemplo:

Respuesta pg. 244


Editions ENI - Reproduccin prohibida

Estructuras de control
ENUNCIADOS DEL CAPTULO 4

59

Enunciado 4.2: Decir adis


Duracin estimada: 5 minutos
Complete el procedimiento Adios. ste muestra un cuadro de dilogo con el mensaje "Hasta pronto" si el operador hace clic en el botn S. Si no, muestra el mensaje "Continuamos". Ejemplo:

Sub Adios() Dim vMensaje As String Dim vEstilo, vElec As Integer vMensaje = "Desea cerrar Excel?" vEstilo = vbYesNo + vbDefaultButton2 . . . = MsgBox(vMensaje, vEstilo) If . . . = vbYes . . . MsgBox "Hasta pronto." . . . MsgBox "Continuamos." . . . End Sub

Sugerencia
ste es un extracto de la ayuda en lnea:

Respuesta pg. 245


Editions ENI - Reproduccin prohibida

60 D

VBA Excel 2010


PRCTICAS TCNICAS

Enunciado 4.3: Controlar la introduccin de una consonante o una vocal


Duracin estimada: 10 minutos
Escriba un procedimiento ConsonanteVocal que pida introducir una vocal o una consonante. Debe aparecer un mensaje segn si la entrada es: "Vocal", "Consonante" o un mensaje adecuado en caso de error. Ejemplo:

Sugerencia
Para testear la letra en mayscula.
vElec = UCase(vElec)

Respuesta pg. 245 E

Enunciado 4.4: Mostrar un mensaje segn la edad y el gnero


Duracin estimada: 15 minutos
Escriba un procedimiento SuEdad que pregunte la edad. Los mensajes sern distintos segn se trate de un hombre o de una mujer. Tener en cuenta tambin la cancelacin de la entrada y la introduccin de letras para la edad.

Editions ENI - Reproduccin prohibida

Estructuras de control
ENUNCIADOS DEL CAPTULO 4

61

Edad 0 - 17 18 - 30 31 - 50 > 50 Chico eres joven

Hombre

Usted todava es joven Usted comienza a envejecer

Para las mujeres, un slo mensaje: "Nunca se le pregunta la edad a una dama". Ejemplo:

Sugerencias
Declaracin de variables
Dim Dim Dim Dim vHombre As String * 1 vMujer As String * 1 vSexo vEdad As Single

Para mostrar el primer cuadro de dilogo:


vSexo = MsgBox("Usted es un hombre?", vbYesNo, "Su edad?")

Para mostrar el segundo cuadro de dilogo:


vEdad = InputBox("Qu edad tiene Usted?", , 0)

Respuesta pg. 246

Editions ENI - Reproduccin prohibida

You might also like