Ошибка сводной таблицы в версии Office 2016 - PullRequest
1 голос
/ 09 мая 2019

Моя версия Office 365 2019. При запуске одного и того же кода в Office 2016 он приносит мне кварталы, а не месяцы, поэтому у меня возникает ошибка. Я думаю, что это может быть для четверти.

With ActiveSheet.PivotTables("ResumenRuido").PivotCache
     ActiveSheet.PivotTables("ResumenRuido").PivotSelect "", xlDataAndLabel, True
    ActiveSheet.PivotTables("ResumenRuido").NullString = "0"
    .DisplayNullString = True
    .RefreshOnFileOpen = False
    .MissingItemsLimit = xlMissingItemsDefault
End With

With ActiveSheet.PivotTables("ResumenRuido").PivotFields("Codigo SIC")
    .DisplayNullString = True
    .Orientation = xlRowField
    .Position = 1
End With
With ActiveSheet.PivotTables("ResumenRuido").PivotFields("Fecha")
    .DisplayNullString = True
    .Orientation = xlColumnField
    .Position = 1
End With

ActiveSheet.PivotTables("ResumenRuido").PivotFields("Fecha").AutoGroup

ActiveSheet.PivotTables("ResumenRuido").PivotFields("Quarters").PivotItems( _
    "Qtr1").ShowDetail = True

ActiveSheet.PivotTables("ResumenRuido").PivotFields("Years").PivotItems("2019") _
    .ShowDetail = True
ActiveSheet.PivotTables("ResumenRuido").PivotFields("Fecha").Orientation = _
    xlHidden
ActiveSheet.PivotTables("ResumenRuido").PivotFields("Quarters").Orientation = _
    xlHidden
With ActiveSheet.PivotTables("ResumenRuido").PivotFields("Fecha")
    .Orientation = xlColumnField
    .Position = 2
End With

ActiveSheet.PivotTables("ResumenRuido").PivotFields("Years").ShowDetail = True

Range("F4").Select
ActiveSheet.PivotTables("ResumenRuido").RowGrand = False
Range("E4").Select
ActiveSheet.PivotTables("ResumenRuido").PivotFields("Years").Subtotals = Array( _
    False, False, False, False, False, False, False, False, False, False, False, False)
Range("F10").Select

ActiveSheet.PivotTables("ResumenRuido").AddDataField ActiveSheet.PivotTables( _
    "ResumenRuido").PivotFields("Penalidad"), "Sum of Penalidad", xlSum
ActiveSheet.PivotTables("ResumenRuido").RowAxisLayout xlTabularRow
ActiveSheet.Name = "Resumen_penalidades"

Range("E10").Select
ActiveSheet.PivotTables("ResumenRuido").NullString = ""

Call tabla_resumen_energia

End Sub

1 Ответ

0 голосов
/ 10 мая 2019

Сначала я предлагаю использовать ссылку на вашу сводную таблицу, чтобы сократить код. После этих двух строк вы можете заменить все «ActiveSheet.PivotTables (« ResumenRuido »)» на «pt».

Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables("ResumenRuido")

Вместо PivotField.AutoGroup я предлагаю использовать специальный метод разгруппировки / группирования, чтобы гарантировать получение желаемых периодов, e. г. годы, кварталы и месяцы:

With pt.PivotFields("Fecha")
    ' if already grouped, first ungroup it:
    If .TotalLevels > 1 Then .DataRange.Cells(1).Ungroup

    ' sort it:
    .AutoSort Order:=xlAscending, Field:="Fecha"

    ' group it by wanted periods:
    ' seconds, minutes, hours, days, months, quarters, years
    .DataRange.Cells(1).Group _
        Periods:=Array(False, False, False, False, True, True, True)
End With

Ошибка с группировкой PivotField

Я могу подтвердить, что есть ошибка (по крайней мере, в моей версии Excel "Office 365 Pro Plus, Версия 1902, Build 11328.20100 нажмите и запустите"). Если я вручную выберу группировку для сводного поля с датами, самый низкий выбранный период всегда будет , а не показан в качестве дополнительного сводного поля.
Пример: если я группирую годы / кварталы / месяцы вручную или с помощью a. м. код, месяцы не отображаются!


Обход

Сгруппировать с дополнительным более низким периодом (который в некоторых версиях Excel не отображается), а затем скрыть его, если он отображается:

    .DataRange.Cells(1).Group _
        Periods:=Array(False, False, False, True, True, True, True)

' ...

Dim pf As PivotField
For Each pf In pt.PivotFields
    Select Case pf.Name
    Case "Fecha", "Quarters", "Months", "Days"
        pf.Orientation = xlHidden
    End Select
Next pf
...