【问题标题】:How to exit gracefully closing open excel file on error?如何在错误时优雅地退出关闭打开的excel文件?
【发布时间】:2014-02-07 18:42:05
【问题描述】:

我使用 dos .bat 文件连续运行 .vbs 文件...如果发生任何错误,批处理文件会再次运行 vbscript 并继续运行。该脚本通过互联网连接到一个站点以执行一些 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 vbscript


    【解决方案1】:

    一种可能的方法是将 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_Terminate。这样您就可以自动关闭打开的工作簿并退出 Excel。

    类可以这样使用:

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

    【讨论】:

    • 感谢您改写问题。我误解了OP。 :)
    • 哇看起来很棒......对不起,我是 vbscript 的新手......但在我尝试之前应该是“结束函数”而不是“结束子”两次?谢谢!
    • 查看stackoverflow.com/a/20382898/603855 以了解避免编写(大量)包装函数的方法/解决方法。附言我确信 Ansgar 会编辑故障(结束函数,通过分配给函数名称返回)。
    • @user3209506 是的,应该。固定。
    • @AnsgarWiechers - 函数返回怎么样?
    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2011-10-20
    • 2012-06-03
    相关资源
    最近更新 更多