我有一个报告,我从我在我的SQL Server数据库的数据建设。我有3个连接到数据库中的3个不同的表。
我的excel报表中有两个工作表。
Sheet 1 = Report
Sheet 2 = Data
我有以下简单的宏来触发'Workbook_Open'事件:
Public Sub Refresh_Connection()
'Wait for all Refresh Procedures to finish
'This procedure will refresh the Connection to the database
wsData.Activate
Do Until Application.CalculationState = xlDone
wsData.Activate
ActiveWorkbook.RefreshAll
ActiveWorkbook.Connections("KDSU513_JASONR dw_test Virtual_Bed_Board_Query_ChartData").refresh
ActiveWorkbook.Connections("KDSU513_JASONR dw_test Virtual_Bed_Board_Query_SummaryData").refresh
ActiveWorkbook.Connections("KDSU513_JASONR dw_test Virtual_Bed_Board_Query_AdmitData").refresh
DoEvents
Loop
wsReport.Activate
End Sub
最初我得到一个消息说刷新没有完成,所以我添加了一个等待类似:
Application.Wait (Now + #12:00:15 AM#)
然而,我认为这个过程阻止了所有事情的发生,包括数据库刷新。我觉得这应该很简单,但是我错过了一些愚蠢的东西。
我已经尝试了很多不同的方法,但由于某种原因,我的数据库连接没有得到刷新。
任何帮助都是非常感谢的。
我找到了解决方案,至少在SQL Server。这与宏无关,你必须为你正在使用的每个连接关闭"启用后台刷新"。
转到数据选项卡,单击连接组中的连接,右键单击您的连接,然后单击属性。取消勾选"启用后台刷新"的复选框。我还额外添加了一行:ActiveWorkbook。RefreshAllActiveWorkbook。RefreshAll
为了安全起见,没有处理大量数据,所以应该不是问题。