VBA Pivot Item.Name Тянет неправильное значение - PullRequest
0 голосов
/ 24 января 2020

Я создал этот код, и он работает для первых четырех отфильтрованных элементов. На пятом перестает работать. Это также тянет неправильное имя. Я обновил таблицу PIVOT, и она отображает «Ft Lauderdale, FL», но когда отладчик VBA выключается, и я наводю курсор мыши на piOffice. Имя показывает «Ft Lauderdal, FL». Это было старое имя, прежде чем я его исправил. Я также пробовал разные варианты, чтобы не было пробелов (например, Ft_Lauderdale, FL). Каждый раз, когда я по-прежнему получаю код ошибки времени выполнения 5 и когда я наводю курсор мыши на piOffice.Name, он по-прежнему показывает «Ft Lauderdal, FL».

Sub Deferred_Rent_To_PDF()

Dim strWorkbook As String
Dim strWorksheet As String
Dim strPivotTable As String
Dim pdfFilename As Variant
Dim strPivotFilter As String
Dim strDocName As String
Dim ptDeferredRent As pivotTable
Dim piOffice As PivotItem

strWorkbook = "Schedule of Leases - Beta"
strWorksheet = "Deferred"
strPivotTable = "DeferredRent"

Workbooks(strWorkbook).Activate
Set ptDeferredRent = Worksheets(strWorksheet).PivotTables(strPivotTable)

    For Each piOffice In ptDeferredRent.PageFields("Office").PivotItems
        ptDeferredRent.PageFields("Office").CurrentPage = piOffice.Name   '<---------- ISSUE IS HERE
        strPivotFilter = Worksheets(strWorksheet).Range("H1")
        strDocName = "Deferred Rent - " & strPivotFilter & " - " & Format(Date, "mm-dd-yy")
        pdfFilename = Application.GetSaveAsFilename(InitialFileName:=strDocName, _
            FileFilter:="PDF, *.pdf", Title:="Save As PDF")

            ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=pdfFilename, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=False, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=False

    Next piOffice

End Sub

1 Ответ

1 голос
/ 24 января 2020

Причина, по которой вы получаете Run Time error 5: Invalid procedure call or argument, заключается в том, что PivotCache все еще сохраняет " старое имя ", независимо от того, был ли обновлен сводный кэш.

enter image description here

Для решения этой проблемы необходимо изменить свойство PivotCache.MissingItemsLimit (Excel) . Это допустимые значения Перечисление XlPivotTableMissingItems (Excel) . Я предлагаю изменить его на: xlMissingItemsNone, добавив следующую строку:

ptDeferredRent.PivotCache.MissingItemsLimit = xlMissingItemsNone

сразу после этой строки:

Set ptDeferredRent = Worksheets(strWorksheet).PivotTables(strPivotTable)

Ваш исправленный код будет выглядеть следующим образом:

Set ptDeferredRent = Worksheets(strWorksheet).PivotTables(strPivotTable)
ptDeferredRent.PivotCache.MissingItemsLimit = xlMissingItemsNone
...