VBA:创建数据透视表时出错

时间:2016-02-17 15:36:48

标签: excel vba excel-vba

我正在创建一个VBA宏。除此之外,它还制作了一个数据透视表:

    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Sheets("Working").UsedRange).CreatePivotTable TableDestination:="", TableName:="HDPivotTable", DefaultVersion:=xlPivotTableVersion10

这样可行,但是当我从Excel电子表格中删除所有数据并将其替换为相同结构的新数据时,我在上面的行中收到错误:

运行时错误'13':类型不匹配

你能帮帮我吗?

感谢。

编辑:

在应用斯科特的建议后,我又收到了另一个错误:

With Worksheets("Working")
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row
    lColumn = .Range("A" & .Columns.Count).End(xlToLeft).Column
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=.Range(.Cells(1, 1), .Cells(lRow, lColumn))).CreatePivotTable TableDestination:="", TableName:="HDPivotTable", DefaultVersion:=xlPivotTableVersion10
End With

ActiveSheet.Name = "HD Pivot"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(1, 1)
ActiveSheet.PivotTables("HDPivotTable").AddFields RowFields:="Location Code"

错误是: 运行时错误'1004':数据透视表类的AddFields方法失败

1 个答案:

答案 0 :(得分:2)

导致错误的最可能原因是UsedRange的使用。虽然它是一个漂亮的工具,但它也有它的缺点,特别是因为你现在正在替换数据。

例如,如果新数据的列数少于旧数据,甚至更少的行,UsedRange很可能会反映旧数据范围。此外,根据您对工作表的处理情况,可能会有包含您无法用肉眼看不到的格式或其他字符的单元格,这会影响UsedRange

如果您在代码中进行以下调整,则每次都应该有效。

Dim ws as Worksheet
Set ws = Worksheets("Working")

Dim lRow as Long, lColumn as Long

'assumes data table of contiguous rows/columns starting in A1
With ws
    lRow = .Range("A" & .Rows.Count).End(xlup).Row
    lColumn = .Cells(1, .Columns.Count).End(xltoLeft).Column
End With

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=ws.Range(ws.Cells(1,1),ws.Cells(lRow,lColumn)) ...