Upload
juls-suigeneris
View
22
Download
6
Embed Size (px)
Citation preview
Controlar eventos para Excel mediante Visual Basic .NET En este artículo paso a paso se describe cómo controlar eventos de Excel desde un cliente de Automatización desarrollado con Visual Basic .NET.
Introducción al control de eventos
Hay dos formas de crear un controlador de eventos con Visual Basic .NET, dependiendo de cómo desee asociar el controlador de eventos a los eventos:
La manera estándar 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 automáticamente a los eventos de dicho objeto en tiempo de ejecución. Para controlar un evento específico de dicho objeto, agregue el controlador correspondiente mediante las listas de clases y métodos del entorno de Visual Studio .NET mientras está en la vista de códigos. 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 dinámicamente.
Crear el cliente de Automatización de Visual Basic .NET
En los pasos siguientes se describe cómo utilizar uno de los métodos para controlar eventos de Excel desde un cliente de Automatización desarrollado con Visual Basic .NET.
1. Inicie Microsoft Visual Studio .NET. En el menú Archivo, haga clic en Nuevo y, después, en Proyecto. En Proyectos de Visual Basic, seleccione Aplicación 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 número de versión; la versión para Excel 2000 es 9.0 y la de Excel 2002 es 10.0.
c. Haga clic en Aceptar en el cuadro de diálogo 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 módulo. Seleccione Módulo en la lista de plantillas y haga clic en Abrir. Pegue el código siguiente en el nuevo módulo:
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 cálculo.
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 cálculo.
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 cálculo 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 módulo al proyecto y pegue el código siguiente en el módulo:
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 cálculo.
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 Diseño.
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, después, cambie la propiedad Text de Button2 a Usa delegados .
109. En el menú Ver, seleccione Código para mostrar la ventana de código del formulario. Agregue el código 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 código
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 cálculo. 4. Agregue datos a las celdas de ambas hojas de cálculo. 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 cálculo. 7. Agregue datos a las celdas de ambas hojas de cálculo. 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 sesión de depuración.