【发布时间】:2021-10-25 02:37:50
【问题描述】:
我正在尝试更新大约十几个 Power Queries,等到它们完成,然后刷新所有附加到它们的数据透视表。
我有这个 VBA 脚本,我已经在我正在努力解决的部分添加了注释:
Public Sub UpdatePowerQueries()
Application.DisplayAlerts = True
For Each Worksheet In ActiveWorkbook.Worksheets
Worksheet.Unprotect
Next Worksheet
'Start of trouble section
Dim StatusCheck As Long, Connection As WorkbookConnection, RefreshCheck As String, RefreshCheckLoop As Integer
On Error Resume Next
For Each Connection In ThisWorkbook.Connections
StatusCheck = InStr(1, Connection.OLEDBConnection.Connection, "Provider=Microsoft.Mashup.OleDb.1", vbTextCompare)
If Err.Number <> 0 Then
Err.Clear
Exit For
End If
If StatusCheck > 0 Then Connection.OLEDBConnection.BackgroundQuery = False
If StatusCheck > 0 Then Connection.Refresh
RefreshCheckLoop = 1
While RefreshCheckLoop < 15
RefreshCheck = Connection.OLEDBConnection.Refreshing
If RefreshCheck = True Then Application.Wait (Now + TimeValue("00:00:01"))
RefreshCheckLoop = RefreshCheckLoop + 1
Wend
Next Connection
DoEvents
ActiveWorkbook.RefreshAll
'End of trouble section
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Visible Then
Worksheet.Activate
Range("A1").Select
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
End If
Next Worksheet
For Each Worksheet In ActiveWorkbook.Worksheets
Worksheet.Protect
Next Worksheet
Worksheets("Table Of Contents").Activate
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
在我读到的所有地方,它都说将 BackgroundQuery 设置为 false,它应该等到完成后再继续刷新数据透视表的下一部分,但我仍然收到烦人的黄色小三角形,告诉我“下载没有完成。”每个查询旁边。我已将所有电源查询设置为不通过“RefreshAll”命令更新。
我错过了什么吗?
【问题讨论】:
-
我建议在移动到下一个之前检查它是否仍在刷新。 docs.microsoft.com/en-us/office/vba/api/… 然后是 DoEvents
-
在循环中出现第一个错误时,您会跳出循环 - 出现错误的连接之后的其他连接呢?
-
@TimWilliams,他们都出错了......即使数据似乎正在刷新。
-
@Sorceri,我已经更新了上面的逻辑。我添加了一个循环来查看连接是否仍在刷新,然后在 Power Query 刷新之后和 RefreshAll 之前添加一个 DoEvents。我仍然有同样的黄色三角形。
-
我的意思是,一旦您的
For Each Connection In ThisWorkbook.Connections循环中出现一个连接错误,您就会退出循环。除非每个工作簿只有一个连接?