【问题标题】:Bringing in SQL data and creating lots of PivotTables - looking for a way to eliminate the need to reference each pivottable in the code引入 SQL 数据并创建大量数据透视表 - 寻找一种无需在代码中引用每个数据透视表的方法
【发布时间】:2020-08-19 21:16:12
【问题描述】:

背景:我有一个包含许多选项卡的工作簿,这些选项卡从 SQL 数据库中引入数据(请参阅下面的示例查询)。由于很多原因,我需要在每个选项卡中创建许多数据透视表,因为每个数据透视表都需要查看一组特定的数据。每次创建数据透视表时,我都必须转到“数据透视表选项”并记下数据透视表编号,然后使用适当的顺序代码 Set pvt = Me.PivotTables("PivotTable###") 更新 VBA 代码。

问题:是否有一些 VBA 代码可以引用每个选项卡中的所有数据透视表,而无需引用可数据透视的数字?因为我有很多选项卡,我需要创建很多数据透视表,但我忘记了可透视的数字。

Sub RefreshData()
    Dim SQl As String
    Dim startDATE As String, endDATE As String
    Dim pvt As PivotTable

    Set pvt = Me.PivotTables("PivotTable1")
    Set pvt = Me.PivotTables("PivotTable2")
    Set pvt = Me.PivotTables("PivotTable3")

    'pvt.PivotCache.Connection = "ODBC;DSN=" & Application.Range("DSN_Source") & ";DATABASE=" & Application.Range("T123") & ";"

    startDATE = Format(Me.Range("SDate"), "yyyy-mm-dd hh:mm:ss")
    endDATE = Format(Me.Range("EDate"), "yyyy-mm-dd hh:mm:ss")

    SQl = ""

    SQl = "WITH ABC As " & vbCrLf
    SQl = SQl & "( " & vbCrLf
    SQl = SQl & "  SELECT Stuff  " & vbCrLf
    SQl = SQl & ", more stuff,  ROW_NUMBER() OVER (PARTITION BY RIGHT(Stuff, 2) " & vbCrLf
    SQl = SQl & ", stuff1, stuff2, stuff3 ORDER BY Estuff4 DESC) As RowNum" & vbCrLf

    SQl = SQl & " FROM StuffTable " & vbCrLf

    SQl = SQl & " WHERE stuff = 'stuffy'  AND " & vbCrLf


    *snip


    With pvt.PivotCache
        .CommandType = xlCmdSql
        .CommandText = SQl
    End With
    pvt.RefreshTable



End Sub

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    您需要像这样遍历所有数据透视表:

    For Each pvt In Me.PivotTables
        With pvt.PivotCache
            .CommandType = xlCmdSql
            .CommandText = Sql
        End With
        pvt.RefreshTable
    Next
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 2018-04-10
      相关资源
      最近更新 更多