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