Excel VBA从数据透视表创建数据透视表

Excel VBA从数据透视表创建数据透视表,vba,excel,Vba,Excel,因此,我是VBA新手,正在努力学习工作项目中出现的一些东西,这让我发疯 我有一个宏来清理我的数据并将其放入一个表中,然后我正在处理一个宏来获取该表并将其转换为数据透视表/图表。第一个宏在电子表格“DailyData”上创建表1。以下为参考: Sub Format_Table() Dim target As Worksheet Set target = ThisWorkbook.Worksheets(1) target.Name = "DailyData" Worksheets("DailyDat

因此,我是VBA新手,正在努力学习工作项目中出现的一些东西,这让我发疯

我有一个宏来清理我的数据并将其放入一个表中,然后我正在处理一个宏来获取该表并将其转换为数据透视表/图表。第一个宏在电子表格“DailyData”上创建表1。以下为参考:

Sub Format_Table()
Dim target As Worksheet
Set target = ThisWorkbook.Worksheets(1)
target.Name = "DailyData"
Worksheets("DailyData").Range("AB:AB,O:P,C:K,A:A").EntireColumn.Delete
Worksheets("DailyData").UsedRange
Worksheets("DailyData").UsedRange.Select
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes)
tbl.TableStyle = "TableStyleMedium15"
tbl.HeaderRowRange.Cells(1, 1).Value = "Date"
tbl.HeaderRowRange.Cells(1, 3).Value = "Machine"
Worksheets("DailyData").Cells.EntireColumn.AutoFit
End Sub
理想情况下,我的Pivot将以“零件号”作为行字段,然后以“设置工时”、“间接工时”、“工时”、“标准工时”、“劳动效率”作为值字段

到目前为止,我甚至还不能让一个值字段正确显示,更不用说全部5个了。因此,我当前尝试使第一个值字段显示正确,如下所示:

Sub sbCreatePivot()
Dim ws As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Set ws = Worksheets.Add
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, "DailyData!Table1")
Set pt = pc.CreatePivotTable(ws.Range("B3"))
With pt
    With .PivotFields("Part Number")
       .Orientation = xlRowField
       .Position = 1
    End With
    With .PivotFields("Labour Hours")
        .Orientation = xlColumnField
        .Position = 1
    End With
    .AddDataField .PivotFields("Labour Hours"), "Labour Hours", xlSum
End With

End Sub
我真的很感谢你的帮助,因为我对这一切都很陌生,在这里我尽了最大的努力,但我只是一个接一个地犯错误,并且正在用尽办法用谷歌搜索它

谢谢, 泰勒

试试这个

.AddDataField .PivotFields("Labour Hours"), "Labour Hours", xlSum
用这个

With .PivotFields("Labour Hours")
    .Orientation = xlDataField
    .Function = xlSum
    .NumberFormat = "0"
End With

尝试下面的代码,我已对这两个函数进行了修改,以更好地利用Excel的VBA功能:

Sub Format_Table()

Dim targetSht As Worksheet
Dim tbl As ListObject

Set targetSht = ThisWorkbook.Worksheets(1)
targetSht.Name = "DailyData"

With targetSht
    .Range("AB:AB,O:P,C:K,A:A").EntireColumn.Delete

    Set tbl = .ListObjects.Add(SourceType:=xlSrcRange, Source:=.UsedRange, XlListObjectHasHEaders:=xlYes)
End With

With tbl
    .TableStyle = "TableStyleMedium15"
    .HeaderRowRange.Cells(1, 1).Value = "Date"
    .HeaderRowRange.Cells(1, 3).Value = "Machine"
End With

targetSht.Cells.EntireColumn.AutoFit

End Sub


你试过录制一个宏并修改它以满足你的需要吗?我录制了它,但当我在一个新的工作表上尝试它时,也就是第二天宏将提取和编辑的数据,它失败了。
Sub sbCreatePivot()

Dim ws As Worksheet
Dim pc As PivotCache
Dim pt As PivotTable
Dim targetSht As Worksheet
Dim tbl As ListObject

' set the target sheet
Set targetSht = ThisWorkbook.Worksheets("DailyData")
' set the Table (listObject)
Set tbl = targetSht.ListObjects("Table1")

Set ws = Worksheets.Add
' Modified line to set the Pivot Cache
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, tbl.Range.Address(False, False, xlA1, xlExternal))
Set pt = pc.CreatePivotTable(ws.Range("B3"))

With pt
    With .PivotFields("Part Number")
       .Orientation = xlRowField
       .Position = 1
    End With
    With .PivotFields("Labour Hours")
        .Orientation = xlColumnField
        .Position = 1
    End With

    ' Modified line
    .AddDataField .PivotFields("Labour Hours"), "Sum of Labour Hours", xlSum
End With

End Sub