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