VBA выбрать сводную таблицу по Activecell - PullRequest
0 голосов
/ 27 сентября 2018

На моем листе Excel сводная таблица копируется из другого файла каждый месяц, поэтому имя будет меняться каждый раз, когда новая сводная таблица копируется на мою рабочую таблицу.Я хочу использовать макрос для установки фильтра сводной таблицы, но не знаю, как ссылаться на таблицу, не зная имени.Я использую код ниже, иногда он работает, но иногда приходит с ошибкой.Не могли бы вы посмотреть, есть ли какая-либо ошибка в моем коде?или если есть другое решение для моей ситуации?

Другая проблема заключается в том, что мой код настраивает две сводные таблицы на двух листах, однако код иногда (в большинстве случаев) работает только на одном листе.Любое тело знает причину?

Sub getdeb()
Dim irfile As String
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim ws4 As Worksheet

With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .Title = "Please select a file"
    .ButtonName = "Select"
    .InitialFileName = "C:\"
    If .Show = -1 Then
        irfile = .SelectedItems(1)

        Set wbtarget = ThisWorkbook
        Set wbsource = Workbooks.Open(irfile)

        Set ws1 = wbsource.Sheets("NN Re inzake ART Non-Life")

        Set ws2 = wbsource.Sheets("NN Re inzake ART Life")

        ws2.Cells.Copy Destination:=wbtarget.Sheets("Life").Range("A1")

        ws1.Cells.Copy Destination:=wbtarget.Sheets("NonLife").Range("A1")

        wbsource.Close

        Else
            MsgBox "No file was selected"

    End If
End With

With ThisWorkbook

Set ws3 = Sheets("Life")
Set ws4 = Sheets("NonLife")
ws3.Cells.Clear
ws4.Cells.Clear

End With

With ws3

    With ActiveCell.PivotTable.PivotFields("GAUDI rubriek")
    .PivotItems("A_INT_RENTS_ACCR    ").Visible = False
    .PivotItems("A_OTH_ACCR_ASSETS   ").Visible = False
    .PivotItems("L_COST_PAYABLE      ").Visible = False
    .PivotItems("L_CRED_DIR          ").Visible = False
    .PivotItems("L_CRED_OTH_3P       ").Visible = False
    .PivotItems("L_CRED_OTH_IC       ").Visible = False
    .PivotItems("L_CRED_REINS_IC     ").Visible = False
    .PivotItems("L_DEF_TAX_LIAB      ").Visible = False
    .PivotItems("L_INCOME_TAX        ").Visible = False
    .PivotItems("L_INT_RENTS_ACCR    ").Visible = False
    .PivotItems("L_OTH_PROV          ").Visible = False
    .PivotItems("A_TAX_REC           ").Visible = False
    .PivotItems("L_CRED_REINS_3P     ").Visible = False
    End With

    With ActiveCell.PivotTable.PivotFields("Issuer")
    .ClearAllFilters
    .EnableMultiplePageItems = True
    .PivotItems(" ").Visible = False
    End With

    .Range("N9") = "GRID Mapping DvS"
    .Range("O9") = "GRID Name Mapping DvS"
    .Range("P9") = "Country Mapping DvS"
    .Range("Q9") = "Instrument ID DvS added"
    .Range("R9") = "Country Mapping DvS2"
    .Range("R9") = "Thomson-Reuters id"
    .Range("Q10") = "=$B10&"" ""&$A10"
    .Range("N10:R100").FillDown

End With

With ws4

    With ActiveCell.PivotTable.PivotFields("GAUDI rubriek")
    .PivotItems("A_INT_RENTS_ACCR    ").Visible = False
    .PivotItems("A_OTH_ACCR_ASSETS   ").Visible = False
    .PivotItems("L_COST_PAYABLE      ").Visible = False
    .PivotItems("L_CRED_DIR          ").Visible = False
    .PivotItems("L_CRED_OTH_3P       ").Visible = False
    .PivotItems("L_CRED_OTH_IC       ").Visible = False
    .PivotItems("L_CRED_REINS_IC     ").Visible = False
    .PivotItems("L_DEF_TAX_LIAB      ").Visible = False
    .PivotItems("L_INCOME_TAX        ").Visible = False
    .PivotItems("L_INT_RENTS_ACCR    ").Visible = False
    .PivotItems("L_OTH_PROV          ").Visible = False
    .PivotItems("A_TAX_REC           ").Visible = False
    .PivotItems("L_CRED_REINS_3P     ").Visible = False
    End With

    With ActiveCell.PivotTable.PivotFields("Issuer")
    .ClearAllFilters
    .EnableMultiplePageItems = True
    .PivotItems(" ").Visible = False
    End With

    .Range("N9") = "GRID Mapping DvS"
    .Range("O9") = "GRID Name Mapping DvS"
    .Range("P9") = "Country Mapping DvS"
    .Range("Q9") = "Instrument ID DvS added"
    .Range("R9") = "Country Mapping DvS2"
    .Range("R9") = "Thomson-Reuters id"
    .Range("N10:R500").FillDown
    .Calculate

End With
End Sub

1 Ответ

0 голосов
/ 27 сентября 2018

Чтобы сослаться на сводную таблицу и поле сводки, она должна существовать.Эта часть кода удаляет все сводные таблицы на ws3, поэтому на нее нельзя ссылаться далее:

ws3.Cells.Clear
With ws3
    With ActiveCell.PivotTable.PivotFields("GAUDI rubriek")

Попробуйте изменить свой код следующим образом:

With ws3.Range(ActiveCell.Address).PivotTable.PivotFields("GAUDI rubriek")

везде для обоихws3 и ws4.Таким образом, вы будете ссылаться на соответствующий ActiveCell адрес в соответствующей таблице.

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