【问题标题】:VBScript ends before saving and closing Excel workbookVBScript 在保存和关闭 Excel 工作簿之前结束
【发布时间】:2019-01-22 19:46:26
【问题描述】:

我有一个非常基本的 VBScript,我希望能够从任务计划程序调用它来打开一个 Excel 文档,刷新所有内容,然后保存并关闭它。 我一直在玩我在网上找到的各种代码(因为我对此很陌生),我可以让它打开并刷新所有代码,但是 VBScript 在保存和/或关闭工作簿之前关闭。

我已尝试添加“WScript.Sleep”(具有不同的时间)以及 DoEvents 以允许 Excel 完成,但在保存和关闭工作簿之前脚本仍会关闭。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = 
objExcel.Workbooks.Open("\\llfs01\ReportHub(Shoals)\Sales\Daily 
Reports\F&I Daily Reports\CIT Report.xlsm")

objExcel.Application.Visible = True
objExcel.DisplayAlerts = False
objExcel.AlertBeforeOverwriting = False
objWorkbook.WorkSheets(1).Activate
objWorkbook.RefreshAll 'Refresh everything
objWorkbook.DoEvents 'Let Excel finish
WScript.Sleep 20000
objExcel.ActiveWorkbook.Save
DoEvents
objExcel.ActiveWorkbook.Close

我需要代码来打开工作簿(当我的电脑被锁定且无人看管时)、刷新工作簿中的所有数据、保存并关闭工作簿。

【问题讨论】:

  • 删除 DoEventssleep 因为它们是不必要的..
  • Excel 在执行下一个命令之前会先完成每个命令。 DoEvents 很危险,绝对不能用来随机解决问题。在这里查看我的答案stackoverflow.com/questions/54176056/…
  • 谢谢。我已经阅读了您分享的帖子,并且我了解 DoEvents 可能会通过允许未经检查的情况运行并且脚本永远无法完成而导致问题。

标签: excel vbscript


【解决方案1】:

您可以设置一个变量 = objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time"),然后循环 Do Events 直到 objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time") > variable

Dim s

s = objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")

objExcel.ActiveWorkbook.Save
Do Until objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time") > s
    DoEvents
Loop
objExcel.ActiveWorkbook.Close

编辑:

根据 OP 的评论添加到原始代码正文中

Dim s
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("\\llfs01\ReportHub(Shoals)\Sales\Daily 
Reports\F&I Daily Reports\CIT Report.xlsm")

s = objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")

objExcel.Application.Visible = True
objExcel.DisplayAlerts = False
objExcel.AlertBeforeOverwriting = False
objWorkbook.WorkSheets(1).Activate
objWorkbook.RefreshAll 'Refresh everything

objExcel.ActiveWorkbook.Save
Do Until objExcel.ActiveWorkbook.BuiltinDocumentProperties("Last Save Time") > s
    DoEvents
Loop
objExcel.ActiveWorkbook.Close

【讨论】:

  • 我很抱歉不得不问这个问题,但这与我的代码有什么关系?
  • 感谢您的帮助!起初我收到一条关于 objWorkbook.DoEvents 的错误消息,但是当我注释掉该行时 - 它似乎按预期工作(刷新、保存和关闭),但我确实从 Excel 收到了一条错误消息。我相信这是因为它在技术上仍在节省时试图关闭。是否可以在保存后等待的时间上增加几秒钟?
  • 是的,抱歉,我是想在发布之前将其删除,现在已编辑。您收到的错误消息是什么?
  • 一定是 Excel 的侥幸导致了这个错误,从那时起我已经运行了很多次,它工作正常。再次感谢您的帮助!
  • 太好了,很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多