Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在出现错误时优雅地关闭打开的excel文件?_Excel_Vbscript - Fatal编程技术网

如何在出现错误时优雅地关闭打开的excel文件?

如何在出现错误时优雅地关闭打开的excel文件?,excel,vbscript,Excel,Vbscript,我使用dos.bat文件连续运行.vbs文件。。。如果出现任何错误,批处理文件将再次运行vbscript并继续运行。该脚本通过internet连接到站点以执行一些api调用。 现在,当出现连接问题或任何其他错误时,控制将从保持excel文件打开的脚本中出来。这样,每次出现错误时都会打开许多excel文件。。。代码如下。。。请告诉我如何在出现错误时关闭excel文件,然后优雅地退出脚本 '{{{{Some coding}}}} dim objExcel, objWorkbook,

我使用dos.bat文件连续运行.vbs文件。。。如果出现任何错误,批处理文件将再次运行vbscript并继续运行。该脚本通过internet连接到站点以执行一些api调用。 现在,当出现连接问题或任何其他错误时,控制将从保持excel文件打开的脚本中出来。这样,每次出现错误时都会打开许多excel文件。。。代码如下。。。请告诉我如何在出现错误时关闭excel文件,然后优雅地退出脚本

       '{{{{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

提前感谢

一种可能的方法是将Excel处理封装在自定义类中:

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
每当类实例被销毁时,就会自动调用过程
Class\u Terminate
。这样,您可以自动关闭打开的工作簿并退出Excel

该类可以这样使用:

Set xl = New Excel
Set wb = xl.OpenWorkbook("C:\path\to\your.xlsx")
...
wb.Close

谢谢你重新编写这个问题。我误解了这篇文章:)哇看起来很棒。。。对不起,我是vbscript的新手。。。但在我尝试之前,它应该是“end function”而不是“end sub”两次吗?谢谢了解一种避免编写(大量)包装函数的方法/解决方法。另外,我相信Ansgar会编辑小故障(结束函数,通过分配函数名返回)。@user3209506是的,它应该。已修复。@AnsgarWiechers-函数返回值如何?