【问题标题】:Auto refresh pivottables data in excel on first run首次运行时自动刷新 Excel 中的数据透视表数据
【发布时间】:2013-04-15 14:08:56
【问题描述】:

背景:我有 2 张 excel 表格:

  1. 包含数据透视表和宏“刷新”
  2. 来自 SQL 服务器的数据

宏包含用于自动刷新数据和更新数据透视表的 VBA 代码。数据每晚更新。以下是VBA代码:

 Sub Refresh()
 ActiveWorkBook.RefreshAll 
 End Sub

问题:

  1. 当我第一次运行我的宏时,执行需要 5 分钟,我的 数据透视表未使用新数据更新。

  2. 当我第二次运行它时,它执行得很好。

我希望我的宏在第一次运行时完美执行。

非常感谢任何帮助。

注意:这是我的第一篇文章,所以请容忍我的编辑。

【问题讨论】:

  • 这可能是因为第一次从数据源刷新数据集。之后,它被缓存在pivotcaches中,因此除非源数据发生变化,否则后续执行速度会快得多!
  • 你能给我解决这个问题的任何想法吗
  • ** @Philip :** 你是对的。在第一次单击时,它会刷新来自 sql server 的数据集,然后在第二次单击时刷新数据透视缓存。

标签: sql-server-2008 excel pivot-table vba


【解决方案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】:

可能当您打开工作簿时,您同时打开了其他工作簿?仅使用宏工作簿进行尝试。此外,使用数据透视表指定工作表也可以。 sheet1.refreshall

另一种方法是你用api设置一个定时器,并指定你想刷新的时间。

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

【讨论】:

  • @user2308096 : 1. 我只有一个要应用宏的活动工作簿。 2. 我试过PivotCache.RefreshPeriod=0.5,但它不起作用。 3. 你能详细说明 Last 方法吗?提前谢谢你
  • Private Sub Workbook_Open() Application.WindowState= 最大化的 End Sub 你可以放入 refresh thisworkbook.refreshall
  • 感谢您的宝贵时间。我已经尝试了您的解决方案,但无法获得预期的结果。
  • 你也可以用 activesheet 来做。就像包含数据透视表的工作表一样。只需在 cell chage 上进行操作,您就可以更新您的工作表。既然你说第二次有效。 Private Sub Worksheet_Change(ByVal Target as Range) activeworkbook.refreshall end sub
猜你喜欢
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2017-06-10
  • 2015-02-07
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多