Volviendo al tema, todos los procesos de creacion de archivos Excel los terminaba con esto:
Código vb:
Ver originalTry
'---------------------------------
' Codigo que fuese
'---------------------------------
CerrarCOM(oExcel)
xlSheet = Nothing
xlBook = Nothing
oExcel = Nothing
GC.Collect()
ClearMemory()
Process.Start(oFileName)
Catch ex As OutOfMemoryException
Exit Function
Catch ex As Exception
CerrarCOM(oExcel)
xlSheet = Nothing
xlBook = Nothing
oExcel = Nothing
GC.Collect()
ClearMemory()
End Try
Dos de los métodos invocados están en el Module:
Código vb:
Ver originalFriend Function CerrarCOM(ByRef oComObject As Object) As Boolean
Try
If oComObject Is Nothing = False Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oComObject)
End If
Return True
Catch ex As Exception
Return False
End Try
End Function
#Region "Liberar Memoria no utilizada"
'Funcion de liberacion de memoria
Public Sub ClearMemory()
Try
Dim Mem As Process
Mem = Process.GetCurrentProcess()
SetProcessWorkingSetSize(Mem.Handle, -1, -1)
Catch ex As Exception
'Control de errores
End Try
End Sub
#End Region
Y un detalle que por allí no sabes: No puedes generar archivos de Excel si no tienes una impresora declarada (al menos hasta el VB.Net 2003), por lo que sería mejor comprobarlo antes.
Para ello, acá va una función de regalo (también iba en el Module):
Código vb:
Ver originalFriend Function VerificarPrinter() As Boolean
Dim oPrint As New Printing.PrinterSettings
Try
If (oPrint.InstalledPrinters.Count = 0) Then
MessageBox.Show("No se pueden realizar expotaciones a Excel si no existen" & vbNewLine & "impresoras definidas en esta PC.", "No se encontró impresora", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
Catch ex As Exception
Return False
End Try
Return True
End Function
Por cierto, espero que no me preguntes qué es el "GC.Collect()"...