VBA录制宏制作数据透视表录制好了用不了
发布网友
发布时间:2022-04-22 22:42
我来回答
共2个回答
热心网友
时间:2023-10-07 04:02
因为你在第一次录制宏的时候,新增了一个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
热心网友
时间:2023-10-07 04:02
你录制的宏,首先工作薄,工作表名称位置,必须和你录制宏是的相同,必须在你工作薄打开下才能使用