¿Cómo salir con gracia cerrando un archivo de Excel abierto en caso de error?

Resuelto Parag asked hace 10 años • 1 respuestas

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

Parag avatar Jan 18 '14 17:01 Parag
Aceptado

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_Terminatese 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
Ansgar Wiechers avatar Jan 18 '2014 15:01 Ansgar Wiechers