Page 2 of 2
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 7:41 pm
by snasui

ลอง Run ดูจะทราบได้เองว่าใช้ได้หรือไม่ได้ครับ
ควรอธิบายปัญหาที่เป็นมาอย่างละเอียดพร้อมแนบไฟล์ที่เขียน Code นี้มาด้วยจะได้ตอบต่อไปจากนั้น
Code ที่ผมตอบไปด้านบนจะต้องเป็น Code หลัก Code ส่วนอื่นไม่ว่าจะเป็น Advaced Filter หรือพิมพ์ จะอยู่ใน Code นั้นอีกทีครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:03 pm
by primeval
snasui wrote: Thu Aug 02, 2018 7:41 pm

ลอง Run แล้วแจ้งที่ติดปัญหาจะทราบได้เองว่าใช้ได้หรือไม่ได้ครับ
ควรอธิบายปัญหาที่เป็นมาอย่างละเอียดพร้อมแนบไฟล์ที่เขียน Code นี้มาด้วยจะได้ตอบต่อไปจากนั้น
Code ที่ผมตอบไปด้านบนจะต้องเป็น Code หลัก Code ส่วนอื่นไม่ว่าจะเป็น Advaced Filter หรือพิมพ์ จะอยู่ใน Code นั้นอีกทีครับ
ผมได้่ลองไล่ Step การทำงาน ของ Code จากอาจารย์ ดูหลายครั้ง แบบไม่ใส่ Code หรือใส่ Code แล้ว
แล้วพอมาถึงบรรทัดนี้
Code: Select all
Next l
sPd.SlicerItems(k).Selected = True
ผมเห็นว่า การทำงานมีการไปเลือก Slicer ลำดับข้อมูลแรก ทุกครั้ง
ผมก็ตั้งคำถามเกร็งๆ กลัวถูกตำหนิ ว่าเขียนมาให้แล้วยังทำไม่ได้อีก "ผมเกรงใจจริงครับๆ"
ผมก็อ่าน Code เข้าใจว่ามีการเก็บค่าจากการเลือกเข้า
Array แล้ว Ubound กลับไป
Code: Select all
For j = 1 To s.SlicerItems.Count
If s.SlicerItems(j).Selected = True Then
'Debug.Print s.SlicerItems(j).Name
ReDim Preserve arr(i)
arr(i) = s.SlicerItems(j).Name
i = i + 1
End If
Next j
End If
End With
Next s
For k = 1 To UBound(arr) + 1
sPd.ClearManualFilter
Module 5 แล้ว Button ปุ่ม
รายการทดสอบ.xlsm
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:06 pm
by snasui
sPd.ClearManualFilter คือการ Clear การเลือก Slicer ทิ้งทั้งหมดครับ สงสัยอะไรกับบรรทัดนี้เป็นพิเศษครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:07 pm
by primeval
snasui wrote: Thu Aug 02, 2018 8:06 pm
sPd.ClearManualFilter คือการ Clear การเลือก Slicer ทิ้งทั้งหมดครับ สงสัยอะไรกับบรรทัดนี้เป็นพิเศษครับ
อันนี้เข้าใจครับว่า Clear Filter ทึ้งทั้งหมด
แต่พอรันมาถึงบรรทัดนี้ ที่เราเลือก ไว้กลายมาเป็นเลือก Slicer ข้อมูลแรกตลอดครับ
Code: Select all
Next l
sPd.SlicerItems(k).Selected = True
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:12 pm
by snasui
primeval wrote: Thu Aug 02, 2018 8:07 pm
snasui wrote: Thu Aug 02, 2018 8:06 pm
sPd.ClearManualFilter คือการ Clear การเลือก Slicer ทิ้งทั้งหมดครับ สงสัยอะไรกับบรรทัดนี้เป็นพิเศษครับ
อันนี้เข้าใจครับว่า Clear Filter ทึ้งทั้งหมด
แต่พอรันมาถึงบรรทัดนี้ ที่เราเลือก ไว้กลายมาเป็นเลือก Slicer ข้อมูลแรกตลอดครับ
Code: Select all
Next l
sPd.SlicerItems(k).Selected = True

ผมน่าจะเขียนตกไปครับ ที่ถูกต้องควรเป็น
sPd.SlicerItems(arr(k)).Selected = True
ลองทดสอบดูใหม่ครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:19 pm
by primeval
Code: Select all
Sub test()
Dim s As SlicerCache, arr(), sPd As SlicerCache
Dim i As Integer, j As Integer, k As Integer, l As Integer
For Each s In ActiveWorkbook.SlicerCaches
With s
If s.Name = "Slicer_ÃËÑÊ_ÊÒ¢Ò" Then
Set sPd = ActiveWorkbook.SlicerCaches(s.Name)
For j = 1 To s.SlicerItems.Count
If s.SlicerItems(j).Selected = True Then
'Debug.Print s.SlicerItems(j).Name
ReDim Preserve arr(i)
arr(i) = s.SlicerItems(j).Name
i = i + 1
End If
Next j
End If
End With
Next s
For k = 1 To UBound(arr) + 1
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
sPd.SlicerItems(arr(k)).Selected = True
'Your command for printing.
Next k
End Sub
ทดสอบโดยใช้ Code เดิมครับ
error out of range ครับ ผลลัพธ์หน้า Slicer สาขา Unselect ออกทั้งหมด
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:24 pm
by snasui

แนบไฟล์ที่มี Code นี้มาด้วยจะได้ช่วยทดสอบได้ครับ
ไฟล์ที่แนบมาด้านบนไม่มี Code นี้ครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:31 pm
by primeval
รายการทดสอบ.xlsm
Module 5 ใส่ Code อื่นๆแล้ว
Module 6 Code จากอาจารย์ครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:41 pm
by snasui

ปรับส่วนของการ Loop Array เป็นเริ่มจาก 0 ครับ
Code: Select all
'Other code
For k = 0 To UBound(arr)
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
sPd.SlicerItems(arr(k)).Selected = True
'Your command for printing.
Next k
'Other code
หรือ
Code: Select all
'Other code
For k = 1 To UBound(arr) + 1
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
sPd.SlicerItems(arr(k - 1)).Selected = True
'Your command for printing.
Next k
'Other code
ค่าล่างสุดของ Array จะเริ่มจากลำดับที่ 0 เสมอ แต่ผมไปเริ่มจาก 1 ขอบเขตบนก็เลยเกินไปจากจำนวนสมาชิกที่มีครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 8:58 pm
by primeval
snasui wrote: Thu Aug 02, 2018 8:41 pm

ปรับส่วนของการ Loop Array เป็นเริ่มจาก 0 ครับ
Code: Select all
'Other code
For k = 0 To UBound(arr)
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
sPd.SlicerItems(arr(k)).Selected = True
'Your command for printing.
Next k
'Other code
หรือ
Code: Select all
'Other code
For k = 1 To UBound(arr) + 1
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
sPd.SlicerItems(arr(k - 1)).Selected = True
'Your command for printing.
Next k
'Other code
ค่าล่างสุดของ Array จะเริ่มจากลำดับที่ 0 เสมอ แต่ผมไปเริ่มจาก 1 ขอบเขตบนก็เลยเกินไปจากจำนวนสมาชิกที่มีครับ
ขอบคุณครับ ขอบคุณมากๆครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Thu Aug 02, 2018 9:56 pm
by primeval
รายการทดสอบ.xlsm
รบกวนอีกครั้งครับ หลังการเลือก Slicer สาขา มีปัญหา Slicer ไปเลือกสาขาสุดท้ายติดมาด้วยครับ ทำให้เวลา เก็บค่าตัวแปรจากชื่อในช่อง A9 จะติดสาขารายการสุดมาด้วยครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Fri Aug 03, 2018 6:36 am
by snasui

อ่านแล้วยังไม่เข้าใจครับ
กรุณาระบุวิธีการเลือกมาอย่างละเอียดว่าเลือก Slicer ตัวไหน อย่างไร ผลลัพธ์ที่บอกว่าติดรายการสุดท้ายมาด้วยดูจากไหน จะได้ช่วยทดสอบให้ได้
ด้านล่างนี้ผมเพียงแต่ปรับ Loop เพื่อลดความซ้ำซ้อน โดยในขั้นตอนสุดท้ายได้ Loop ให้เลือก Slicer เอาไว้ให้เหมือนที่ผู้ใช้เลือกเช่นเดิม
Code: Select all
'Other code
Next s
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
For k = 0 To UBound(arr)
If k > 0 Then sPd.SlicerItems(arr(k - 1)).Selected = False
sPd.SlicerItems(arr(k)).Selected = True
'Your command for printing.
Next k
For k = 0 To UBound(arr)
sPd.SlicerItems(arr(k)).Selected = True
Next k
'Other code
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Fri Aug 03, 2018 10:19 pm
by primeval
Code: Select all
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
ผม Run Code จากธรรมดา และใส่ Code มีการไปเลือก Slicer สุดท้ายทุกครั้ง
ทำให้แสดงค่ารหัสสาขาไม่ถูกต้องครับ
Untitled-1.png
หลังการเลือกดังภาพ
ชื่อรายละเอียดสาขาและอื่นในช่อง A9
Untitled-3.png
ตั้งค่าชื่อ File
Untitled-2.png
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Fri Aug 03, 2018 10:43 pm
by primeval
ภาพนี้คือค่าที่ถูกต้องครับ จาก Code เก่าที่ติดบัค Loop ครับ
Untitled-4.png
Untitled-5.png
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Fri Aug 03, 2018 11:07 pm
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
'Other code
Next s
sPd.ClearManualFilter
For l = 1 To sPd.SlicerItems.Count - 1
sPd.SlicerItems(l).Selected = False
Next l
For k = 0 To UBound(arr)
sPd.SlicerItems(arr(k)).Selected = True
If k > 0 Then sPd.SlicerItems(arr(k - 1)).Selected = False
If k = 0 Then sPd.SlicerItems(sPd.SlicerItems.Count).Selected = False
'Your command for printing.
Next k
For k = 0 To UBound(arr)
sPd.SlicerItems(arr(k)).Selected = True
Next k
'Other code
เนื่องจากเราไม่สามารถ Loop ปลดการเลือกทั้งหมดได้ เพราะหาก Loop ไปทั้งหมดมันจะกลับมาเลือกทั้งหมดอีกครั้ง ผมจึงประยุกต์ให้เหลือ 1 อันสุดท้าย Code ด้านบนนี้ประยุกต์ให้ยกเลิกการเลือกอันสุดท้ายเมื่อมีเริ่มมีการ Filter อันแรกที่ User เลือกครับ
ควรทำความเข้าใจ Code จะได้ปรับปรุงพลิกแพลงเองได้และพยายามเขียนมาเองก่อนครับ
Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก
Posted: Fri Aug 03, 2018 11:14 pm
by primeval
ขอบคุณครับ ผมจะพยายามให้มากกว่าเดิมครับ