You are on page 1of 6

Controlar eventos para Excel mediante Visual Basic

.NET


En este artculo paso a paso se describe cmo controlar eventos de Excel desde un cliente de
Automatizacin desarrollado con Visual Basic .NET.

Introduccin al control de eventos
Hay dos formas de crear un controlador de eventos con Visual Basic .NET, dependiendo de
cmo desee asociar el controlador de eventos a los eventos:
La manera estndar de crear un controlador de eventos consiste en utilizar la palabra
clave Handles con la palabra clave WithEvents. Cuando declara una variable mediante la
palabra clave WithEvents, Visual Basic .NET se conecta automticamente a los eventos
de dicho objeto en tiempo de ejecucin. Para controlar un evento especfico de dicho
objeto, agregue el controlador correspondiente mediante las listas de clases y mtodos
del entorno de Visual Studio .NET mientras est en la vista de cdigos. O bien
O bien Con la palabra clave AddHandler, Visual Basic .NET proporciona una segunda
forma de controlar eventos. AddHandler y RemoveHandler le permiten iniciar y detener
el control de un determinado evento dinmicamente.
Crear el cliente de Automatizacin de Visual Basic .NET
En los pasos siguientes se describe cmo utilizar uno de los mtodos para controlar eventos de
Excel desde un cliente de Automatizacin desarrollado con Visual Basic .NET.
1. Inicie Microsoft Visual Studio .NET. En el men Archivo, haga clic en Nuevo y, despus,
en Proyecto. En Proyectos de Visual Basic, seleccione Aplicacin para Windows. Se
crear Form1 de manera predeterminada.
2. Agregue una referencia a la Biblioteca de objetos de Microsoft Excel. Para ello, siga
estos pasos:
a. En el men Proyecto, haga clic en Agregar referencia.
b. En la ficha COM, busque Biblioteca de objetos de Microsoft Excel y haga clic
en Seleccionar.

NOTA: la biblioteca de objetos de Excel contiene un nmero de versin; la
versin para Excel 2000 es 9.0 y la de Excel 2002 es 10.0.
c. Haga clic en Aceptar en el cuadro de dilogo Agregar referencias para aceptar
sus selecciones. Si se le pregunta si desea generar contenedores para las
bibliotecas seleccionadas, haga clic en S.
3. En el men Proyecto, seleccione Agregar mdulo. Seleccione Mdulo en la lista de
plantillas y haga clic en Abrir. Pegue el cdigo siguiente en el nuevo mdulo:
4.
'=================================================================
=
5. 'Demuestra el uso de un delegado para el control de eventos
6.
'=================================================================
=
7.
8. Private xlApp As Excel.Application
9. Private xlBook As Excel.Workbook
10. Private xlSheet1 As Excel.Worksheet
11. Private xlSheet2 As Excel.Worksheet
12. Private xlSheet3 As Excel.Worksheet
13. Private EventDel_BeforeBookClose As
Excel.AppEvents_WorkbookBeforeCloseEventHandler
14. Private EventDel_CellsChange As Excel.DocEvents_ChangeEventHandler
15.
16. Public Sub UseDelegate()
17. 'Iniciar Excel y crear un nuevo libro.
18. xlApp = CreateObject("Excel.Application")
19. xlBook = xlApp.Workbooks.Add()
20. xlBook.Windows(1).Caption = "Usa WithEvents"
21.
22. 'Obtener referencias a las tres hojas de clculo.
23. xlSheet1 = xlBook.Worksheets.Item(1)
24. xlSheet2 = xlBook.Worksheets.Item(2)
25. xlSheet3 = xlBook.Worksheets.Item(3)
26. CType(xlSheet1, Excel._Worksheet).Activate()
27.
28. 'Agregar un controlador para el evento WorkbookBeforeClose del
29. 'objeto Application.
30. EventDel_BeforeBookClose = New
Excel.AppEvents_WorkbookBeforeCloseEventHandler( _
31. AddressOf BeforeBookClose)
32. AddHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose
33.
34. 'Agregar un controlador para el evento Change de ambos
35. 'objetos Worksheet.
36. EventDel_CellsChange = New Excel.DocEvents_ChangeEventHandler( _
37. AddressOf CellsChange)
38. AddHandler xlSheet1.Change, EventDel_CellsChange
39. AddHandler xlSheet2.Change, EventDel_CellsChange
40. AddHandler xlSheet3.Change, EventDel_CellsChange
41.
42. 'Hacer que Excel sea visible y dar control al usuario.
43. xlApp.Visible = True
44. xlApp.UserControl = True
45. End Sub
46.
47. Private Sub CellsChange(ByVal Target As Excel.Range)
48. 'Se le llama cuando se modifica una o varias celdas de una hoja de clculo.
49. Debug.WriteLine("Delegado: Cambi las celdas " + Target.Address + " en " + _
50. Target.Worksheet.Name())
51. End Sub
52.
53. Private Sub BeforeBookClose(ByVal Wb As Excel.Workbook, ByRef Cancel As
Boolean)
54. 'Se le llama cuando se elige cerrar la hoja de clculo en Excel.
55. 'Se quitan los controladores de eventos y se cierra el libro sin
56. 'guardar los cambios.
57. Debug.WriteLine("Delegado: Cerrando el libro y quitando controladores de
eventos.")
58. RemoveHandler xlSheet1.Change, EventDel_CellsChange
59. RemoveHandler xlSheet2.Change, EventDel_CellsChange
60. RemoveHandler xlSheet3.Change, EventDel_CellsChange
61. RemoveHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose
62. 'Configurar el indicador de modificado como True para que no se
63. 'pregunte si se desea guardar.
64. Wb.Saved = True
End Sub
65. Agregue otro mdulo al proyecto y pegue el cdigo siguiente en el mdulo:
66.
'=================================================================
=
67. 'Demuestra el uso de WithEvents para el control de eventos
68.
'=================================================================
=
69.
70. Private WithEvents xlApp As Excel.Application
71. Private xlBook As Excel.Workbook
72. Private WithEvents xlSheet1 As Excel.Worksheet
73. Private WithEvents xlSheet2 As Excel.Worksheet
74. Private WithEvents xlSheet3 As Excel.Worksheet
75.
76. Public Sub UseWithEvents()
77. 'Iniciar Excel y crear un nuevo libro.
78. xlApp = CreateObject("Excel.Application")
79. xlBook = xlApp.Workbooks.Add()
80. xlBook.Windows(1).Caption = "Usa WithEvents"
81.
82. 'Obtener referencias a las tres hojas de clculo.
83. xlSheet1 = xlBook.Worksheets.Item(1)
84. xlSheet2 = xlBook.Worksheets.Item(2)
85. xlSheet3 = xlBook.Worksheets.Item(3)
86. CType(xlSheet1, Excel._Worksheet).Activate()
87.
88. 'Hacer que Excel sea visible y dar control al usuario.
89. xlApp.Visible = True
90. xlApp.UserControl = True
91. End Sub
92.
93. Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _
94. ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose
95. Debug.WriteLine("WithEvents: Cerrando el libro.")
96. 'Configurar el indicador de modificado como True para que no se
97. 'pregunte si se desea guardar
98. Wb.Saved = True
99. End Sub
100.
101. Private Sub xlSheet1_Change(ByVal Target As Excel.Range) Handles
xlSheet1.Change
102. Debug.WriteLine("WithEvents: Cambi las celdas " + Target.Address + "
en Sheet1")
103. End Sub
104.
105. Private Sub xlSheet2_Change(ByVal Target As Excel.Range) Handles
xlSheet2.Change
106. Debug.WriteLine("WithEvents: Cambi las celdas " + Target.Address + "
en Sheet2")
End Sub
107. En el Explorador de soluciones, haga doble clic en Form1.vb para ver el formulario en la
vista Diseo.
108. En el men Ver, seleccione Cuadro de herramientas para mostrar el cuadro de
herramientas y agregue dos botones a Form1. Cambie la propiedad Text de Button1 a
Usa WithEvents y, despus, cambie la propiedad Text de Button2 a Usa delegados .
109. En el men Ver, seleccione Cdigo para mostrar la ventana de cdigo del formulario.
Agregue el cdigo siguiente a los controladores de eventos Click para los botones:
110.
111. Private Sub Button1_Click(ByVal sender As System.Object, _
112. ByVal e As System.EventArgs) Handles Button1.Click
113. UseWithEvents()
114. End Sub
115.
116. Private Sub Button2_Click(ByVal sender As System.Object, _
117. ByVal e As System.EventArgs) Handles Button2.Click
118. UseDelegate()
End Sub
Probar el cdigo
1. Presione CTRL+ALT+O para mostrar la ventana de resultados.
2. Presione F5 para generar y ejecutar el programa.
3. En el formulario, haga clic en Usa WithEvents. El programa iniciar Excel y crear un
libro con dos hojas de clculo.
4. Agregue datos a las celdas de ambas hojas de clculo. Examine la ventana de
resultados en Visual Studio para comprobar que se llama a los controladores de eventos.
5. Salga de Excel.
6. En el formulario, haga clic en Usa delegados. De nuevo, el programa iniciar Excel y
crear un libro con dos hojas de clculo.
7. Agregue datos a las celdas de ambas hojas de clculo. Examine la ventana de
resultados en Visual Studio para comprobar que se llama a los controladores de eventos.
8. Salga de Excel y cierre el formulario para terminar la sesin de depuracin.

You might also like