随后使用 VBA 刷新查询和数据透视表

问题描述 投票:0回答:0

我有一个问题,但似乎找不到合适的解决方案。 基本上,我正在创建一个 Excel 仪表板,它根据用户可以选择的文件路径从特定 Excel 文件获取数据。此外,一些数据是从 PowerBI 仪表板的实时连接中提取的。然后,该数据在 PowerQuery 和 PowerPivot 中进行处理,然后添加到 4 个不同的数据透视表中。然后用 VBA 处理这 4 个数据透视表以进行一些数据转换,最后将它们全部添加到一张表中,然后将其添加到我的数据模型中,最终形成一个数据透视表,这就是我的最终结果。

我的问题是,我需要首先更新所有查询和连接,之后我希望更新所有数据透视表,然后运行我的 VBA 子程序来执行数据转换,之后我想对我的查询进行另一次更新和数据透视表。我尝试了几种解决方案,但似乎没有一个对我有用。问题是 VBA 不会等待所有数据查询完成才转到下一行。

如果有人有一个聪明的解决方案,我们将不胜感激!

这些是我迄今为止尝试过的一些解决方案:


Sub Refresh()

Call M_HelpFunctions.OptimizeExcelVBACodeExecution(True)

ThisWorkbook.RefreshAll
Call M_DataTransform.PowerBiData
Call M_DataTransform.MergePrintArrays
ThisWorkbook.RefreshAll

MsgBox "All data has been succesfully refreshed"

Call M_HelpFunctions.OptimizeExcelVBACodeExecution(False)

End Sub

由于上述问题,这不起作用。


    Sub Refresh_All_Data_Connections()
        Dim objConnection, bBackground
            For Each objConnection In ThisWorkbook.Connections
                'Get current background-refresh value
                bBackground = objConnection.OLEDBConnection.BackgroundQuery
        
                'Temporarily disable background-refresh
                objConnection.OLEDBConnection.BackgroundQuery = False
        
                'Refresh this connection
                objConnection.refresh
        
                'Set background-refresh value back to original value
                objConnection.OLEDBConnection.BackgroundQuery = bBackground
            Next
    ThisWorkbook.RefreshAll
    End Sub

这不起作用,因为它不是 OLEDB 连接,并且“后台刷新”选项呈灰色。

Application.Wait (Now + TimeValue("0:00:10"))

这不起作用,因为它也会停止我的刷新。

    ' Wait for these queries to be refreshed
    For i = 1 To 60 ' 60 checks, one per second
        If Not ThisWorkbook.Connections("Master Data Model").Refreshing And Not ThisWorkbook.Connections("Development").Refreshing Then Exit For
        Application.Wait (Now + TimeValue("0:00:01"))
        DoEvents
    Next i

这不起作用,因为这些是查询而不是连接。

excel vba pivot-table powerquery powerpivot
© www.soinside.com 2019 - 2024. All rights reserved.