none
Problema al exportar datos a Excel RRS feed

  • Pregunta

  • Hola, utilizo la siguiente función que encontré por ahí para exportar los datos de un MSHFlexGrid a una hoja de Excel:

    Public Function Exportar_Excel(sOutputPath As String, FlexGrid As Object) As Boolean
     
        On Error GoTo Error_Handler
     
        Dim o_Excel     As Object
        Dim o_Libro     As Object
        Dim o_Hoja      As Object
        Dim fila        As Long
        Dim Columna     As Long
          
        ' -- Crea el objeto Excel, el objeto workBook y el objeto sheet
        Set o_Excel = CreateObject("Excel.Application")
        Set o_Libro = o_Excel.Workbooks.Add
        Set o_Hoja = o_Libro.Worksheets.Add
          
        ' -- Bucle para Exportar los datos
        With FlexGrid
            For fila = 0 To .Rows - 1
                For Columna = 0 To .Cols - 1
                    o_Hoja.Cells(fila + 1, Columna + 1).Value = .TextMatrix(fila, Columna)
                Next
            Next
        End With
        o_Libro.Close True, sOutputPath
        ' -- Cerrar Excel
        o_Excel.Quit
        ' -- Terminar instancias
        Call ReleaseObjects(o_Excel, o_Libro, o_Hoja)
        Exportar_Excel = True
    Exit Function
     
    ' -- Controlador de Errores
    Error_Handler:
        ' -- Cierra la hoja y el la aplicación Excel
        If Not o_Libro Is Nothing Then: o_Libro.Close False
        If Not o_Excel Is Nothing Then: o_Excel.Quit
        Call ReleaseObjects(o_Excel, o_Libro, o_Hoja)
        If Err.Number <> 1004 Then MsgBox Err.Description, vbCritical
    End Function
    ' -------------------------------------------------------------------
    ' \\ -- Eliminar objetos para liberar recursos
    ' -------------------------------------------------------------------
    Private Sub ReleaseObjects(o_Excel As Object, o_Libro As Object, o_Hoja As Object)
        If Not o_Excel Is Nothing Then Set o_Excel = Nothing
        If Not o_Libro Is Nothing Then Set o_Libro = Nothing
        If Not o_Hoja Is Nothing Then Set o_Hoja = Nothing
    End Sub

    La función anda perfectamente ya que me crea el archivo de Excel con los datos. El problema es que si intento abrir dicho archivo de Excel sin cerrar mi aplicación el Excel se congela. Si previamente cierro mi aplicación, puedo abrir el archivo perfectamente y están los datos todo perfecto. Supongo que abrá algo que mi aplicación no finaliza o cierra, mi problema es que no entiendo bien el código de la función que pegué más arriba, aunque veo que cierra los objetos. Aquí está la llamada a la función:

    If Exportar_Excel(cm.FileName, grilla) Then
            MsgBox " Datos exportados en " & cm.FileName, vbInformation, "Exportar datos a Excel..."
    End If

    Bueno agradeceré cualquier orientación.

    viernes, 8 de octubre de 2010 18:10

Todas las respuestas