如果"B1" > "B2",则持续自动刷新某些查询,但每 2 分钟自动刷新一次所有查询



我想使用 VBA 对某些查询的自动刷新进行编程循环,例如"B1">"B2"时来自 20 个现有查询的 3 个查询,如果不满足此不等式条件,则 20 个查询将每 2 分钟自动刷新一次。有什么想法吗? 我的工作簿中的 20 个查询当前每 2 分钟刷新一次。当工作表"结论"中的单元格"B1">单元格"B2"时,我需要中断此刷新模式。只有获取在上述单元中操作的外部数据所涉及的查询才会自行刷新。例如,查询 1、查询 2 和查询 3 负责提供在计算中要操作的值,这些值导致上述单元格,因此它们将是唯一在循环中刷新的查询,直到解决所述不等式。停止遵守 一旦最后一次发生,那么 20 个查询将每 2 分钟更新一次。 我在准备 VBA 时需要帮助,因为我对代码层次结构的了解超出了我的知识范围。请帮忙!

您必须在链接上执行这两个操作:

https://exceloffthegrid.com/auto-refresh-power-query/

在这个例子中,我有 3 个外部查询(File1、File2、File3(,只有 3 个内部查询(Tabelle1、Tabelle2、Tabelle3(。

我希望我理解你的逻辑是正确的。

首先,您必须检查"结论"表的worksheet_change发明,检查 Range("B1:B2"(是否有变化,并调用另一个子(在本例中为"set_refreshPeriod"。

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"检查 B1 和 B2,并在查询设置中设置 2 分钟或不 (0 分钟(。此外,它还将刷新外部查询。

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

最好的问候克里斯

最新更新