2016-09-30 7 views
3

Я искал всюду на google (и здесь) и пробовал различные комбинации кода из всех источников, включая этот сайт, Excelguru, excelexperts , ozgrid, dedicatedexcel, excelcampus, spreadsheetguru и т. д. ..... так далее и т. д. ...Excel VBA для фильтрации сводной таблицы и сводной диаграммы за предыдущий день - поле поворотного фильтра

Вот моя проблема, каждый бит кода, каждое изменение, каждый тип, не работает. Я использую Office 360 ​​на своем рабочем сайте (в актуальном состоянии), поэтому это Excel 2016 и VBA 7.1.

Что я хочу сделать, это автоматизировать отчеты о завершении смены. Вот этот процесс:

Мы вводим данные в лист Excel (журнал) каждый час. В конце дня, в 5:00 утра, мы сохраняем и закрываем этот журнал, открываем еще один лист Excel, который ИМПОРТИРОВАН данные в силовую точку и отображает его на сводной таблице (форматирование для печати для наших боссов), и мы выбираем фильтр для предыдущей даты, используя фильтр, и распечатайте его. Мы делаем это с тремя (3) отчетами: 2 сводных таблицах и 1 PivotChart. Power Pivot импортирует ВСЕ данные из листа журнала, чтобы переформатировать его для печати.

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

Код я попытался обширен, но вот пример того, что я пробовал в последнее время (я уже стерта и повторно копируются так много кодов ...)

Sub Filter_PivotField() 
'Description: Filter a pivot table or slicer for a specific date or period 
'Source: excelcampus.com/vba/filter-pivot-table-slicer-recent-date-period 

Dim sSheetName As String 
Dim sPivotName As String 
Dim sFieldName As String 
Dim sFilterCrit As String 
Dim pi As PivotFields 

    'Set the variables 
    sSheetName = "EOS Report" 
    sPivotName = "PivotTable1" 
    sFieldName = "Date" 
    sFilterCrit = "xlDateYesterday" 
    'sFilterCrit = ThisWorkbook.Worksheets("EOS Report").Range("O1").Value 

    With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName) 
     'Clear all filter of the pivotfield 
     .ClearAllFilters 

     'Loop through pivot items of the pivot field 
     'Hide or filter out items that do not match the criteria 
     For Each pi In .PivotFields 
      If pi.Name sFilterCrit Then 
       pi.Visible = False 
      End If 
     Next pi 

    End With 

End Sub 

Чтобы не дало никаких результатов ....

когда я записать макрос делает ручной фильтр, я получаю это:

Sub manualfilter() 
' 
' manualfilter Macro 
' 

' 
    ActiveSheet.PivotTables("PivotTable1").PivotFields(_ 
     "[Bi-Hourly Report].[Date].[Date]").VisibleItemsList = Array(_ 
     "[Bi-Hourly Report].[Date].&[2016-09-28T00:00:00]") 
End Sub

Но он терпит неудачу при попытке повторно запустить тот же макрос, который я только что записанный (после изменения параметров дата назад). Я включил и отключил несколько вариантов выбора и т. Д. Каждый совет, который я нашел ... nada ...

Не говоря уже о том, что попытка автофильтра диаграммы - это кошмар, потому что таблицы, да, есть тонны статей на нем, но графики? не очень много при исследовании ...

Вот изображения кнопки фильтра, потому что почти все, что я исследовал, это сортировать COLUMN таблицы, а не сам фильтр с сводной таблицей.

Table Filter

Chart Filter

Любая помощь по этому вопросу было бы весьма признателен! Я не могу опубликовать фактические таблицы Excel, поскольку они являются собственностью компании, но я могу реплицировать формат с ложными данными, если это необходимо ... Я был в этом почти месяц ...

Спасибо, заранее!

+0

Можете ли вы мне помочь? https: // stackoverflow.com/q/48442027/9267058 – MissTeppy

ответ

2

проверьте это.

Dim prev_date As String 

prev_date = Month(Date - 1) & "/" & Day(Date - 1) & "/" & Year(Date - 1) 
Thisworkbook.Sheets("Sheet1").Activate 
'change this line with your sheet where pivot table is present. Change Sheet name. 
ActiveSheet.PivotTables("PivotTable1").RefreshTable 
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = prev_date 
+0

Я изменил свой записанный макрос и заменил код, который вы отправили, и в разделе debug> show definition указано, что идентификатор под курсором не распознается, а выделенная часть - последние две строки, с курсором на Тип: = xlDateYesterday – DevilzEye

+0

В сводной таблице, где вы перетащили столбец «Дата». Он должен находиться в разделе «Строки», чтобы этот код работал. Я сомневаюсь, что он находится в разделе «Фильтр отчетов». Пожалуйста, проверьте. –

+0

В списке полей «Дата» находится в разделе «Фильтры». Вот как настроены отчеты, потому что это дневная база, как и скриншот в OP. При необходимости я могу сделать еще один снимок экрана, чтобы вы могли видеть, как он разработан. Этот отчет предназначен для отчета о типе выпуска для нашего босса. Все VBA, которые я нашел, манипулируют столбцами, и я еще не нашел его для изменения поля «Фильтры» в сводной таблице ... :( – DevilzEye