Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MS Access中使用VBA刷新Excel数据透视表数据源_Excel_Ms Access_Vba_Pivot Table - Fatal编程技术网

在MS Access中使用VBA刷新Excel数据透视表数据源

在MS Access中使用VBA刷新Excel数据透视表数据源,excel,ms-access,vba,pivot-table,Excel,Ms Access,Vba,Pivot Table,我更喜欢生成一个Excel报告,其中没有链接,因此它是轻量级的,并且可以轻松地通过电子邮件发送 因此,我有一个从MS Access生成的报告—它将表写入工作簿的选项卡,我以前构建了一个数据透视表,该表使用该选项卡作为源 我似乎无法正常工作的是 xlPivot.PivotTables("pvAFP").RefreshTable 我的代码如下: Public Sub ViewAFP(strPathToTemplate As String, Optional dbFullPath As String

我更喜欢生成一个Excel报告,其中没有链接,因此它是轻量级的,并且可以轻松地通过电子邮件发送

因此,我有一个从MS Access生成的报告—它将表写入工作簿的选项卡,我以前构建了一个数据透视表,该表使用该选项卡作为源

我似乎无法正常工作的是

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
Public子视图afp(strPathToTemplate作为字符串,可选dbFullPath作为字符串)
“创建了10个Excel对象
将xlApp作为对象
作为对象的Dim WB
将图纸作为对象
将轴作为对象
作为对象的调暗rngWorkingRange
Dim intCOL作为整数
dimdb作为数据库
将rsAFP_轴调整为DAO.Recordset
作为DAO.Recordset的Dim rsAFP_数据
Dim fld作为变体
作为字符串的Dim strLocation
'使用用户的“我的文档\COB”文件夹
'C:\Users\[username]\Documents\COB
strLocation=“C:\users\”和Environ$(“Username”)和“\Documents\COB\AFP\u Summary\uux”和DateString&“.xlsx”
设置xlApp=CreateObject(“Excel.Application”)
设置WB=xlApp.Workbooks.Open(strPathToTemplate)
设置xlSheet=WB.Sheets(“AFP数据”)
设置xlPivot=WB.Sheets(“AFP PIVOT”)
'考虑外部发动机
如果Len(dbFullPath)<1,则
Set db=CurrentDb
其他的
Set db=OpenDatabase(dbFullPath,True)
如果结束
Set rsAFP_Data=db.OpenRecordset(“从AFP_数据中选择*)
intCOL=1
对于rsAFP_数据字段中的每个fld
xlSheet.Cells(1,intCOL).Value=fld.Name
Debug.Print fld.Name
intCOL=intCOL+1
下一个
xlSheet.Range(“A2”).CopyFromRecordset rsAFP_数据
设置rngWorkingRange=xlSheet.Range(“A1”).CurrentRegion
xlSheet.ListObjects.Add(xlSrcRange,rngWorkingRange,xlYes).Name_
=“AFP_数据”
xlSheet.ListObjects(“AFP_数据”).TableStyle=“TableStyleLight9”
'将pvAFP设置为指向此表
xlPivot.PivotTables(“pvAFP”).ChangePivotCache WB.PivotCaches_
创建(SourceType:=xlDatabase,SourceData:=“AFP数据!AFP_数据”_
版本:=xlPivotTableVersion12)
xlPivot。选择
xlPivot.PivotTables(“pvAFP”).RefreshTable
WB.RefreshAll
WB.SaveAs文件名:=strLocation
xlApp.退出
Set xlSheet=无
设置fld=无
设置rsAFP_数据=无
Set db=Nothing
设置WB=Nothing
设置xlApp=Nothing
端接头

最好准备好使用,因为用户需要“全部刷新”,然后才能对数据透视表执行任何操作

xlPivot.PivotTables("pvAFP").PivotCache.Refresh

首先,在Excel中存储数据会使数据更重,而不是更轻。链接不是数据。您将看到ODBC数据透视表在文件大小上的显著差异,尤其是当数据透视表有数千个数据透视表时。第二,我看到您使用了一个模板,但没有任何地方可以使用
Range()删除以前的数据。此外,考虑刷新,但如果你经常把文件发送给没有访问你的网络的人——或者有软件或许可来设计一个网页来让他们访问?