Page 2 of 2

Re: สอบถาม การเลือกข้อมูลจาก Slicer แล้วปริ้นออก

Posted: Thu Aug 02, 2018 7:41 pm
by snasui
:D ลอง 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 :D ลอง 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
:D 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 :D 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 :D sPd.ClearManualFilter คือการ Clear การเลือก Slicer ทิ้งทั้งหมดครับ สงสัยอะไรกับบรรทัดนี้เป็นพิเศษครับ
อันนี้เข้าใจครับว่า Clear Filter ทึ้งทั้งหมด
แต่พอรันมาถึงบรรทัดนี้ ที่เราเลือก ไว้กลายมาเป็นเลือก Slicer ข้อมูลแรกตลอดครับ

Code: Select all

Next l
        sPd.SlicerItems(k).Selected = True
:shock: ผมน่าจะเขียนตกไปครับ ที่ถูกต้องควรเป็น

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
:D แนบไฟล์ที่มี 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
:D ปรับส่วนของการ 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 :D ปรับส่วนของการ 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
:D อ่านแล้วยังไม่เข้าใจครับ

กรุณาระบุวิธีการเลือกมาอย่างละเอียดว่าเลือก 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
:D ตัวอย่างการปรับ 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
ขอบคุณครับ ผมจะพยายามให้มากกว่าเดิมครับ