: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

ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Rattanatham
Member
Member
Posts: 6
Joined: Fri Jan 17, 2014 6:38 pm

ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#1

Post by Rattanatham »

ต้องการ Filter แยกแต่ละแผนก โดยให้เลือกแผนกที่ check box จากนั้น กดปุ่ม Filter และข้อมูลทั้งหมดที่อยู่ดังกล่าว
แสดงในอีก sheet หนึ่งค่ะ ตอนนี้เขียน code มาจะจบแล้ว ติดตรงคำสั่ง SQL และคำสั่ง Array ที่เขียนไม่ถูกต้อง ช่วยแนะนำด้วยค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#2

Post by snasui »

:D ตัวอย่าง Code ตามด้านล่างซึ่งไม่ต้องใช้ SQL Statment ครับ

Code: Select all

Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
        Sheets(2).Range("l2") = 1
    Else
        Sheets(2).Range("l2") = ""
    End If
End Sub

Private Sub CheckBox2_Click()
    If CheckBox2.Value = True Then
        Sheets(2).Range("l3") = 2
    Else
        Sheets(2).Range("l3") = ""
    End If
End Sub

Private Sub CommandButton1_Click()
    With Sheets("Sheet1")
        .Range("a:d").Clear
        .Range("l1") = "Dep."
        .Range("l1:l4").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
        Sheets("Product").Range("G3:J86").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("L1").CurrentRegion, CopyToRange:= _
            .Range("A1"), Unique:=False
         .Range("l1:l4").ClearContents
         CheckBox1.Value = False
         CheckBox2.Value = False
    End With
End Sub
Rattanatham
Member
Member
Posts: 6
Joined: Fri Jan 17, 2014 6:38 pm

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#3

Post by Rattanatham »

ลองใส่ Code ที่อาจารย์แนะนำมาแล้วค่ะ แต่ยังขึ้นว่า run error ลองเช็คดูแล้วมาจาก check box 2 ค่ะ ลองแก้ไขใหม่แต่ก็ยัง run ไม่ได้
หรือต้องเพิ่ม คอลัม ที่ให้แสดงผลว่า True หรือ False ให้ Check box ทำงานได้ค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#4

Post by snasui »

:D ให้นำ Code ที่ผมแนบไปให้ไปใช้ ทดสอบ Code นั้น ไม่ต้องปรับปรุงใด ๆ แล้วแจ้งมาว่าติดขัดตรงไหน อย่างไร
Rattanatham
Member
Member
Posts: 6
Joined: Fri Jan 17, 2014 6:38 pm

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#5

Post by Rattanatham »

ทดลอง Run แล้วปรากฏว่า บรรทัดนี้ค่ะ ที่เกิด error

Code: Select all

.Range("l1:l4").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#6

Post by snasui »

:D ปรับเฉพาะ Code ที่ CommandButton1_Click เป็นตามด้านล่างแล้วทดสอบใหม่อีกรอบครับ

Code: Select all

Private Sub CommandButton1_Click()
    On Error Resume Next
    With Sheets("Sheet1")
        .Range("a:d").Clear
        .Range("l1") = "Dep."
        .Range("l1:l4").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
        Sheets("Product").Range("G3:J86").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("L1").CurrentRegion, CopyToRange:= _
            .Range("A1"), Unique:=False
         .Range("l1:l4").ClearContents
         CheckBox1.Value = False
         CheckBox2.Value = False
    End With
End Sub
Rattanatham
Member
Member
Posts: 6
Joined: Fri Jan 17, 2014 6:38 pm

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#7

Post by Rattanatham »

ได้แล้วค่ะ :D ขอบคุณมากนะค่ะ
กว่าจะได้เล่นเอา มึนเลย วิธีนี้ดิฉันว่ายากค่ะ สำหรับคนที่ไม่ถนัดการเขียนโปรแกรมอย่างดิฉันค่ะ
ก็เลยลองอีก วิธีหนึ่งค่ะ แต่ก็ใช้ VBA เหมือนกัน แต่รู้สึกว่าไม่ยุ่งยากมากค่ะ

Concept: กด "Create Check sheet" --> user form ปรากฎให้ใส่ข้อมูล --> เมื่อกรอกข้อมูลครบแล้ว กด "Create" --> ข้อมูลทั้งหมดจะไปปรากฏใน sheet2

แต่ตอนนี้ติดปัญหาตรงที่ ดิฉันไม่สามารถนำ รายการที่อยู่ใน คอลัม J ของ sheet1 มาใส่ลงใน Combobox ได้ค่ะ
ต้องการจะนำรายการที่อยู่ใน คอลัม J ทั้งหมดใส่ลงใน Combobox โดยที่ไม่ให้แสดงตัวที่ซ้ำกันค่ะ ลองเขียนโค้ด

Code: Select all

.additem(sheets(1).range("J:J"))
ก็ error ค่ะ
เราสามารถเขียนคำสั่งแบบไหนได้บ้างค่ะ
ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ

#8

Post by snasui »

:D คนไม่ถนัด VBA ย่อมไม่เลือกใช้ UserForm เพราะเป็นการทำเรื่องทียากกว่า เพราะต้องสร้าง Object ขึ้นมาใหม่ กำหนด Properties ต่าง ๆ แล้วต้องเขียน Code กำกับ Control เพื่อเชื่อมกับ Worksheet

ผมทดสอบกรอกข้อมูลจากที่เขียนมาแล้วไม่แสดงผลใด ช่วยยกตัวอย่างข้อมูลที่ต้องกรอก เพื่อให้แสดงผลตามต้องการมาด้วยครับ

สำหรับการนำข้อมูลแบบ Unique ไปใส่ใน Control ที่อยู่ใน UserForm ไม่มีวิธีที่ง่าย อย่างง่ายที่สุดคือบันทึก Macro โดย Remove Duplicate แล้วค่อยนำข้อมูลผลลัพธ์ไปใช้ใน Property ที่ชื่อว่า RowSource หรือใช้ Loop เพื่อ Add Item ให้กับ Control อย่างที่ยากขึ้นมาคือสร้าง Collection เข้ามาช่วย เช่นนี้เป็นต้นครับ
Post Reply