Nhờ mọi ngưòi dùng VBA chọn các mục Filter trong pivot giúp em (1 người xem)

  • Thread starter Thread starter liro
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

liro

Thành viên chính thức
Tham gia
25/7/09
Bài viết
72
Được thích
13
Dear all
Em có 1 file excel 2016 tổng hợp các chi phí của 1 dự án theo từng hạng mục. Hiện nay em muốn dùng VBA để gán lệnh chọn các hạng mục tương ứng trong mục Filter Report của Pivot table.
Em đã thử dùng Marco để ghi quá trình chọn các hạng mục và gán marco cho nút lệnh, nhưng bị lỗi.
Mọi người giúp em vụ này nhé. Xin cám ơn

Untitled.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Em gửi file đính kèm
 
Em gửi file đính kèm
 
Đây là đoạn code của Marco
ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma2").ClearAllFilters
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c")
.PivotItems("").Visible = True
.PivotItems("1A-1").Visible = True
.PivotItems("1A-2").Visible = True
.PivotItems("1A-3").Visible = True
.PivotItems("1A-4").Visible = True
.PivotItems("1B-1").Visible = True
.PivotItems("1B-2").Visible = True
.PivotItems("1B-3").Visible = True
.PivotItems("1B-4").Visible = True
.PivotItems("1B-5").Visible = True
.PivotItems("1C-1").Visible = True
.PivotItems("1C-2").Visible = True
.PivotItems("1C-3").Visible = True
.PivotItems("1D").Visible = True
.PivotItems("1E").Visible = True
.PivotItems("1F").Visible = True
.PivotItems("1G").Visible = True
.PivotItems("1H").Visible = True
.PivotItems("1M").Visible = True
.PivotItems("1N").Visible = True
.PivotItems("1P").Visible = True
.PivotItems("1Q").Visible = True
.PivotItems("2B-4.4-10").Visible = True
.PivotItems("2B-4.4-11").Visible = True
.PivotItems("2B-4.4-9").Visible = True
.PivotItems("2C").Visible = True
.PivotItems("2D").Visible = True
.PivotItems("2F").Visible = True
.PivotItems("2H-1").Visible = True
.PivotItems("2H-2").Visible = True
.PivotItems("2H-3").Visible = True
.PivotItems("2H-5").Visible = True
.PivotItems("2I").Visible = True
.PivotItems("BD").Visible = True
.PivotItems("CT").Visible = True
.PivotItems("HQ").Visible = True
.PivotItems("KG").Visible = True
.PivotItems("TK").Visible = True
.PivotItems("(blank)").Visible = True
.PivotItems("LG").Visible = True
.PivotItems("2H-4").Visible = True
.PivotItems("#VALUE!").Visible = True
End With
ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c"). _
EnableMultiplePageItems = False
ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c"). _
CurrentPage = "2H-6"
ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c"). _
CurrentPage = "(All)"
With ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c")
.PivotItems("").Visible = False
.PivotItems("1A-1").Visible = False
.PivotItems("1A-2").Visible = False
.PivotItems("1A-3").Visible = False
.PivotItems("1A-4").Visible = False
.PivotItems("1B-1").Visible = False
.PivotItems("1B-2").Visible = False
.PivotItems("1B-3").Visible = False
.PivotItems("1B-4").Visible = False
.PivotItems("1B-5").Visible = False
.PivotItems("1C-1").Visible = False
.PivotItems("1C-2").Visible = False
.PivotItems("1C-3").Visible = False
.PivotItems("1F").Visible = False
.PivotItems("1G").Visible = False
.PivotItems("1H").Visible = False
.PivotItems("1M").Visible = False
.PivotItems("1N").Visible = False
.PivotItems("1P").Visible = False
.PivotItems("1Q").Visible = False
.PivotItems("2B-4.4-10").Visible = False
.PivotItems("2B-4.4-11").Visible = False
.PivotItems("2B-4.4-9").Visible = False
.PivotItems("2C").Visible = False
.PivotItems("2D").Visible = False
.PivotItems("2F").Visible = False
.PivotItems("2H-1").Visible = False
.PivotItems("2H-2").Visible = False
.PivotItems("2H-3").Visible = False
.PivotItems("2H-5").Visible = False
.PivotItems("2I").Visible = False
.PivotItems("BD").Visible = False
.PivotItems("CT").Visible = False
.PivotItems("HQ").Visible = False
.PivotItems("KG").Visible = False
.PivotItems("TK").Visible = False
.PivotItems("(blank)").Visible = False
.PivotItems("LG").Visible = False
.PivotItems("#VALUE!").Visible = False
End With
ActiveSheet.PivotTables("PivotTable5").PivotFields("Ma~ ha?ng mu?c"). _
EnableMultiplePageItems = True
End Sub


Khi chạy thì bị báo lỗi run time 1004 unable to get the fields property in pivot table class. Liệu có phải do phần marco đang dùng activesheet để khởi động ko nhỉ các bác
 
Dear all
Em có 1 file excel 2016 tổng hợp các chi phí của 1 dự án theo từng hạng mục. Hiện nay em muốn dùng VBA để gán lệnh chọn các hạng mục tương ứng trong mục Filter Report của Pivot table.
Em đã thử dùng Marco để ghi quá trình chọn các hạng mục và gán marco cho nút lệnh, nhưng bị lỗi.
Mọi người giúp em vụ này nhé. Xin cám ơn

View attachment 163394
Ko biết các giá trị của bạn từ I2 tới U2 có thay đổi ko, nhưng mình cứ viêt theo trường hợp tổng quát.
Note: 2B ko có trong Item Filter nhé
Mã:
Sub PivotTableFilter12()
Dim PvtTbl As PivotTable, i As Integer
Dim pvtItm As PivotItem, FieldFilter As String
Application.ScreenUpdating = False
FieldFilter = Cells(3, 2)
Set PvtTbl = ActiveSheet.PivotTables("PivotTable5")
With PvtTbl.PivotFields(FieldFilter)
    .PivotItems("").Visible = True
    For Each pvtItm In .PivotItems
        If pvtItm.Name <> "" Then pvtItm.Visible = Flase
        For i = 9 To 21
          If pvtItm.Name = Cells(2, i) Then pvtItm.Visible = True
        Next
    Next
    .PivotItems("").Visible = False
End With
Application.ScreenUpdating = True
End Sub
 
Khi chạy thì bị báo lỗi run time 1004 unable to get the fields property in pivot table class. Liệu có phải do phần marco đang dùng activesheet để khởi động ko nhỉ các bác

Chắc là code VBA không hiểu mục "Ma~ ha?ng mu?c" là gì cả
 
Thanks bác ndu96081631 đúng thế thật em sửa lại và marco đã chạy.
 
Cảm ơn bạn Quanluu đã tư vấn.
 
Ko biết các giá trị của bạn từ I2 tới U2 có thay đổi ko, nhưng mình cứ viêt theo trường hợp tổng quát.
Note: 2B ko có trong Item Filter nhé
Mã:
Sub PivotTableFilter12()
Dim PvtTbl As PivotTable, i As Integer
Dim pvtItm As PivotItem, FieldFilter As String
Application.ScreenUpdating = False
FieldFilter = Cells(3, 2)
Set PvtTbl = ActiveSheet.PivotTables("PivotTable5")
With PvtTbl.PivotFields(FieldFilter)
    .PivotItems("").Visible = True
    For Each pvtItm In .PivotItems
        If pvtItm.Name <> "" Then pvtItm.Visible = Flase
        For i = 9 To 21
          If pvtItm.Name = Cells(2, i) Then pvtItm.Visible = True
        Next
    Next
    .PivotItems("").Visible = False
End With
Application.ScreenUpdating = True
End Sub
Bạn giải thích giúp mình phần code trên với nhé. Bỏ VBA lâu rồi h xem không hiểu hết. Thanks
 
Bạn giải thích giúp mình phần code trên với nhé. Bỏ VBA lâu rồi h xem không hiểu hết. Thanks
Ko biết giải thích cho bạn thế nào. Ở đây là xét với từng Item của Pivot đem so sánh với bảng đối chiếu, nếu Item có trong bảng đó thì checked, ko thì uncheck.
Nhưng yêu cầu Pivot phải đc checked ít nhất 1 Item nên mình mặc định checked Item rỗng (""). Cuối code, mình uncheck nó là đc.
 
Ko biết giải thích cho bạn thế nào. Ở đây là xét với từng Item của Pivot đem so sánh với bảng đối chiếu, nếu Item có trong bảng đó thì checked, ko thì uncheck.
Nhưng yêu cầu Pivot phải đc checked ít nhất 1 Item nên mình mặc định checked Item rỗng (""). Cuối code, mình uncheck nó là đc.
Thanks mình hiểu và ứng dụng được nó rồi. Xin cám ơn
 
Web KT

Bài viết mới nhất

Back
Top Bottom