Внесение SQL данных и создание большого количества сводных таблиц - поиск способа избавиться от необходимости ссылаться на каждую сводную таблицу в коде - PullRequest
0 голосов
/ 05 мая 2020

Справочная информация. У меня есть книга с множеством вкладок, в которую вводятся данные из базы данных SQL (см. Пример запроса ниже). И по множеству причин мне нужно создать много сводных таблиц на каждой вкладке, потому что каждая сводная таблица должна смотреть на один конкретный набор данных. Каждый раз, когда я создаю сводную таблицу, мне нужно go в «Параметры сводной таблицы» и записывать сводный номер, а затем обновлять код VBA с помощью соответствующего последовательного кода Set pvt = Me.PivotTables("PivotTable###").

Вопросы: Является ли есть ли код 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

1 Ответ

0 голосов
/ 05 мая 2020

Вам нужно l oop через все сводные таблицы, например:

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