Таблица VBA Piovot-выбор фильтра нескольких отчетов

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

Я буду получать идентификатор счета, который будет присутствовать в фильтре отчета, который может быть один или много, как идентификатор счета "AI124", "AI245", "AI456", "AI671"из 100 идентификаторов счета (из 50k записей)

1) я не могу фильтровать для нескольких идентификаторов учетной записи с помощью VBA.

2) члены команды бы претендовали на этот счет ID с прошлого года, но мне нужно заполнить с 11 марта, где значение будет указано в заголовке

Я попытался проверить в интернете и начал писать ниже код, который не может быть правильным, но предоставляет в качестве ссылки.

Sub CreatePivot()
    ' Creates a PivotTable report from the table on Sheet1
    ' by using the PivotTableWizard method with the PivotFields
    ' method to specify the fields in the PivotTable.
    Dim objTable As PivotTable, objField As PivotField

    ' Select the sheet and first cell of the table that contains the data.
    ActiveWorkbook.Sheets("DATA").Select
    Range("A1").Select

    ' Create the PivotTable object based on the Employee data on Sheet1.
     Set objTable = Sheet1.PivotTableWizard
    ' Specify row and column fields.
    Set objField = objTable.PivotFields("Emp Last Name")
    objField.Orientation = xlRowField
    objField.Position = 1

    Set objField = objTable.PivotFields("Emp Ser Num")
    objField.Orientation = xlRowField
    objField.Position = 2

    Set objField = objTable.PivotFields("Week Ending Date")
    objField.Orientation = xlColumnField
    objField.Position = 1
    ' Specify a data field with its summary
    ' function and format.

    Set objField = objTable.PivotFields("Total Hrs Expended")
    objField.Orientation = xlDataField
    objField.Function = xlSum
    objField.NumberFormat = "#,##0"

    ' Specify a page field.
    Set objField = objTable.PivotFields("Account Id")
    objField.Orientation = xlPageField

    Application.ScreenUpdating = False
   'ActiveSheet.PivotTables("PivotTable2").ManualUpdate = True
   objTable.ManualUpdate = True
   'objTable.PivotFields("Account Id").ClearAllFilters
   ' objTable.PivotFields("Account Id").CurrentPage = Array("PJ1234", _ "AI82159", "AI5444")


    '-------------
    Set objField = objTable.PivotFields("Account Id")
    objField.Orientation = xlPageField
    Myarray = Array("PJ1234", "AI5444", "AI82159")
    For x = 1 To objField.PivotFields.Count
        objField.PivotFields(x).Visible = False
    Next
    For x = 0 To 3
        objField.PivotFields(Myarray(x)).Visible = True
    Next
   objTable.ManualUpdate = False

   Application.ScreenUpdating = True



    ' Preview the new PivotTable report.
    ActiveSheet.PrintPreview

    ' Prompt the user whether to delete the PivotTable.
    Application.DisplayAlerts = False
    If MsgBox("Delete the PivotTable?", vbYesNo) = vbYes Then
        ActiveSheet.Delete
    End If
    Application.DisplayAlerts = True
 End Sub

ваша помощь очень ценится.

1 ответ

  1. Я не проверил ни один из комментариев в этом ответе.


    Незначительная вещь-вероятно, не способствующая вашей проблеме …

    Действительно ли сводная таблица на Листах1? Несмотря на это, я бы рекомендовал изменить это …

    Set objTable = Sheet1.PivotTableWizard
    

    … к чему-то вроде этого …

    Set objTable = Worksheet("Sheet1").PivotTables("PivotTable1")
    

    Имя сводной таблицы можно найти на ленте анализ.


    Это выглядит так, как будто вы используете PivotFieldsтам, где вы должны использовать PivotItems. Я бы изменил это …

    objField.PivotFields(x).Visible = False
    

    … до настоящего времени. .

    objField.PivotItems(x).Visible = False
    

    … и изменить это …

    objField.PivotFields(Myarray(x)).Visible = True
    

    … до настоящего времени. ..

    objField.PivotItems(Myarray(x)).Visible = True