2016-08-14 4 views
0

У меня возникла проблема в последнее время, и любая помощь в решении очень ценится.VBA Сводные таблицы и кодировка

Мой лист «Sheet1» имеет сводную таблицу «Dyn40». Одним из PivotFields является «Параметры», и одним из возможных PivotItems является «Картофель». Я имею ошибку #error 438: объект не поддерживает это свойство или метод

Sub FindPriority() 

Dim pass As String 
pass = "user" 
    With Worksheets("Sheet1") 
    .Activate 
    .Unprotect Password:=pass 
    Range("TK2").Select ‘ < --- is this necessary ? 
    ActiveSheet.PivotTables("Dyn40").PivotCache.Refresh 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").ListCount = 1 Then ‘check if there is at least one item in the field 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").count = 1 Then ‘check if there is at least one single item named “Potato” 
     CreateObject("WScript.Shell").Popup "Only one item exists and its name is Potato" ‘ if there exists, then message pops up 
     End If 
     Else 
     If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").ListCount > 1 Then ‘check if there is more than one item in the field 
      If ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").count = 1 Then ‘check if there is at least one single item named “Potato” 
       CreateObject("WScript.Shell").Popup "There is more than one item and one of them is Potato"‘ if there exists, then message pops up 
       ActiveSheet.PivotTables("Dyn40").PivotFields("Options").PivotItems("Potato").Visible = False ‘ and then the name “Potato” is hidden 
      End If 
      Else 
       CreateObject("WScript.Shell").Popup "There is nothing in here" 'if there are no fields available, message pops up 
     End If 
     End If 

    End With 
End Sub 

Следующий вопрос ... если я хочу заменить картошку на ««(пустое поле) как это будет выглядеть фрагмент кода?

+1

В качестве примечания стороны замените странный 'CreateObject (« WScript.Shell »). Popup' с' MsgBox'. Ответ на «<--- это необходимо?» - [нет] (http://stackoverflow.com/q/10714251/11683). – GSerg

+1

Вы не говорите, где ошибка, поэтому я предполагаю, что это «PivotField», у которого нет «ListCount». – GSerg

+0

Как продолжение комментария @ GSerg, работает ли «RecordCount»? –

ответ

0

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

Как и в самого начало, то Фильтры поля (Люди и параметры) были постоянные данные, а это означает, что никаких новых людей, ни параметры не будут рассматриваться как новые записи, так как они были фиксированные предметы. Ряд Этикетки и значения поля были, с другой стороны, переменные, а это означает, что их содержание может быть изменено, добавлены или удалены в пределах базы данных, как желает - рисунок 1.

Picture 1

Supose теперь, когда я хочу отфильтровать одного человека «Laetitia» с поля Люди, исключая ее из моих результатов. Зная заранее, что все новые записи в отношении Люди не изменятся (новые имена не будут добавлены в список для данного конкретного примера), после того, как сводная таблица будет обновлена ​​новыми данными, целостность наших результатов будет хорошей - Изображение 2

Picture 2

Supose теперь, когда я хочу, чтобы фильтровать один овощ «картошка», за исключением его из наших результатов в области Овощи. Картофель в Row Lables и это поле является переменным, а это означает, что новые овощи и новые транспортные средства будут добавлены или исключены - Рис.3

Picture 3

Проблема начинается когда сводная таблица обновляется. Если в нашу базу данных (т. Е .: Beetroot) добавлена ​​новая запись, касающаяся поля Овощи, она не будет обработана в конечном результате, даже если таблицы приватов будут обновлены. Можно было бы заметить, что эти новые данные «свекла» не были включены в наш отчет. Обратите внимание, что, обратившись к Сводная таблица> Ярлыки строк> Овощи. Мы можем понять, что «свекольный» не были выбраны автоматически - Изображение 4

Picture 4

Так, чтобы исправить это неудобство, просто доступ PivotTable> Row Labels> Овощи> Поданные конфигурации и, наконец, отметьте box «Выберите новые элементы в поле ввода» - Фотографии 5,6.

Picture 5
Picture 6

Наконец, в следующий раз новые записи в поле Овощей добавлена ​​ и сводная таблица обновляется, только вегетарианец, который не собирается быть доступным Картофель (как и планировалось!). Что касается заключения, сделайте , не забудьте выбрать Параметры сводной таблицы> Данные> и выберите «NONE» в разделе «Количество элементов для сохранения на поле». Этот параметр автоматический по умолчанию и изменить его на None предотвратит сводную таблицу сохранить пункты в выпадающих списках, которые больше не существует в нашей обновляемой базы данных - Изображение 7

Picture 7

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