北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |
在Access 中,通过一个Button把数据库中的表数据导出(export) 到excel中(保存到当前项目的路径下),再经过excel的 CreatePivotTable 功能创建数据透视表 。
当我第一次执行导出的动作是成功的。可以导出数据并创建数据透视表。但是第二次点击 button 时,在创建PivotCaches 时报error 91: 对象变量或With 块变量未设置....
红色的是报错代码,请各位大神帮我找找原因!
主要代码如下:
Function getPivotData(ByVal strXlsFileName As String, ByVal strSheetName As String)
Dim strSourceData As String
Dim iR As Integer, iC As Integer
Dim objExcl As Excel.Application
Dim objWorkBook As Excel.Workbook
Dim NewSheet As Excel.Worksheet
Dim frmSheetName, rptName As String
On Error GoTo errHandler
frmSheetName = "Format_PivotTable"
rptName = Format(Now, "YYYYMMDDhhmmss") & "_tab"
Set objExcl = CreateObject("Excel.Application")
' Open a worksheet
Set objWorkBook = objExcl.Workbooks.Open(strXlsFileName, ReadOnly:=False)
' objWorkBook.Worksheets.Add after:=objWorkBook.Sheets(1)
Set NewSheet = objWorkBook.Worksheets.Add(after:=objWorkBook.Sheets(1))
NewSheet.Name = frmSheetName
'get the max row count and column count
iR = objWorkBook.Sheets(strSheetName).Range("A65536").End(xlUp).Row
iC = objWorkBook.Sheets(strSheetName).Range("Z1").End(xlToLeft).Column
'define the source data
strSourceData = "tbl_fx!R1C1:R" & iR & "C" & iC
objWorkBook.Sheets(frmSheetName).Rows.Clear
'create the pivotCache to set save area.
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
strSourceData, Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="Format_PivotTable!R1C1", TableName:=rptName, DefaultVersion:= _
xlPivotTableVersion12
'Set the new sheet have select
Worksheets(frmSheetName).Cells(1, 1).Select
'set column field
With ActiveSheet.PivotTables(rptName).PivotFields("Salse_Amount")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables(rptName).PivotFields("Salse_Number")
.Orientation = xlColumnField
.Position = 2
End With
'set row field
With ActiveSheet.PivotTables(rptName).PivotFields("Sale_month")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables(rptName).PivotFields("Company")
.Orientation = xlRowField
.Position = 2
End With
'set the two row field in the line.
ActiveSheet.PivotTables(rptName).RowAxisLayout xlTabularRow
ActiveSheet.PivotTables(rptName).InGridDropZones = True
ActiveSheet.PivotTables(rptName).AddDataField ActiveSheet.PivotTables(rptName).PivotFields("Salse_Number"), " ", xlSum
'Hidden the original data sheet
Worksheets("tbl_fx").Select
Worksheets("tbl_fx").Visible = xlSheetVeryHidden
'save the workbook and quit the Excel application
objExcl.ActiveWorkbook.Save
objExcl.Quit
getPivotData = True
Exit Function
errHandler:
MsgBox Err.Number & vbTab & Err.Description, vbCritical + vbOKOnly, "Error"
objExcl.ActiveWorkbook.Save
Set objWorkBook = Nothing
objExcl.Quit
getPivotData = False
End Function