Как исправить ошибку «Невозможно установить свойство Position класса PivotField» в Excel VBA - PullRequest
0 голосов
/ 24 января 2019

Я использую VBA для создания сводной таблицы, используя цикл For Each для вставки полей строки из динамического массива (установка положения с помощью Application.Match). Как мне исправить эту ошибку позиции?

Run-time error '1004':
Unable to set the Position property of the PivotField class

Я думал, что p в .position может быть чувствительным к регистру, так как он находится в верхнем регистре при поиске в Интернете, но редактор Excel VBA исправляет его в нижний регистр. РЕДАКТИРОВАТЬ: потому что я ранее объявил position в качестве переменной, которую я в конечном итоге пересмотрел. Объявление Position исправило это. Однако ошибка остается

Sub ReportPivot ()
'
' ReportPivot Macro
'

' Deactivate ScreenUpdating
    Application.ScreenUpdating = False

' Declare Variables
    Dim DataSheet As Worksheet
    Dim LastRow As Long
    Dim LastCol As Long
    Dim DataRange As Range

    Dim PSheet As Worksheet
    Dim PCache As PivotCache
    Dim PTable As PivotTable
    Dim PField As PivotField

' Name Data Sheet
    ActiveSheet.Name = "Data"
' Define DataSheet
    Set DataSheet = Worksheets("Data")

' Define DataRange
    Set DataRange = DataSheet.Cells(1, 1).CurrentRegion

' Add the Processed Report sheet
    Set PSheet = ActiveWorkbook.Worksheets.Add
    PSheet.Name = "Processed Report"

' Insert DataPivotTable
    Set PTable = PSheet.PivotTableWizard(SourceType:=xlDatabase, _
    SourceData:=DataRange, _
    TableDestination:=PSheet.Cells(2, 2), _
    TableName:="DataPivotTable", _
    RowGrand:=False, _
    ColumnGrand:=False)

' Set to Tabular Layout
    PTable.RowAxisLayout xlTabularRow

' Insert Row Fields
    Dim RowFields As Variant
    RowFields = Array("productid", "Start Date", "End Date", "OriginalBlock", "ReleaseDays", "ReleaseDate")

    Dim field
    For Each field In RowFields
        Set PField = PTable.pivotFields(field)
        With PField
            .Orientation = x1RowField
            .position = Application.Match(field, RowFields, False)
            .Subtotals(place) = False
        End With
    Next field

' Ungroup Date Fields
    Dim DateFields As Variant
    DateFields = Array("Start Date", "End Date", "ReleaseDate")

    Dim dfield
    For Each dfield In DateFields
        Set PField = PTable.pivotFields(dfield)
        PField.DataRange.Cells(1).Ungroup
    Next dfield

' Sort oldest to newest
    PTable.pivotFields("Start Date").AutoSort _
        xlAscending, "Start Date"

' Resize columns
    Cells.EntireColumn.AutoFit

' Deactivate repeat labels
   PTable.RepeatAllLabels xlDoNotRepeatLabels

' Reactivate ScreenUpdating
    Application.ScreenUpdating = True

end sub

Вот некоторые примеры данных (csv):

productid,OriginalBlock,ReleaseDays,ReleaseDate,Start Date,End Date
JRS,16,6,,5/1/2019,5/31/2019
JRS,16,6,,5/1/2020,5/31/2020
JRS,16,8,,6/26/2020,6/27/2020
JRS,16,15,,6/28/2020,7/25/2020
JRS,1,22,,7/26/2020,8/25/2020
MAS,11,6,,5/1/2019,5/31/2019
MAS,11,8,,6/1/2019,6/27/2019
MAS,11,15,,6/28/2019,7/25/2019
MAS,1,22,,7/26/2019,8/25/2019
MAS,11,15,,8/26/2019,9/8/2019
MAS,11,8,,9/9/2019,9/30/2019
MAS,11,6,,10/1/2019,10/5/2019
MAS,11,6,,5/1/2020,5/31/2020
MAS,1,22,,7/26/2020,8/25/2020
SUP,25,6,,5/1/2019,5/31/2019
SUP,25,8,,6/1/2019,6/27/2019
SUP,25,15,,6/28/2019,7/25/2019
SUP,1,22,,7/26/2019,8/25/2019
SUP,25,15,,8/26/2019,9/8/2019
SUP,25,8,,9/9/2019,9/30/2019
SUP,25,6,,10/1/2019,10/5/2019
SUP,25,6,,5/1/2020,5/31/2020
SUP,25,8,,6/1/2020,6/24/2020
SUP,25,15,,6/25/2020,7/25/2020
SUP,1,22,,7/26/2020,8/25/2020
SUP,25,15,,8/26/2020,9/8/2020
SUP,25,8,,9/9/2020,9/30/2020
SUP,25,6,,10/1/2020,10/6/2020

1 Ответ

0 голосов
/ 24 января 2019

Ответ - это опечатка, как указал Тим: x1RowField против xlRowField. Должно быть последнее.

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