2016-01-15 8 views
3

Я пытаюсь использовать VBA для автоматического обновления фильтра сводной таблицы, основанного на выборе пользователя из ячейки. Я считаю, что все работает правильно до строки 11, в которой говорится: «Field.CurrentPage = NewCat». В этом и заключается проблема. Код очищает мой фильтр, как указано в предыдущей строке, но когда он добирается до кода, инструктирующего его для выбора новых данных, я получаю сообщение об ошибке «Ошибка времени выполнения 1004. Невозможно установить свойство CurrentPage класса PivotField».Получение «Невозможно установить свойство CurrentPage класса PivotField»

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Intersect(Target, Range("C3:C4")) Is Nothing Then Exit Sub 

Dim pt As PivotTable 
Dim Field As PivotField 
Dim NewCat As String 

Set pt = Worksheets("Pivot").PivotTables("PivotTable1") 
Set Field = pt.PivotFields("[Range].[Site].[Site]") 
NewCat = Worksheets("Interface").Range("C3").Value 

With pt 
Field.ClearAllFilters 
Field.CurrentPage = NewCat 
pt.RefreshTable 
End With 

End Sub 

ответ

2

Ответ только в синтаксисе.

Если вы меняете:

With pt 
Field.ClearAllFilters 
Field.CurrentPage = NewCat 
pt.RefreshTable 
End With 

к:

With Field 
    .ClearAllFilters 
    .CurrentPage = NewCat 
End With 

pt.RefreshTable 

Он будет работать.

Обратите внимание, что я непосредственно работаю с Field в With Block.

Для иллюстрации дальше, если вы измените его в дальнейшем, он будет работать, а также:

With pt.PivotFields(Field.Name) 
    .ClearAllFilters 
    .CurrentPage = NewCat 
End With 

pt.RefreshTable 

Таким образом, вы в основном должны работать непосредственно с объектами, и вам необходимо квалифицировать объекты, свойства, методы/и т.д. с .

+0

Привет, Скотт. Большое спасибо за ответ и за информацию. К сожалению, я все еще получаю то же сообщение об ошибке с обоими альтернативными примерами, которые вы предоставили. Я не уверен, что это актуально, но при создании сводной таблицы это связано с тем, что я выбрал «Добавить эти данные в модель данных» в разделе «Выберите, хотите ли вы анализировать несколько таблиц». Это связано с тем, что мне нужно было получить доступ к функции «Различный счет» в сводной таблице, доступ к которой возможен только при выборе этой опции. Это может быть актуально, поскольку скрипт VBA работает нормально, если я не выбираю этот параметр. –

0

Я использовал следующий код и изменил название полей и значение диапазона:

With ActiveSheet.PivotTables("pvtTest").PivotFields("Week") 
    .ClearAllFilters 
    .PivotFilters.Add Type:=xlCaptionEquals, Value1:=ActiveSheet.Range("K1").Value 
End With 

[1] http://www.ozgrid.com/forum/showthread.php?t=169855

0

Надеясь это будет полезно для тех, кто испытывает тот же «1004» Ошибка при попытке установить свойство «CurrentPage» класса PivotField.

Для меня, это, наконец, работал, когда я заменил свойство «CurrentPage» с «CurrentPageName» как таковой:

With pf 
    .ClearAllFilters 
    MsgBox "The PivotField is: " & pf.Value 
    MsgBox "The current PivotField value is: " & .CurrentPageName 
    .CurrentPageName = NewCat 
End With 

Моя сводная таблица есть то, что называется «фильтры на уровне страницы»: enter image description here

Смежные вопросы