我正在创建一个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方法失败
答案 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)) ...