VBScript for Excel“ objWorkbook.RefreshAll”不会刷新数据

时间:2019-01-25 15:28:34

标签: excel vbscript refresh

我有一个Excel工作簿,该工作簿使用功能查询从另一个工作簿中检索数据。当我手动打开工作簿时,它会自动更新,但是当我从VBScript调用它时(有些人最近帮我解决了另一个工作簿),它不会更新。

我所使用的代码与某些人在另一本工作簿上帮助我的代码相同,但不适用于此代码。 我还尝试将autoexec宏放入我的工作簿中,还尝试了工作簿中的一些VBA代码来刷新数据。当我手动打开工作簿时,这两种方法都起作用,但是当我从VBScript中打开工作簿时,它们都不更新。我也尝试过从VBScript中调用宏,但这也没有用。 这是我的代码:

Dim s
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = 
objExcel.Workbooks.Open("\\FilePath\Daily Snapshot.xlsm")

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

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

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

我也尝试过使用DoEvents(以前没有告诉过我),但是奇怪的是,当我包含DoEvents时,我收到了有关它的VBScript错误消息,但是当错误消息弹出时,则当错误消息出现在屏幕上时,我的数据确实刷新了,但是脚本的其余部分当然没有完成(这是保存和关闭部分)?在我看来,也许代码需要某种中断才能运行刷新,但是我知道这是“最后节省时间”和当前节省时间之间已经存在的目的。 它似乎在RefreshAll部分上失败了(不仅仅是因为它没有刷新,而且还没有保存我的工作簿,后者是RefreshAll之后的下一部分)。 但是,如果我不注释掉ActiveWorkbook.Close部分-它确实会关闭工作簿。谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

打开命令的参数updateLinks是否有帮助?

Workbooks.Open Filename:="\\FilePath\Daily Snapshot.xlsm", updatelinks:=1

还是Application属性?

Application.UpdateLinks = True

'Variant 1:
Dim s
Set objExcel = CreateObject("Excel.Application")
objExcel.UpdateLinks = True
Set objWorkbook = 
objExcel.Workbooks.Open("\\FilePath\Daily Snapshot.xlsm")
..,


'Variant 2:
Dim s
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open FileName:="\\FilePath\Daily Snapshot.xlsm", UpdateLinks:=1

Set objWorkbook = objExcel.activeworkbook
...

答案 1 :(得分:0)

这是我认为必须完成的工作,才能使其正常工作。我必须去编辑Excel查询(连接)属性-我取消选择了“刷新控制”区域中的所有内容(取消选择“打开时刷新”,取消选择“启用背景刷新”以及““全部刷新时刷新此连接””以外的所有其他选项-我保留了该选择并我以前发布的原始代码现在可以正常使用了。