目前,我的工作簿中有20个查询,每2分钟刷新一次。刷新所有这些查询总共大约需要30秒。
为了执行计算操作,将来自这些查询的数据加载到查询表(即20个查询表)中。根据我要执行的操作,我获取这些表的值并在与查询表不同的工作表中进行操作。 例如,从位于工作表“ A”中的查询表“ TableA”中获取单元格“ A2”的值,并从位于工作表“ C”中的查询表“ TableC”中获取值的单元格“ A2”中工作表“ A_C”我使用这些值执行操作。例如:工作表“ A_C”的单元格“ H1” ='A'! A2 +“ C”! A2。
我还有工作表“ A_D”; “ D_A_C”; “ E_F_G”; “ A_O”等
在所有这些工作表中获得的值都归入``结论''工作表中,这是我的工作簿的摘要工作表。
我已经解释了工作簿的基本操作,以便您可以了解如何获取和处理我的数据。我继续我的帖子...
在开始时,我提到了工作簿刷新所有查询所需的时间。我对这篇文章的主要兴趣是最大程度地减少刷新查询的等待时间。
我事先知道,Excel给我们的最短时间是1分钟的自动刷新时间。
我想牺牲所有查询的自刷新功能,而仅根据“结论”工作表中的预定义条件自动刷新有兴趣的查询。我解释: 我的20条查询一直在不间断地进行自动刷新,因为在“结论”工作表中,单元格如下:
“ K2”>“ L2”
“ K3”>“ L3”
“ K4”>“ L4”
“ K5”>“ L5”
“ K6”>“ L6”
等等。
如果在自动刷新20个查询之后,发生了:“ K2” <“ L2”,
“ K2” <“ L2”
“ K3”>“ L3”
“ K4”>“ L4”
“ K5”>“ L5”
“ K6”>“ L6”
等等。
不等式条件(“ K2” <“ L2”)可以用作切换元素,以暂停所有查询的自刷新,并且仅更新我认为必要的查询,以便继续验证该不等式,直到返回到( “ K2”>“ L2”)。立即停止20个查询的暂停,一切都会恢复正常,也就是说,我所有的查询每2分钟都会自动刷新一次。
如果(“ K3” <“ L3”):
“ K2”>“ L2”
“ K3” <“ L3”
“ K4”>“ L4”
“ K5”>“ L5”
“ K6”>“ L6”
等等。
我希望4、5、6等也会发生相同的情况。
Cris向我发送了以下VBA代码,但是我对VBA的了解很差。
- 我不明白为什么它将查询分为两个变量:internalQuerys和externalQuerys,但是有些是“ Tabelle”,有些是“ File”。
- 他分配的代码是否应该复制到“结论”的代码表中?
- 您认为可以在我的项目中使用此代码吗?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Worksheets("Conclusion").Range("B1:B2")) Is Nothing Then
set_refreshPeriod
End If
End Sub
Sub set_refreshPeriod()
Dim wks As Worksheet
Dim rng1 As Range, rng2 As Range
Dim lngPeriod As Long
Dim i As Integer
Dim internalQuerys As Variant 'The 20 Querys which update all 2 Minutes
Dim externalQuerys As Variant 'The 3 Querys which update if B1>B2
Set wks = ActiveWorkbook.Worksheets("Conclusion")
Set rng1 = wks.Range("B1")
Set rng2 = wks.Range("B2")
'The name of your Query always starts wiht "Query - " in english or "Abfrage - " in German
'You can add here more Querys
internalQuerys = Array("Abfrage - Tabelle1", _
"Abfrage - Tabelle2", _
"Abfrage - Tabelle3")
externalQuerys = Array("Abfrage - File1", _
"Abfrage - File2", _
"Abfrage - File3")
'if B1 > B2 then do not refresh the internalQuerys every 2 Minutes else do it
If rng1 > rng2 Then
lngPeriod = 0 'do not refresh internalQuerys
'Refresh the the external Querys
For i = 0 To UBound(externalQuerys)
ThisWorkbook.Connections(externalQuerys(i)).OLEDBConnection.Refresh
Next
Else: lngPeriod = 2 'Time 2 Minutes for internal Querys
End If
'Set the RefreshPeriod for the internal Querys
For i = 0 To UBound(internalQuerys)
ThisWorkbook.Connections(internalQuerys(i)).OLEDBConnection.RefreshPeriod = lngPeriod
Next
End Sub