:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#21

Post by snasui »

:D ลอง Run ดูจะทราบได้เองว่าใช้ได้หรือไม่ได้ครับ

ควรอธิบายปัญหาที่เป็นมาอย่างละเอียดพร้อมแนบไฟล์ที่เขียน Code นี้มาด้วยจะได้ตอบต่อไปจากนั้น

Code ที่ผมตอบไปด้านบนจะต้องเป็น Code หลัก Code ส่วนอื่นไม่ว่าจะเป็น Advaced Filter หรือพิมพ์ จะอยู่ใน Code นั้นอีกทีครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#22

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#23

Post by snasui »

:D sPd.ClearManualFilter คือการ Clear การเลือก Slicer ทิ้งทั้งหมดครับ สงสัยอะไรกับบรรทัดนี้เป็นพิเศษครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#24

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#25

Post 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

ลองทดสอบดูใหม่ครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#26

Post 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 ออกทั้งหมด
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#27

Post by snasui »

:D แนบไฟล์ที่มี Code นี้มาด้วยจะได้ช่วยทดสอบได้ครับ

ไฟล์ที่แนบมาด้านบนไม่มี Code นี้ครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#28

Post by primeval »

รายการทดสอบ.xlsm
Module 5 ใส่ Code อื่นๆแล้ว
Module 6 Code จากอาจารย์ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#29

Post 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 ขอบเขตบนก็เลยเกินไปจากจำนวนสมาชิกที่มีครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#30

Post 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 ขอบเขตบนก็เลยเกินไปจากจำนวนสมาชิกที่มีครับ
ขอบคุณครับ ขอบคุณมากๆครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#31

Post by primeval »

รายการทดสอบ.xlsm
รบกวนอีกครั้งครับ หลังการเลือก Slicer สาขา มีปัญหา Slicer ไปเลือกสาขาสุดท้ายติดมาด้วยครับ ทำให้เวลา เก็บค่าตัวแปรจากชื่อในช่อง A9 จะติดสาขารายการสุดมาด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#32

Post 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
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#33

Post 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
You do not have the required permissions to view the files attached to this post.
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#34

Post by primeval »

ภาพนี้คือค่าที่ถูกต้องครับ จาก Code เก่าที่ติดบัค Loop ครับ
Untitled-4.png
Untitled-5.png
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#35

Post 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 จะได้ปรับปรุงพลิกแพลงเองได้และพยายามเขียนมาเองก่อนครับ
primeval
Member
Member
Posts: 116
Joined: Thu Oct 15, 2015 11:21 pm

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

#36

Post by primeval »

ขอบคุณครับ ผมจะพยายามให้มากกว่าเดิมครับ
Post Reply