在Excel中自动刷新数据透视表的数据在首次运行时

3

背景:我有两个Excel表格:

  1. 包含数据透视表和名为“刷新”的宏
  2. 从SQL服务器获取数据

宏包含VBA代码,可以自动刷新数据并更新数据透视表。数据每晚都会更新。以下是VBA代码:

 Sub Refresh()
 ActiveWorkBook.RefreshAll 
 End Sub

问题:

  1. 第一次运行宏时,需要5分钟执行时间,但透视表没有更新新数据。

  2. 第二次运行它时,可以完美执行。

我想让宏在第一次运行时就能完美执行。

非常感谢您的帮助。

注意:这是我的第一篇文章,请谅解我的编辑。


可能是因为第一次数据集是从数据源刷新的。之后,它被缓存在数据透视表缓存中,所以除非源数据发生更改,否则执行速度会快得多! - Our Man in Bananas
你能给我任何解决这个问题的想法吗? - user42995
@Philip: 你说得对。第一次点击会从SQL Server刷新数据集,然后第二次点击会刷新数据透视表缓存。 - user42995
2个回答

1

我已经解决了我的问题:

  1. 我移除了宏并使用了一个Active-x-Control按钮。因此,在 button_click() 上刷新了 ExternalData 以及 pivotTables

  2. 所以,这是代码:我移除了以下代码

    ActiveWorkBook.RefreshAll

并更新为

Private Sub CommandButton1_Click()
Dim Data_query As Worksheet
Set Data_query = Sheets("Data")
Data_query.Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Application.ScreenUpdating = False
Sheets("sheet1").Select
Sheets("sheet1").PivotTables("PivotTable1").PivotCache.Refresh
Sheets("sheet1").PivotTables("PivotTable1").RefreshTable
End Sub

现在,ExternalDatapivotTables同时刷新。


2
所以解决方案是:禁用后台查询——与按钮或宏无关。 - gicalle

0

可能是因为您打开工作簿时,同时还有其他工作簿在打开?尝试只使用宏工作簿。此外,指定包含数据透视表的工作表也可以起作用。sheet1.refreshall

另一种方法是使用API设置计时器,并指定何时进行刷新。

最后一种方法是在打开工作簿时设置刷新,在“此工作簿”中打开并输入代码。


@user2308096:
  1. 我只有一个活动工作簿,我正在应用宏。
  2. 我尝试过使用 PivotCache.RefreshPeriod=0.5,但它没有起作用。
  3. 你能更详细地解释一下 Last 方法吗?非常感谢。
- user42995
私有子程序 Workbook_Open() Application.WindowState = 最大化 End Sub您可以输入 ThisWorkbook.RefreshAll 来刷新。 - user2308096
感谢您宝贵的时间。我尝试了您的解决方案,但未能获得预期的结果。 - user42995
你也可以使用ActiveSheet来完成。就像包含数据透视表的工作表一样。只需在单元格更改时更新您的工作表即可。因为您说第二次运行正常。私有子程序Worksheet_Change(ByVal Target as Range) ActiveWorkbook.RefreshAll End Sub - user2308096

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接