6
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 . 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:

EventosExcel

Embed Size (px)

Citation preview

Page 1: EventosExcel

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:

Page 2: EventosExcel

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

Page 3: EventosExcel

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

Page 4: EventosExcel

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()

Page 5: EventosExcel

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

Page 6: EventosExcel

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.