Está en la página 1de 3

Para realizar el ejemplo colocar en un formulario un control Datagrid llamado Datagrid1.

Luego desde el menú referencias marcar Activex Data Object para poder usar ADO

Crear una base de datos Access llamada bd1.mdb. Dentro de esta crear una tabla llamada Tabla1 con
algunos campos y registros. La base de datos debe estar en la carpeta donde está el proyecto de vb.

Colocar un Libro vacío de Excel llamado Libro1.xls

Por último agregar un Command1 que será el que ejecuta la función llamada Exportar_DataGrid. Esta
función se le debe enviar como parámetro el control Datagrid y un segundo parámetro que especifica la
cantidad de filas a exportar.

Nota: En el ejemplo se exportan todas las filas, indicando la propiedad AproxCount que devuelve dicho
número.

Código fuente del formulario:

Texto planoCopiar código fuenteImprimir

1. '***************************************************************************
2. '* Controles : Un Datagrid, un CommandButton y la referencia a ADO
3. '***************************************************************************
4.
5.
6. 'Variables para la base de datos
7. Dim cnn As Connection
8. Dim rs As Recordset
9.
10. 'Variables para Excel
11. Dim Obj_Excel As Object
12. Dim Obj_Libro As Object
13. Dim Obj_Hoja As Object
14.
15.
16.
17. Private Sub exportar_Datagrid(Datagrid As Datagrid, n_Filas As Long)
18.
19. On Error GoTo ErrSub
20.
21. Dim i As Integer, j As Integer
22.
23. If n_Filas = 0 Then
24. MsgBox "No hay datos para exportar a excel": Exit Sub
25. Else
26. Set Obj_Excel = CreateObject("Excel.Application")
27. Set Obj_Libro = Obj_Excel.Workbooks.Add(App.Path & "\libro1.xls")
28.
29. 'Ponemos la aplicación excel visible
30. Obj_Excel.Visible = True
31.
32. 'Hoja activa
33. Set Obj_Hoja = Obj_Excel.ActiveSheet
34.
35. ' Recorre el Datagrid
36. iCol = 0
37. For i = 0 To Datagrid.Columns.Count - 1
38. If Datagrid.Columns(i).Visible Then
39. iCol = iCol + 1
40. 'Caption de la columna
41. Obj_Hoja.Cells(1, iCol) = Datagrid.Columns(i).Caption
42.
43. For j = 0 To n_Filas - 1
44. 'asigna el valor a la celda del Excel
45. Obj_Hoja.Cells(j + 2, iCol) = _
46. Datagrid.Columns(i).CellValue(Datagrid.GetBookmark(j))
47. Next
48.
49. End If
50. Next
51.
52. 'Opcional : colocamos en negrita y de color rojo los enbezados en la hoja
53. Obj_Hoja.Rows(1).Font.Bold = True
54. Obj_Hoja.Rows(1).Font.Color = vbRed
55.
56. 'Autoajustamos
57. Obj_Hoja.Columns("A:Z").AutoFit
58. End If
59.
60. 'Eliminamos las variables de objeto excel
61. Set Obj_Hoja = Nothing
62. Set Obj_Libro = Nothing
63. Set Obj_Excel = Nothing
64.
65. Exit Sub
66.
67. 'Error
68. ErrSub:
69.
70. MsgBox Err.Description, vbCritical
71. On Error Resume Next
72.
73. Set Obj_Hoja = Nothing
74. Set Obj_Libro = Nothing
75. Set Obj_Excel = Nothing
76.
77. End Sub
78.
79. 'Ejecutamos la función que exporta los datos del datagrid a excel
80. Private Sub Command1_Click()
81. Call exportar_Datagrid(DataGrid1, DataGrid1.ApproxCount)
82. End Sub
83.
84. Private Sub Form_Load()
85.
86. 'Creamos un nuevo objeto conexión
87. Set cnn = New Connection
88.
89. 'Abrimos la base de datos. ( Cambiar la ruta )
90. cnn.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\bd1.mdb"
91.
92. 'Creamos un nuevo objeto Recordset
93. Set rs = New Recordset
94.
95. 'Llenamos el recordset ( ESPECIFICAR LA CONSULTA SQL )
96. rs.Open "Select * From tabla1", cnn, adOpenStatic, adLockOptimistic
97.
98. 'Llenemos el datagrid con el recordset anterior
99. Set DataGrid1.DataSource = rs
100.
101. 'Eliminamos la variable
102. Set cnn = Nothing
103.
104. Command1.Caption = " Exportar datagrid a Excel "
105.
106.End Sub
107.
108.Private Sub Form_Unload(Cancel As Integer)
109.
110. On Error Resume Next
111. rs.Close
112. cnn.Close
113. Set rs = Nothing
114. Set cnn = Nothing
115.
116.End Sub