¿Cómo salir con gracia cerrando un archivo de Excel abierto en caso de error?
Utilizo el archivo dos .bat para ejecutar un archivo .vbs continuamente... Si ocurre algún error, el archivo por lotes ejecuta el vbscript nuevamente y continúa. El script se conecta vía Internet a un sitio para ejecutar algunas llamadas a la API. Ahora, cuando hay un problema de conexión o cualquier otro error, el control sale del script y mantiene abierto el archivo de Excel. De esta manera, muchos archivos de Excel se abren con cada error... El código es el siguiente... por favor, avíseme cómo cerrar el archivo de Excel en caso de error y luego salir del script con gracia.
'{{{{Some coding}}}}
dim objExcel, objWorkbook, objRange
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\temp.xlsx")
objExcel.Visible = True
'{{{{Some coding}}}}
objExcel.Cells(xlrow, 3).Value="Test"
objExcel.Cells(xlrow, 3).Select
objExcel.Activecell.Show
'{{{{Some coding}}}}
objExcel.Workbooks(1).save
objExcel.Workbooks(1).close
objExcel.Quit
Set objExcel = Nothing
Set objWorkbook = Nothing
WScript.Quit
gracias de antemano
Un posible enfoque es envolver el manejo de Excel en una clase personalizada:
Class Excel
Private xl
Private Sub Class_Initialize
Set xl = CreateObject("Excel.Application")
End Sub
Private Sub Class_Terminate
For Each wb In xl.Workbooks
wb.Saved = True 'discard unsaved changes
wb.Close 'close workbook
Next
xl.Quit 'quit Excel
End Sub
Public Function OpenWorkbook(filename)
Set OpenWorkbook = xl.Workbooks.Open(filename)
End Function
Public Function NewWorkbook
Set NewWorkbook = xl.Workbooks.Add
End Function
Public Property Get Workbooks
Set Workbooks = xl.Workbooks
End Property
End Class
El procedimiento Class_Terminate
se llama automáticamente cada vez que se destruye una instancia de clase. De esa manera, puede cerrar automáticamente los libros abiertos y salir de Excel.
La clase se puede utilizar así:
Set xl = New Excel
Set wb = xl.OpenWorkbook("C:\path\to\your.xlsx")
...
wb.Close