Hỏi về sử dụng option box VBA để thay đổi thêm bớt các giá trị trong trường value

Liên hệ QC

phamvanan88

Thành viên mới
Tham gia
15/10/14
Bài viết
23
Được thích
0
Hi, mình có trường value trong pivottable, mình cần thay đổi linh hoạt các giá trị cần lọc ở trường này, thay vì phải kéo thả.
Mình có tạo 1 option box để tùy chọn 1 giá trị max of smax, hoặc 1 giá trị max of scurrent, hoặc cả 2: như hình dưới
1596613892624.png 1596613836141.png
- Hiện tại mình có dùng dòng lênh dưới đây để thử thêm và bớt giá trị vào trường value:
If Sheet2.Range("L1") = 1 Then ' them smax
pv6.PivotFields("Max of Scurrent").Orientation = xlHidden
pv6.PivotFields("Max of Smax").Orientation = xlHidden
pv6.AddDataField pv6.PivotFields("Smax"), "Max of Smax", xlMax

ElseIf Sheet2.Range("L1") = 2 Then ' them scurrent
pv6.PivotFields("Max of Scurrent").Orientation = xlHidden
pv6.PivotFields("Max of Smax").Orientation = xlHidden
pv6.AddDataField pv6.PivotFields("Scurrent"), "Max of Scurrent", xlMax

Else ' them ca smax va scurrent
pv6.AddDataField pv6.PivotFields("Scurrent"), "Max of Scurrent", xlMax
pv6.AddDataField pv6.PivotFields("Smax"), "Max of Smax", xlMax
End If
Ý em là trước khi thêm gì vào thì em gỡ cả 2 giá trị smax và scurrent ra, xong rồi mới chèn lệnh thêm ở dưới, tuy nhiên hiện tại thực hiện lệnh nó báo lỗi, các bác xem giúp em khắc phục như nào ah.
Thanks.
 
alo, các bác nào biết giúp em với.
Cái lệnh để thêm độc lập từng giá trị cụ thể vào trường value thì e thêm được rồi, nhưng để gỡ nó ra khỏi trường, và thêm giá trị khác vào trường 1 cách bất kì thì bị lỗi.
 
Thêm vào giá trị đúng trước khi gỡ ra những cái không đúng

Tôi thấy bạn xài biến pv6, không biết khai báo và gán giá trị có hợp lệ không. PHải có file mới biết chắc
 
Lần chỉnh sửa cuối:
Dim pv6 As PivotTable
Set pv6 = Sheet2.PivotTables("PivotTable6")
Mình có khai báo rồi bạn nhé. Khi gọi lệnh thêm đơn lẻ (khi trường value đang trống) thì mình dùng lệnh ở trên được.
Nhưng khi trường value đã có giá trị thêm vào, mà mình chưa biết đã có dữ liệu nào ; mà mình mình chuyển sang option scurrent hoặc smax, thì ý của mình là do ko biết có dữ liệu nào, nên là dùng đại lệnh hide cả 2 cái dữ liệu đó khỏi trường value, rồi sau đó mới dùng lệnh thêm; thì nó báo lỗi ở khâu này, do 1 trong 2 dữ liệu đã có rồi hoặc đã ẩn rồi mà vẫn dùng lại lệnh nó sẽ báo lỗi.
hoặc cụ thể là bạn biết lệnh nào làm trắng trường value không?
 
Em gửi file mẫu, em muốn tích vào option pro: thì sẽ gỡ hết giá trị khác khỏi trường values, chỉ bật count of product; tương tự với nút cat; còn option 3 là bật cả 2;
Các bác xem giúp em, thanks cả nhà.
1597068097999.png
 

File đính kèm

  • pivot-tables 2.xls
    109 KB · Đọc: 6
Em gửi file mẫu, em muốn tích vào option pro: thì sẽ gỡ hết giá trị khác khỏi trường values, chỉ bật count of product; tương tự với nút cat; còn option 3 là bật cả 2;
Các bác xem giúp em, thanks cả nhà.
File đính kèm so với hình bài 1 chả ăn nhập gì với nhau, cả dữ liệu lẫn code. (Code đã khẳng định là đã khai báo biến pv6 mà file chả thấy đâu, hình thì max, file thì count)
Tuy nhiên lỗi giống nhau và gồm các lỗi:
1. Field Category có gắn vào column, nên khi chuyển từ 1 sang 2 bị gỡ mất tiêu (thực ra là bị chuyển xuống Values với tên mới).
2. Khi chuyển từ 1 sang 2 hoặc ngược lại thì code gỡ cả 2 fields, nhưng đang chỉ tồn tại 1 field, gỡ field không tồn tại bị lỗi. (lần đầu từ 1 sang 2 không lỗi mà gỡ column field chuyển xuống Values như mục 1)
3. Khi chuyển từ 1 hoặc 2 sang 3, code gắn 2 fields, nhưng đã tồn tại 1 field, field đã tồn tại gắn lần 2 không cho (vì gán 2 lần trùng 1 tên)
4. Bên trên tôi có ghi là " Thêm vào giá trị đúng trước khi gỡ ra những cái không đúng" nhưng bạn gỡ sạch rồi gắn vô lại. Cái này không sinh ra lỗi nhưng gây ra rườm rà

Tôi sửa I4 thành I1 do mục đích test nhiều trường hợp bị tràn pivot qua khỏi cột I

Do cân nhắc nhiều lần cho từng trường hợp tôi để On Error Resume Next ở 3 chỗ, chỉ cần 1 chỗ ở ngoài If cũng được.

PHP:
Sub Macro1()
Dim Pvot2D As PivotTable
Set Pvot2D = ActiveSheet.PivotTables("PivotTable2")
If Sheet1.Range("I1") = 1 Then
    On Error Resume Next
    Pvot2D.PivotFields("Count of Category").Orientation = xlHidden
    Pvot2D.AddDataField Pvot2D.PivotFields("Product"), "Count of Product", xlCount
    Pvot2D.PivotFields("Category").Orientation = xlColumnField

ElseIf Sheet1.Range("I1") = 2 Then
    On Error Resume Next
    Pvot2D.PivotFields("Count of Product").Orientation = xlHidden
    Pvot2D.AddDataField Pvot2D.PivotFields("Category"), "Count of Category", xlCount
    Pvot2D.PivotFields("Category").Orientation = xlColumnField

ElseIf Sheet1.Range("I1") = 3 Then
    On Error Resume Next
    Pvot2D.AddDataField Pvot2D.PivotFields("Product"), "Count of Product", xlCount
    Pvot2D.AddDataField Pvot2D.PivotFields("Category"), "Count of Category", xlCount
    Pvot2D.PivotFields("Category").Orientation = xlColumnField

End If

End Sub
 
Lần chỉnh sửa cuối:
thanks bác, em sửa được rồi, có điều em giải thích qua như sau:
File đính kèm so với hình bài 1 chả ăn nhập gì với nhau, cả dữ liệu lẫn code. (Code đã khẳng định là đã khai báo biến pv6 mà file chả thấy đâu, hình thì max, file thì count) => file gốc lúc đầu e hỏi là dữ liệu công ty, ko tiện up file; còn đâu e dùng file mẫu để up lên nó cũng tương tự vậy bác ah.
Tuy nhiên lỗi giống nhau và gồm các lỗi:
1. Field Category có gắn vào column, nên khi chuyển từ 1 sang 2 bị gỡ mất tiêu (thực ra là bị chuyển xuống Values với tên mới).
2. Khi chuyển từ 1 sang 2 hoặc ngược lại thì code gỡ cả 2 fields, nhưng đang chỉ tồn tại 1 field, gỡ field không tồn tại bị lỗi. (lần đầu từ 1 sang 2 không lỗi mà gỡ column field chuyển xuống Values như mục 1)
3. Khi chuyển từ 1 hoặc 2 sang 3, code gắn 2 fields, nhưng đã tồn tại 1 field, field đã tồn tại gắn lần 2 không cho (vì gán 2 lần trùng 1 tên)
4. Bên trên tôi có ghi là " Thêm vào giá trị đúng trước khi gỡ ra những cái không đúng" nhưng bạn gỡ sạch rồi gắn vô lại. Cái này không sinh ra lỗi nhưng gây ra rườm rà
=> em ko cho cụm "On Error Resume Next", do vậy khi chuyển các option nó báo lỗi này:; em thêm dòng on error ... là nó bỏ qua được cái lỗi 1004 ấy rồi.
1597075215497.png
=> còn cái nghĩ là thừa lệnh, là e tư duy kiểu dùng 1 lệnh cứ xóa trắng trường values, rồi chọn option nào thì lệnh thêm lại giá trị vào trường. Cũng là gỡ rồi gỡ lại, hoặc chèn rồi chèn lại nó phát sinh lỗi đó.
Thanks bác.
 
Web KT
Back
Top Bottom