Excel VBA: фильтрация данных в новый лист и изменение источника данных из нескольких сводных таблиц - PullRequest
0 голосов
/ 22 апреля 2020

Я начал использовать VBA в течение месяца, и мне интересно создавать сложные файлы Excel.

У меня есть лист Master_DATA, в котором все данные поступают по запросу из OneDrive. И есть несколько сводных таблиц, в которых источником является таблица «DATA» в таблице Master_DATE. Все сводки связаны с сводными диаграммами. Эти графики находятся на панели инструментов.

Мне нужен макрос, который применяет фильтр к таблице «ДАННЫЕ» в соответствии со столбцом «Дата закрытия эксп.» (Или столбец N), чтобы получить до сегодняшней даты, а затем макрос должен скопировать отфильтрованные данные в новый лист, который названный "DATA_OD". Затем я бы хотел сделать этот новый лист источником всех сводных таблиц. Таким образом, графики на приборной панели будут автоматически обновляться.

Сводные таблицы находятся на 3 разных листах.

Я попробовал вот что:

Сначала я использовал эту формулу на новом листе («DATA OD»). ) для фильтрации и копирования данных:

    =FILTER(DATA;DATA[Exp. Closing Date]<TODAY())

Затем используйте макрос ниже:

Sub AdjustPivotDataRange()

  Dim pt As PivotTable, pc As PivotCache
    Dim dataSheet As Worksheet, ws As Worksheet
    Dim startPoint As Range, dataSource As Range, newRange As String

    ' get worksheet with data
    Set dataSheet = ThisWorkbook.Worksheets("DATA_OD")

    ' Dynamically Retrieve Range Address of Data
    Set startPoint = dataSheet.Range("A1")
    Set dataSource = dataSheet.Range(startPoint, startPoint.SpecialCells(xlLastCell))
    newRange = dataSheet.Name & "!" & dataSource.Address(ReferenceStyle:=xlR1C1)

    ' create new PivotCache
    Set pc = ActiveWorkbook.PivotCaches.Create( _
               SourceType:=xlDatabase, _
               SourceData:=newRange)

    ' loop through all tables in all sheets
    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables

            ' update pivot source and refresh
            pt.ChangePivotCache pc
            pt.RefreshTable

        Next pt
    Next ws

End Sub

Мне также нужен второй макрос, чтобы все повернуть назад, но я думаю, что справлюсь сам.

Надеюсь, объяснение для вас понятно. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...