Visual Basic - Exportar datos del datagrid a excel

Life is soft - evento anual de software empresarial
 
Vista:

Exportar datos del datagrid a excel

Publicado por Giampier (4 intervenciones) el 02/02/2010 08:04:35
Buenas noches:
tengo el siguiente problema, quiero exportar mis datos cargados en un datagrid a una tabla excel, (uso visual basic y office 2003), tengo esta codificacion:


' -- Variables para la base de datos
Dim cnn As Connection
Dim rs As Recordset
' -- Variables para Excel
Dim Obj_Excel As Object
Dim Obj_Libro As Object
Dim Obj_Hoja As Object

' -----------------------------------------------------------------------------------------
' \\ -- Sub para exportar
' -----------------------------------------------------------------------------------------
Private Sub exportar_Datagrid(Datagrid As Datagrid, n_Filas As Long)

On Error GoTo Error_Handler

Dim i As Integer
Dim j As Integer

' -- Colocar el cursor de espera mientras se exportan los datos
Me.MousePointer = vbHourglass

If n_Filas = 0 Then
MsgBox "No hay datos para exportar a excel. Se ha indicado 0 en el parámetro Filas ": Exit Sub
Else

' -- Crear nueva instancia de Excel
Set Obj_Excel = CreateObject("Excel.Application")
' -- Agregar nuevo libro
Set Obj_Libro = Obj_Excel.Workbooks.Open(Path)

' -- Referencia a la Hoja activa ( la que añade por defecto Excel )
Set Obj_Hoja = Obj_Excel.ActiveSheet

iCol = 0
' -- Recorrer el Datagrid ( Las columnas )
For i = 0 To Datagrid.Columns.Count - 1
If Datagrid.Columns(i).Visible Then
' -- Incrementar índice de columna
iCol = iCol + 1
' -- Obtener el caption de la columna
Obj_Hoja.Cells(1, iCol) = Datagrid.Columns(i).Caption
' -- Recorrer las filas
For j = 0 To n_Filas - 1
' -- Asignar el valor a la celda del Excel
Obj_Hoja.Cells(j + 2, iCol) = _
Datagrid.Columns(i).CellValue(Datagrid.GetBookmark(j))
Next
End If
Next

' -- Hacer excel visible
Obj_Excel.Visible = True

' -- Opcional : colocar en negrita y de color rojo los enbezados en la hoja
With Obj_Hoja
.Rows(1).Font.Bold = True
.Rows(1).Font.Color = vbRed
' -- Autoajustar las cabeceras
.Columns("A:Z").AutoFit
End With
End If

' -- Eliminar las variables de objeto excel
Set Obj_Hoja = Nothing
Set Obj_Libro = Nothing
Set Obj_Excel = Nothing

' -- Restaurar cursor
Me.MousePointer = vbDefault

Exit Sub

' -- Error
Error_Handler:

MsgBox Err.Description, vbCritical
On Error Resume Next

Set Obj_Hoja = Nothing
Set Obj_Libro = Nothing
Set Obj_Excel = Nothing
Me.MousePointer = vbDefault

End Sub

' -------------------------------------------------------------------------------
' \\ -- Botón para Ejecutar la función que exporta los datos del datagrid a excel
' -------------------------------------------------------------------------------
Private Sub Command1_Click()
Call exportar_Datagrid(DataGrid1, DataGrid1.ApproxCount)
End Sub
' -------------------------------------------------------------------------------
' \\ -- Inicio
' -------------------------------------------------------------------------------
Private Sub Form_Load()

On Error GoTo Error_Handler

' -- Crear nueva conexión a la base de datos
Set cnn = New Connection

' -- Abrir la base de datos.
cnn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\bd1.mdb"

' -- Crear nuevo objeto Recordset
Set rs = New Recordset
' -- Configurar recordset
With rs
.CursorLocation = adUseClient
End With
' -- Cargar el recordset ( ESPECIFICAR LA CONSULTA SQL )
rs.Open "Select * From tabla1", cnn, adOpenStatic, adLockOptimistic

' -- Enlazar el datagrid con el recordset anterior
Set DataGrid1.DataSource = rs


Command1.Caption = " Exportar datagrid a Excel "

' -- Errores
Exit Sub
Error_Handler:
MsgBox Err.Description, vbCritical, "Error en Form Load"
End Sub
' -------------------------------------------------------------------------------
' \\ -- Fin
' -------------------------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)

On Error Resume Next
' -- Cerrar y eliminar recordset
If rs.State = adStateOpen Then rs.Close
If Not rs Is Nothing Then Set rs = Nothing
' -- cerrar y Eliminar la conexión
If cnn.State = adStateOpen Then cnn.Close
Set cnn = Nothing
End Sub

Al momento de ejecutarlo; me arroja el siguiente error:

ERROR '13' EN TIEMPO DE EJECUCION:
NO COINCIDEN LOS TIPOS.

y me lleva a esta instancia, como si aqui estubiera el error
Private Sub Command1_Click()
Call exportar_Datagrid(DataGrid1, DataGrid1.ApproxCount)
End Sub

favor su pronto apoyo, adjunto ruta donde subi el proyecto.

gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Exportar datos del datagrid a excel

Publicado por ChidUng (44 intervenciones) el 04/02/2010 18:24:18
Usa esto:

Call exportar_Datagrid(DataGrid1, CLng ( DataGrid1.ApproxCount ) )

Creo que con eso corriges tu problema.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Exportar datos del datagrid a excel

Publicado por Ignacio (1 intervención) el 31/07/2022 08:56:28
despues de tantos años, hoy le heche mano al codigo y me encontre con el mismo problema.
aplique la corrección que sugirio ChidUng, pero sigue igual
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar