Ошибка «1004»: невозможно установить свойство Visible класса PivotItem.

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

With pt.PivotFields(6)
    .ClearAllFilters
     If .PivotItems.Count > 0 Then

        'goofy but necessary
        Set firstPi = .PivotItems(1)

        For Each pi In .PivotItems

            If firstPi.Visible = False Then
                firstPi.Visible = True
            End If

             'Don't loop through firstPi
            If pi.Value <> firstPi.Value Then
                itemValue = pt.GetPivotData("[Measures].[Nr of Cancelled]", "[Characteristics].[Reason]", pi.Name).Value

                rw = rw + 1
                nwSheet.Cells(rw, 1).Value = pi.Name
                nwSheet.Cells(rw, 2).Value = pi.Visible
                If itemValue < 2000 Then
                    If pi.Visible = True Then
                        pi.Visible = False 'Error here
                    End If
                Else
                    MsgBox pi.Value
                    If pi.Visible = False Then
                        pi.Visible = True 'Error here
                    End If
                End If
            End If
        Next

              'Finally perform the check on the first pivot item
              If firstPi > 2000 Then
                  firstPi.Visible = True
              Else
                  firstPi.Visible = False
              End If
           End If
    End With

Я вижу, что весь код работает нормально, и я сталкиваюсь с ошибкой только в строках pi.Visible = True или pi.Visible = False.

Я не уверен, где я сделал что-то не так, чтобы код не работал.

Когда я искал решение в Интернете, я наткнулся на эту ссылку: https://support.microsoft.com/en-us/kb/114822, где MS упомянула, что только непрерывные элементы в поле сводной таблицы могут быть скрыты. Означает ли это, что элементы в моей таблице не являются смежными? Может кто-нибудь мне помочь? Я потерялся здесь.


person Pramod    schedule 25.07.2016    source источник
comment
Являются ли элементы в вашей таблице смежными? Я сомневаюсь, что кто-нибудь на SO может ответить на это.   -  person Comintern    schedule 25.07.2016
comment
Как я могу определить, является ли он смежным или нет? я понятия не имею, что это такое   -  person Pramod    schedule 25.07.2016
comment
Могу ли я увидеть ваш файл Excel? Если да, то загрузите его на бесплатный файлообменник и поделитесь ссылкой здесь. Также убедитесь, что если у вас есть какие-либо конфиденциальные данные, замените их фиктивными данными.   -  person Siddharth Rout    schedule 27.07.2016
comment
Привет @SiddharthRout, спасибо за ваш ответ. Но все сайты обмена файлами ограничены. Я не могу сделать это. Однако я нашел способ решить задачу. Пожалуйста, найдите ответ, который я опубликовал.   -  person Pramod    schedule 27.07.2016


Ответы (1)


Я не нашел решения для ошибки. Но я нашел другой способ добиться поставленной задачи. Я использовал массив для хранения всех элементов, которые нужно скрыть, и элементов, которые должны быть видны, чтобы я мог вызывать либо HiddenItemsList, либо VisibleItemsList:

    For Each pvtitem In pt.PivotFields(6).PivotItems
        On Error GoTo skipreason
        itemValue = pt.GetPivotData("[Measures].[Cancelled]", "[Characteristics].[Reason]", pvtitem.Name).Value
        If itemValue < 2000 Then
            hiddenReasons(hiddenCount) = pvtitem.Name
            hiddenCount = hiddenCount + 1
        Else
            visibleReasons(visibleCount) = pvtitem.Name
            visibleCount = visibleCount + 1
        End If

Sheets("Cancels").PivotTables("Cancels").PivotFields( _
    "[Characteristics].[Reason].[Reason]" _
    ).VisibleItemsList = Array(visibleReasons())
person Pramod    schedule 27.07.2016