2017-10-20 1 views
0

So bin ich neu zu VBA und versuche, im laufenden Betrieb für etwas zu lernen, das auf ein Arbeitsprojekt gekommen ist, und es macht mich verrückt.Excel VBA zum Erstellen von Pivot-Tabelle aus Tabelle

Ich habe ein Makro, um meine Daten zu bereinigen und in eine Tabelle zu legen, und dann arbeite ich an einem Makro, um diese Tabelle zu nehmen und sie in eine Pivot-Tabelle/Diagramme zu verwandeln. Das erste Makro erstellt Tabelle1 in der Tabelle "DailyData". Als Referenz, hier ist es:

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 

Mein Pivot wird in idealer Weise „Part Number“ als Zeilenfeld hat, und „Setup Hours“ „Indirekte Arbeit“ „Arbeitsstunden“ „Standard Arbeitszeiten“, dann " Arbeitseffizienz "als Wertefelder.

Bisher habe ich nicht einmal in der Lage gewesen, eine von dem Feld Wert erhalten rechts zu zeigen, geschweige denn alle 5. mein aktueller Versuch also das ersten Wert Feld richtig zu machen, zeigen sich wie folgt:

Ich schätze wirklich die Hilfe, wie ich zu allem sehr neu bin und mein bestes hier versuche, aber ich schlage immer Fehler nach Fehler ein und läuft aus Möglichkeiten, es zu googeln.

Danke, Tyler

+0

Haben Sie versucht, ein Makro aufzunehmen und es nur so zu modifizieren, dass es Ihren Wünschen entspricht? – Maldred

+0

Ich habe es aufgezeichnet, aber wenn ich es auf einem neuen Arbeitsblatt versuche, aka der nächste Tag der Daten, die von dem Makro gezogen und bearbeitet werden, schlägt es fehl. –

Antwort

0

versuchen diese

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

mit diesem den Code unten

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

Versuchen zu ersetzen, ich habe beide Funktionen vorgenommenen Änderungen besser zu Excel VBA capabilties zu verwenden:

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 
Verwandte Themen