Está en la página 1de 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. 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: 1.

4.

'================================================================= = 'Demuestra el uso de un delegado para el control de eventos '================================================================= =

5. 6.

7. 8. 9. Private xlApp As Excel.Application 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. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 'Agregar un controlador para el evento WorkbookBeforeClose del 'Obtener referencias a las tres hojas de clculo. xlSheet1 = xlBook.Worksheets.Item(1) xlSheet2 = xlBook.Worksheets.Item(2) xlSheet3 = xlBook.Worksheets.Item(3) CType(xlSheet1, Excel._Worksheet).Activate() 'Iniciar Excel y crear un nuevo libro. xlApp = CreateObject("Excel.Application") xlBook = xlApp.Workbooks.Add() xlBook.Windows(1).Caption = "Usa WithEvents"

29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.

'objeto Application. EventDel_BeforeBookClose = New Excel.AppEvents_WorkbookBeforeCloseEventHandler( _ AddressOf BeforeBookClose) AddHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose

'Agregar un controlador para el evento Change de ambos 'objetos Worksheet. EventDel_CellsChange = New Excel.DocEvents_ChangeEventHandler( _ AddressOf CellsChange) AddHandler xlSheet1.Change, EventDel_CellsChange AddHandler xlSheet2.Change, EventDel_CellsChange AddHandler xlSheet3.Change, EventDel_CellsChange

'Hacer que Excel sea visible y dar control al usuario. xlApp.Visible = True xlApp.UserControl = True

45. End Sub 46. 47. Private Sub CellsChange(ByVal Target As Excel.Range) 48. 49. 50. 51. End Sub 52. 53. Private Sub BeforeBookClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) 54. 55. 'Se le llama cuando se elige cerrar la hoja de clculo en Excel. 'Se quitan los controladores de eventos y se cierra el libro sin 'Se le llama cuando se modifica una o varias celdas de una hoja de clculo. Debug.WriteLine("Delegado: Cambi las celdas " + Target.Address + " en " + _ Target.Worksheet.Name())

56. 57. 58. 59. 60. 61. 62. 63. 64.

'guardar los cambios. Debug.WriteLine("Delegado: Cerrando el libro y quitando controladores de eventos.") RemoveHandler xlSheet1.Change, EventDel_CellsChange RemoveHandler xlSheet2.Change, EventDel_CellsChange RemoveHandler xlSheet3.Change, EventDel_CellsChange RemoveHandler xlApp.WorkbookBeforeClose, EventDel_BeforeBookClose 'Configurar el indicador de modificado como True para que no se 'pregunte si se desea guardar. 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. 78. 79. 'Iniciar Excel y crear un nuevo libro. xlApp = CreateObject("Excel.Application") xlBook = xlApp.Workbooks.Add()

80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.

xlBook.Windows(1).Caption = "Usa WithEvents"

'Obtener referencias a las tres hojas de clculo. xlSheet1 = xlBook.Worksheets.Item(1) xlSheet2 = xlBook.Worksheets.Item(2) xlSheet3 = xlBook.Worksheets.Item(3) CType(xlSheet1, Excel._Worksheet).Activate()

'Hacer que Excel sea visible y dar control al usuario. xlApp.Visible = True xlApp.UserControl = True

91. End Sub 92. 93. Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _ 94. 95. 96. 97. 98. ByRef Cancel As Boolean) Handles xlApp.WorkbookBeforeClose Debug.WriteLine("WithEvents: Cerrando el libro.") 'Configurar el indicador de modificado como True para que no se 'pregunte si se desea guardar 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. 104. 105. Private Sub xlSheet2_Change(ByVal Target As Excel.Range) Handles xlSheet2.Change End Sub

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. 112. 113. 114. 115. 116. 117. 118. End Sub Probar el cdigo 1. 2. 3. 4. 5. 6. 7. 8. Presione CTRL+ALT+O para mostrar la ventana de resultados. Presione F5 para generar y ejecutar el programa. En el formulario, haga clic en Usa WithEvents. El programa iniciar Excel y crear un libro con dos hojas de clculo. 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. Salga de Excel. En el formulario, haga clic en Usa delegados. De nuevo, el programa iniciar Excel y crear un libro con dos hojas de clculo. 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. Salga de Excel y cierre el formulario para terminar la sesin de depuracin. Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click UseDelegate() Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click UseWithEvents() End Sub

También podría gustarte