2017-10-20 142 views
0

所以我是VBA的新手,並試圖在工作項目中發現某些東西,這會讓我瘋狂。Excel VBA從表中創建數據透視表

我有一個宏來清理我的數據並把它放到一個表中,然後我正在處理一個宏來獲取該表並將其轉換爲數據透視表/圖表。第一個宏在電子表格「DailyData」上創建Table1。作爲參考,那就是:

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 

我的樞軸是理想將有「料號」作爲行字段,然後在「設置時間」「間接勞動」,「勞動時間」,「標準的勞動時間」「勞動效率「作爲價值領域。

到目前爲止,我還沒有能夠得到的數值字段的一個露面的權利更別說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 

我真的很感謝這個幫助,因爲我對這一切都很陌生,並且在這裏盡力而爲,但是我在錯誤之後繼續打錯,並且無法通過Google的方式運行。

感謝, 泰勒

+0

您是否嘗試過錄制宏並修改它以符合您的喜好? – Maldred

+0

我記錄了它,但是當我在新的工作表上嘗試它時,也就是第二天將被宏拖動和編輯的數據,它將失敗。 –

回答

0

試試這個本

​​
0

更換

.AddDataField .PivotFields("Labour Hours"), "Labour Hours", xlSum 

嘗試下面的代碼,我做了修改,這兩種功能,以更好地利用Excel的VBA capabilties:

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