Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 10:05   #1
Артем_100
Новичок
Джуниор
 
Регистрация: 15.12.2011
Сообщений: 2
По умолчанию Макрос обновления сводной для текущей даты

Добрый день! Возникла такая потребность/проблема. Имеется сводная, которая при открывании автоматически обновляется, нужно сделать так, чтобы автоматически в фильтре отчета проставлялась текущая дата.
Сводная уже имеет код для выставления правильного формата (большая благодарность в помощи VDM). Для выставления текущей даты и обновления сводной по нужным форматам код имеет такой вид:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Sheets("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата").Curr entPage = _
Format(CDate(Sheets("НАДО").Cells(1 , 3)), "DD/MM/YYYY")
Sheets("НАДО").PivotTables("Сводная Таблица5").PivotSelect "цена[All]", xlLabelOnly, True
Selection.NumberFormat = "#,##0.00"
End Sub

Выдается ошибка: "Aplication - defined or object defined error" с выделением строки Sheets("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата").Curr entPage = _
Format(CDate(Sheets("НАДО").Cells(1 , 3)), "DD/MM/YYYY")

Сводная таблица при открытии автоматически обновляется и должна показывать данные согласно текущей даты.

В VBA плохо разбираюсь (практически не разбираюсь), поэтому, пожалуйста, помогите праильно прописать код..
Артем_100 вне форума Ответить с цитированием
Старый 15.12.2011, 14:55   #2
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Попробуйте так
Код:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim x
For Each x In Application.ActiveWorkbook.PivotCaches
x.MissingItemsLimit = xlMissingItemsNone
Next
 Sheets("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата").Curr entPage = _
 Format(CDate(Sheets("НАДО").Cells(1, 3)), "DD/MM/YYYY")
 Sheets("НАДО").PivotTables("Сводная Таблица5").PivotSelect "цена[All]", xlLabelOnly, True
 Selection.NumberFormat = "#,##0.00"
 End Sub

Последний раз редактировалось agregator; 15.12.2011 в 16:52.
agregator вне форума Ответить с цитированием
Старый 16.12.2011, 11:46   #3
Артем_100
Новичок
Джуниор
 
Регистрация: 15.12.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от agregator Посмотреть сообщение
Попробуйте так
Код:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim x
For Each x In Application.ActiveWorkbook.PivotCaches
x.MissingItemsLimit = xlMissingItemsNone
Next
 Sheets("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата").Curr entPage = _
 Format(CDate(Sheets("НАДО").Cells(1, 3)), "DD/MM/YYYY")
 Sheets("НАДО").PivotTables("Сводная Таблица5").PivotSelect "цена[All]", xlLabelOnly, True
 Selection.NumberFormat = "#,##0.00"
 End Sub
Теперь ошибка "object doesn't support this property or method" и выделяет строку Sheets("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата").Curr entPage = _
Format(CDate(Sheets("НАДО").Cells(1 , 3)), "DD/MM/YYYY")
Объясните, пожалуйста, я так понял "Format(CDate(Sheets("НАДО").Cells( 1, 3))" обозначает ячейку, где должна проставляться текущая дата - по какой формуле? ТДАТА() или СЕГОДНЯ()?
Cells(1,3) координаты этой ячейки, т.е. А3?
А PivotFields обозначает ячейку сводной в области фильтра отчета?
...бьюсь уже 4-й день...
Артем_100 вне форума Ответить с цитированием
Старый 16.12.2011, 15:53   #4
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Попробуй так
запусти вручную
Код:
Sub Фильтр()
 Dim dat1, dat2 As Date
Dim x
For Each x In Application.ActiveWorkbook.PivotCaches
x.MissingItemsLimit = xlMissingItemsNone
Next
 With Sheets ("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата")
        For i = 1 To .PivotItems.Count
            dat1 = .PivotItems(i).Name
            dat2 = Format(Now(), " DD/MM/YYYY ")
        If dat2 = dat1 Then
            .PivotItems(i).Visible = True 
        Else
            .PivotItems(i).Visible = False
        End If
            
        Next
    End With
End Sub
Автоматически код зацикливается

Код:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
 Dim dat1, dat2 As Date
Dim x
For Each x In Application.ActiveWorkbook.PivotCaches
x.MissingItemsLimit = xlMissingItemsNone
Next
 With Sheets ("НАДО").PivotTables("Сводная Таблица5").PivotFields("Дата")
        For i = 1 To .PivotItems.Count
            dat1 = .PivotItems(i).Name
            dat2 = Format(Now(), " DD/MM/YYYY ")
        If dat2 = dat1 Then
            .PivotItems(i).Visible = True 
        Else
            .PivotItems(i).Visible = False
        End If
            
        Next
    End With
End Sub

Последний раз редактировалось agregator; 16.12.2011 в 16:28.
agregator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для создания сводной таблицы igsxor Microsoft Office Excel 20 01.09.2011 08:20
макрос отображения даты в сводной таблице S_V Microsoft Office Excel 0 20.05.2011 21:56
Макрос вставки текущей даты и времени в примечание. Severny Microsoft Office Excel 3 20.12.2010 14:09
Горячая клавиша для текущей даты sergantikus Microsoft Office Excel 4 30.06.2010 13:57
Макрос для сводной таблицы kipish_lp Microsoft Office Excel 2 21.04.2010 10:58