2009-12-08 5 views
0

Я попытался записать код, чтобы обновить сводную sourcedata, который дал мне это:Excel VBA: Обновление Pivot Sourcedata

ActiveSheet.PivotTableWizard SourceType:=xlExternal, _ 
    SourceData:=QueryArry1, _ 
    Connection:=Array(_ 
     Array("ODBC;DSN=MS Access Database;DBQ=" & DBDir & "\" & DBName & ";"), _ 
     Array("DefaultDir=" & DBDir & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;") _ 
    ) 

Но это даже не позволяет мне указать, какие сводную таблицу нужно обновить. .. или даже делать то, что я действительно хочу сделать, что обновляет pivotcache, так что все сводные таблицы, использующие тот же источник, обновляются.

Так что же это хороший способ обновить sourcedata?

Благодаря

EDIT:

Но я даже получить "приложения или объекта определяется ошибка" ошибка как-то просто, как:

str = Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText 
Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText = str 

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

Thanks

ответ

5

PivotCaches доступен через Рабочие книги. Вы можете перечислить все текущие тайники со следующими подразделами:

Option Explicit 

Private Sub listCaches() 
    Dim selectedCache As PivotCache 

    For Each selectedCache In ThisWorkbook.PivotCaches 
     Debug.Print selectedCache.Index 
     Debug.Print selectedCache.Connection 
    Next selectedCache 

End Sub 

Вы можете получить доступ к соединению вы хотите изменить с:

ThisWorkbook.PivotCaches(yourIndex).Connection 

Примечания: После изменения подключения необходимо вызвать:

ThisWorkbook.PivotCaches(yourIndex).Refresh 

Редактировать: Вместо изменения SourceData вы можете изменить CommandText. Это должно иметь такой же эффект. Следующий код работал для меня:

Этот код также обновил мою SourceData.

Edit2: Изменение CommandText throgh PivotTable:

Sheets("mySheet").PivotTables("PivotTable1").PivotCache.CommandText = "SELECT movies.title as meh, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies" 
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.Refresh 

Примечание: moviesDB является файл .mdb и фильмы это таблица/запрос

Примечание2: Это может также помочь вам Debug.Print Рабочими CommandText перед его изменением. Это должно дать вам шаблон для вашего нового CommandText.

+0

Соединение прекрасное, я пытаюсь изменить SourceData ... но я получаю «Определяемая приложением или объектная ошибка» при попытке «ThisWorkbook.PivotCaches (2) .SourceData = QueryArry1» .. . Я начинаю думать, что этот тип ссылки SourceData доступен только для чтения и не может использоваться для установки значения. Я пробовал несколько разных форм QueryArry1, включая «QueryArry1 = ThisWorkbook.PivotCaches (2) .SourceData« ... Я всегда получаю ту же ошибку – Dan

+1

Я не уверен, что такое содержимое вашего QueryArry, но я думаю, вы хотите измените запрос, который отправляется в базу данных. Изменение CommandText сработало для меня. Я добавил образец кода в свой ответ. – marg

+0

Сводные кеши продолжают изменять свой индекс ... Поэтому я пытаюсь выполнить команду: «Листы (« Итого »). Сводные таблицы (« Сводная таблица1 »).PivotCache.CommandText = "SELECT * FROM Totals" ", но он дает мне ошибку:" определяемая приложением или объектная ошибка " – Dan

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