pi.Visibleв Excel 2010 - PullRequest
       5

pi.Visibleв Excel 2010

0 голосов
/ 10 ноября 2019

Уважаемые эксперты и гуру,

Я написал следующий код для сводной таблицы, и она генерирует ошибку pi.Visible.

Sub piVisibleMismatch()

Dim lastrow As Long, endrow As Long
Dim Psheet As Worksheet, Dsheet As Worksheet
Dim Pcache As PivotCache, Ptable As PivotTable, Prange As Range
Dim i As Long, j As Long, pi As PivotItem
Dim currep_date As Date

Application.ScreenUpdating = False

currep_date = "31/10/2019"

Worksheets("Summary").UsedRange

Worksheets("PivotTable").Activate

ActiveSheet.Cells.ClearContents
ActiveSheet.Cells.ClearFormats
ActiveSheet.Tab.ColorIndex = xlColorIndexNone

Set Psheet = Worksheets("PivotTable")
Set Dsheet = Worksheets("Summary")

lastrow = Dsheet.Cells(Rows.Count, 1).End(xlUp).Row
Set Prange = Dsheet.Range("A2:O" & lastrow)

On Error Resume Next

Set Pcache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Prange). _
CreatePivotTable(TableDestination:=Psheet.Cells(6, 1), TableName:="Total_Table")

Set Ptable = Pcache.CreatePivotTable(TableDestination:=Psheet.Cells(6, 1), TableName:="Total_Table")

With ActiveSheet.PivotTables("Total_Table").PivotFields("Balance 2")
    .Orientation = xlDataField
    .Position = 1
    .Function = xlSum
End With
With ActiveSheet.PivotTables("Total_Table").PivotFields("Type of Account")
    .Orientation = xlPageField
    .Position = 1
End With
With ActiveSheet.PivotTables("Total_Table").PivotFields("Collection Date")
    .Orientation = xlPageField
    .Position = 3
End With
With ActiveSheet.PivotTables("Total_Table").PivotFields("Reporting CCY")
    .Orientation = xlColumnField
    .Position = 1
End With
ActiveSheet.PivotTables("Total_Table").PivotFields("Type of Account").CurrentPage = "Regular"

With ActiveSheet.PivotTables("Total_Table").PivotFields("Collection Date")
    For Each pi In .PivotItems
        If CDate(pi.Name) > currep_date + 30 Then
            pi.Visible = False
        End If
    Next pi
End With

On Error GoTo 0

ActiveSheet.PivotTables("Total_Table").ShowTableStyleRowStripes = True
ActiveSheet.PivotTables("Total_Table").TableStyle2 = "PivotStyleLight2"

ActiveSheet.UsedRange

ActiveSheet.Range("B:F").Select
Selection.Style = "Comma"
    Selection.NumberFormat = "_(* #,##0.0_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
    Selection.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)"
ActiveSheet.Cells.Font.Name = "Arial"
ActiveSheet.Cells.Font.Size = 8
ActiveSheet.Range("A:A").ColumnWidth = 35#: ActiveSheet.Range("B:F").ColumnWidth = 15#
ActiveSheet.Range("A1").Select

On Error GoTo 0

Application.ScreenUpdating = True

End Sub

У меня была похожая ошибка для 2другие листы, но после отладки в течение более 5 часов я мог отследить ошибку несоответствия lastrow. Последняя строка в исходной рабочей таблице для сводной таблицы была обновлена ​​и состояла из строк с непреднамеренными данными во время отладки. Когда я заметил, что диапазон данных для сводной таблицы и номер последней строки различаются, я удалил ненужные данные, запустил макрос, который корректно обновил последнюю строку, а затем правильно отфильтровал дату.

В существующей рабочей таблице датыв исходной рабочей таблице указан тип данных date, а переменная currep_date также указана в типе данных date. Я ломал голову больше, чем делал раньше, и исследую статьи на многих веб-сайтах, чтобы определить ошибку, но я все еще не понимаю.

Я ценю ваше время и делюсь вашими ценными знаниями и просьбой о любой альтернативе. решение для фильтрации дат без изменения типа данных.

С уважением, Рошан Шакья

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