.datapivotfield.orientation = xlhidden не работает - PullRequest
1 голос
/ 13 июня 2019

У меня есть код vba, который проверяет все сводные таблицы в указанных рабочих листах, чтобы добавить диапазон сводных полей в раздел значений / данных сводной диаграммы, поскольку заголовки сводных данных меняются каждые 4 недели.

У меня есть 6 точек, где этот код работает отлично, но 2 точки, где я получаю сообщение об ошибке.Я пытался настроить код, но не удалось.Я использовал этот код, чтобы найти тип для этого поля сводной таблицы, поскольку я думал, что это должны быть данные, но он оказывается 'скрытым' :

Set pvtTable = Worksheets("Sheet1").Range("A3").PivotTable 
Set pvtField = pvtTable.PivotFields("ORDER_DATE") 
Select Case pvtField.Orientation 
 Case xlHidden 
 MsgBox "Hidden field" 
 Case xlRowField 
 MsgBox "Row field" 
 Case xlColumnField 
 MsgBox "Column field" 
 Case xlPageField 
 MsgBox "Page field" 
 Case xlDataField 
 MsgBox "Data field" 
End Select 

Затем я проверил этот кодна сопоставимых полях в центрах, где он работает отлично, ожидая, что это будут поля данных, но опять же это были скрытые поля.Поэтому я не понимаю, что отличается в этих двух сводных элементах, из-за которых мой код не работает по сравнению с сводными точками, в которых код работает идеально.

Это код для сводок, где он не работает:

Sub AddAllFieldsValues_blad1()
Dim pt As PivotTable
Dim iCol As Long
Dim iColEnd As Long
Dim sheetnames As Variant
Dim I As Variant

With Sheets("blad1")
    For Each pt In Sheets("blad1").PivotTables
       With pt
        .ManualUpdate = True
            .DataPivotField.Orientation = xlHidden
            iCol = 11
                With .PivotFields(iCol)
                  If .Orientation = 0 Then
                      .Orientation = xlDataField
                  End If
                End With
        .ManualUpdate = False
        pt.PivotCache.refresh
        End With
    Next pt
End With
End Sub

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

КогдаЯ выполняю этот код, я получаю эту ошибку: pivotfield-error.png

ошибка 1004: невозможно задать ориентацию правильного поля сводного поля класса

И эта строка отмечается, когда я нажимаю'решить ошибку' (или как она называется по-английски):

.DataPivotField.Orientation = xlHidden

Я не понимаю, почему, потому что она отлично работает для других стержней на листе.Единственное, что отличается, это то, что для этих опорных точек код немного отличается:

Sub AddAllFieldsValues()
Dim pt As pivottable
Dim iCol As Long
Dim iColEnd As Long
Dim sheetnames As Variant
Dim I As Variant

sheetnames = Array("data pivots euros", "data pivots category - euros", "data pivots units", "data pivots category - units")

For I = LBound(sheetnames) To UBound(sheetnames)

With Sheets(sheetnames(I))
    For Each pt In Sheets(sheetnames(I)).PivotTables
       With pt
        .ManualUpdate = True
            .DataPivotField.Orientation = xlHidden
            iCol = 12
           iColEnd = .PivotFields.Count - 4

            For iCol = 12 To iColEnd
                With .PivotFields(iCol)
                  If .Orientation = 0 Then
                      .Orientation = xlDataField
                  End If
                End With
            Next iCol
        .ManualUpdate = False
        pt.PivotCache.refresh
        End With
    Next pt
End With
Next I
End Sub

1 Ответ

1 голос
/ 13 июня 2019

Свойство DataPivotField содержит ошибки, так как оно работает,
, если в вашей сводной таблице уже есть хотя бы 2 поля данных !

Если вы хотите удалитьсначала каждое поле данных, а затем замените строку

.DataPivotField.Orientation = xlHidden

следующим:

Dim df as PivotField
For Each df In .DataFields
    df.Orientation = xlHidden
Next df
...