首页 > 解决方案 > 用于更新 Excel 数据透视表的 VBS 脚本

问题描述

我正在使用 VBS 脚本从任务调度程序运行。它运行 .xlsm,其中包含 sheet1 上的数据(来自 SQL 的视图)和带有数据透视表的 sheet2。

当我运行 .xlsm 时,来自表更新的数据(我有一个 refreshall 并计算 VBA)

当我运行 VBS 时,Excel 不会更新。

VBS 中是否有任何内容阻止 Excel 文件正确更新或 SQL 数据表不更新并且数据透视表更新而该表中的值未更新?

如何解决这个问题?

这是我的VBS

Dim ObjExcel, ObjWB
Set ObjExcel = CreateObject("excel.application")

Set ObjWB = ObjExcel.Workbooks.Open("C:\ENG\Apps\test.xlsm")

ObjWB.Close False
ObjExcel.Quit
Set objFileName = Nothing
Set ObjExcel = Nothing

标签: sqlexcelvbavbscriptpivot-table

解决方案


我有一个类似的设置,我的 VBScript 将打开文件并刷新所有文件,包括 SQL 连接和所有数据透视表,首先我会ObjWB.RefreshAll在关闭打开的文件之前添加代码,而且它似乎ObjWB.Close False会在不保存更改的情况下关闭文件。

我还必须确保 Excel 中的查询连接已选中以下设置“全部刷新时刷新此连接”:

在此处输入图像描述

另外,为了真正确保所有内容都得到了刷新,我在工作簿中有以下代码,我必须确保在刷新时将 Background Refresh 选项设置为 False:

ThisWorkbook.Worksheets("Status Report").Range("A1").ListObject.QueryTable.Refresh BackgroundQuery:=False

Application.EnableEvents = False
    ThisWorkbook.RefreshAll

    'Refresh all pivot tables
    For Each pc In ThisWorkbook.PivotCaches
        pc.Refresh
    Next pc

    For Each pt In ThisWorkbook.PivotTables
        pt.Refresh
    Next pt

Application.EnableEvents = True

推荐阅读