Page 1 of 1

สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Sat Jul 07, 2018 4:02 pm
by Leng

Code: Select all

Private Sub REPORT_Click()
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As pivottable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("PivotTable").Delete
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "PivotTable"
Application.DisplayAlerts = True
Set PSheet = Worksheets("PivotTable")
Set DSheet = Worksheets("Data")


  LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, sourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="PivotTable")

Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="PivotTable")


    Sheets("PivotTable").Select
    
Sheets("PivotTable").Select
    
    With ActiveSheet.PivotTables("PivotTable").PivotFields("Stlye")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable").PivotFields("Around")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
        "PivotTable").PivotFields("No"), "Sum of amount", xlSum


End Sub
พอดีผมต้องการ Pivot table โดยใช้ VBA ครับ
คือผมต้องการสรุปผลในหน้า Data โดยให้ใช้ Pivot table เป็นการสรุป
แต่โค๊ดที่ทำมา ไม่รู้ว่าติดอะไรรบกวนอาจารย์ช่วยดูด้วยนะครับ

Re: สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Sat Jul 07, 2018 4:15 pm
by snasui
:D ช่วยแนบไฟล์ที่เขียน Code นี้มาด้วยจะได้ช่วยดูให้ได้ครับ

กรณีการสร้างรายงานด้วย PivotTable สามารถบันทึก Macro แล้วนำ Code มาปรับใช้ได้ครับ

Re: สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Mon Jul 09, 2018 8:49 am
by Leng

Code: Select all

Private Sub REPORT_Click()
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As pivottable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("PivotTable").Delete
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "PivotTable"
Application.DisplayAlerts = True
Set PSheet = Worksheets("PivotTable")
Set DSheet = Worksheets("Data")


  LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, sourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="PivotTable")

Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="PivotTable")


    Sheets("PivotTable").Select
    
Sheets("PivotTable").Select
    
    With ActiveSheet.PivotTables("PivotTable").PivotFields("Stlye")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable").PivotFields("Around")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable").AddDataField ActiveSheet.PivotTables( _
        "PivotTable").PivotFields("No"), "Sum of amount", xlSum


End Sub
ผมได้ ไปลองดูจากเว็บต่างชาติมาครับวิธี Pivot table with VBA in Excel คือผมอยากทำเป็น report ออกมา โดยการใช้ vba เพราะถ้าทำค้างไว้จะทำให้ไฟล์งานหนักมาก
สิ่งที่ผมต้องการ
ต้องการสรุปยอดโดยการคลิ๊กปุ่มครับ

Re: สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Mon Jul 09, 2018 6:37 pm
by snasui
:D ช่วยแจ้งประเด็นปัญหาของไฟล์ที่ทำมาแล้วว่าติดขัดปัญหาตรงไหน อย่างไร จะได้เข้าถึงปัญหาโดยไวครับ

Re: สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Thu Jul 12, 2018 8:24 am
by Leng
ปัญหาคือไม่สามารถ Pivot table ได้ครับไม่รู้โค๊ดผิดตรงไหนรึป่าว

Re: สอบถามเรื่อง Pivot table with VBA in Excel

Posted: Thu Jul 12, 2018 7:07 pm
by snasui
:D ช่วยลำดับการทดสอบมาให้ด้วยจะได้เข้าถึงปัญหาโดยไว

กรณีโปรแกรมยังไม่แล้วเสร็จยังไม่จำเป็นต้องเขียนให้ออกจากโปรแกรม ถ้าเขียนไว้แล้วให้ Mark เป็น Comment ไว้ก่อน เพราะจะเกิดความไม่สะดวกต่อการ Debug ครับ