2015-07-07 5 views
0

Я предпочитаю создавать отчет Excel, в котором нет ссылок, поэтому он легко доступен и может быть легко отправлен по электронной почте.Обновление источника данных Pivot Table Excel с помощью VBA в MS Access

Итак, у меня есть этот отчет, который я генерирую из MS Access - он записывает таблицу в TAB книги, которую я ранее создал сводную таблицу, которая использует эту вкладку в качестве источника.

То, что я, кажется, не может заставить работать должным образом

xlPivot.PivotTables("pvAFP").RefreshTable 

Мой код выглядит следующим образом:

Public Sub ViewAFP(strPathToTemplate As String, Optional dbFullPath As String) 

'10 Excel objects created 
Dim xlApp As Object 
Dim WB As Object 
Dim xlSheet As Object 
Dim xlPivot As Object 
Dim rngWorkingRange As Object 
Dim intCOL As Integer 

Dim db As Database 

Dim rsAFP_Pivot As DAO.Recordset 
Dim rsAFP_Data As DAO.Recordset 



Dim fld As Variant 

Dim strLocation As String 


'uses the 'My Documents\COB folder of the user 
'C:\Users\[username]\Documents\COB 
strLocation = "C:\users\" & Environ$("Username") & "\Documents\COB\AFP_Summary_" & DateString & ".xlsx" 



Set xlApp = CreateObject("Excel.Application") 

Set WB = xlApp.Workbooks.Open(strPathToTemplate) 

Set xlSheet = WB.Sheets("AFP DATA") 
Set xlPivot = WB.Sheets("AFP PIVOT") 



'ALLOW FOR EXTERNAL ENGINES 
If Len(dbFullPath) < 1 Then 
    Set db = CurrentDb 
Else 
    Set db = OpenDatabase(dbFullPath, True) 
End If 


Set rsAFP_Data = db.OpenRecordset("Select * FROM AFP_DATA") 

intCOL = 1 

For Each fld In rsAFP_Data.Fields 
    xlSheet.Cells(1, intCOL).Value = fld.Name 
    Debug.Print fld.Name 
    intCOL = intCOL + 1 
Next 


xlSheet.Range("A2").CopyFromRecordset rsAFP_Data 


Set rngWorkingRange = xlSheet.Range("A1").CurrentRegion 


    xlSheet.ListObjects.Add(xlSrcRange, rngWorkingRange, , xlYes).Name _ 
     = "AFP_Data" 
    xlSheet.ListObjects("AFP_Data").TableStyle = "TableStyleLight9" 

'set pvAFP to point to this table 
    xlPivot.PivotTables("pvAFP").ChangePivotCache WB.PivotCaches. _ 
     Create(SourceType:=xlDatabase, SourceData:="AFP DATA!AFP_Data", _ 
     Version:=xlPivotTableVersion12) 



xlPivot.Select 

xlPivot.PivotTables("pvAFP").RefreshTable 

WB.RefreshAll 
WB.SaveAs FileName:=strLocation 

xlApp.Quit 

Set xlSheet = Nothing 
Set fld = Nothing 

Set rsAFP_Data = Nothing 

Set db = Nothing 
Set WB = Nothing 
Set xlApp = Nothing 

End Sub 

Было бы хорошо, чтобы быть готовым к использованию, так как пользователь должен " Обновить все», прежде, чем все, что может быть сделано для сводной таблицы

+3

Во-первых, хранение данных в Excel делает его более тяжелым, а не легким. Ссылки не являются данными. Вы увидите заметную разницу в размере файла с помощью сводной таблицы ODBC, особенно если таблица находится в тысячах. Во-вторых, я вижу, что вы используете шаблон, но нигде вы не удаляете предыдущие данные с помощью параметра «Диапазон»(). Также подумайте об обновлении [PivotCache] (https://msdn.microsoft.com/en-us/library/office/ff195521.aspx) – Parfait

+0

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

ответ

0

Смотрите, если это работает для вас:

xlPivot.PivotTables("pvAFP").PivotCache.Refresh 
Смежные вопросы