Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

创建数据透视表出错,报error 91: 对象变量或With 块变量未设置....

LMS  发表于:2017-08-10 14:03:49  
复制

在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


测试附件

 

Top
刘梅胜 发表于:2017-08-10 14:06:10
第一次执行导出数据是成功的,但是第二次开始导出数据就出问题了。想知道是什么原因导致的?

cspa 发表于:2017-08-10 17:10:28
刘梅胜 发表于:2017-08-11 08:21:40
感谢 “cspa” 的帮助解答,学习了。

总记录:3篇  页次:1/1 9 1 :