VBA录制宏制作数据透视表录制好了用不了

让调试不会调试呀

因为你在第一次录制宏的时候,新增了一个sheet(第一句代码:sheets.add),录制过程中,TableDestination="sheet2!R3C1",意思是在sheet2的a3单元格新建数据透视表

录制好后,你运行宏,宏又执行了sheets.add,这时又生成了一个新的表,表名可能是sheet3,sheet4,....等,而你原来的sheet2中已经存在了数据透视表,这时宏在执行TableDestination="sheet2!R3C1"时肯定就出错.有两种方法:

1,每次执行宏前,把sheet2中的数据透视表删掉,在你上面代码的开头,加上一句代码:

ThisWorkbook.Worksheets("sheet2").Cells.Clear

2,把你上面黄色字体这部中的TableDestination="sheet2!R3C1"改成TableDestination:=ActiveSheet.Range("a4")

 

实际上录制的代码是可以简化,下面这段代码是根据你的字段来写的,你可以参考:

Sub 宏1()
On Error Resume Next
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("sheet2").Cells.Clear
Nosubtotal = Array(False, False, False, False, False, False, False, False, False, False, False, False)
With ThisWorkbook.Worksheets("sheet1")
Dim pv1 As PivotTable
Set pv1 = .PivotTableWizard(SourceType:=xlDatabase, SourceData:=.Range(.Cells(1, 1), .Cells(545, 23)), TableDestination:=ThisWorkbook.Worksheets("sheet2").Range("a4"), tablename:="mypv1")
pv1.AddFields RowFields:=Array("序号", "状态码", "产品品名"), PageFields:="工单单别", ColumnFields:=Array("加工顺序", "工艺名称")
pv1.AddDataField pv1.PivotFields("预计产量"), "求和:预计产量", xlSum
pv1.AddDataField pv1.PivotFields("完成数量"), "求和:完成数量", xlSum
pv1.DataPivotField.Orientation = xlColumnField
pv1.DataPivotField.Position = 2
pv1.PivotFields("序号").Subtotals = Nosubtotal
pv1.PivotFields("状态码").Subtotals = Nosubtotal
pv1.PivotFields("产品品名").Subtotals = Nosubtotal
End With
Application.ScreenUpdating = True
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-20
你录制的宏,首先工作薄,工作表名称位置,必须和你录制宏是的相同,必须在你工作薄打开下才能使用
相似回答