Page 1 of 1

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

Posted: Fri Jan 31, 2014 10:58 am
by Rattanatham
ต้องการ Filter แยกแต่ละแผนก โดยให้เลือกแผนกที่ check box จากนั้น กดปุ่ม Filter และข้อมูลทั้งหมดที่อยู่ดังกล่าว
แสดงในอีก sheet หนึ่งค่ะ ตอนนี้เขียน code มาจะจบแล้ว ติดตรงคำสั่ง SQL และคำสั่ง Array ที่เขียนไม่ถูกต้อง ช่วยแนะนำด้วยค่ะ

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

Posted: Fri Jan 31, 2014 11:52 am
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

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

Posted: Sat Feb 01, 2014 10:39 am
by Rattanatham
ลองใส่ Code ที่อาจารย์แนะนำมาแล้วค่ะ แต่ยังขึ้นว่า run error ลองเช็คดูแล้วมาจาก check box 2 ค่ะ ลองแก้ไขใหม่แต่ก็ยัง run ไม่ได้
หรือต้องเพิ่ม คอลัม ที่ให้แสดงผลว่า True หรือ False ให้ Check box ทำงานได้ค่ะ

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

Posted: Sat Feb 01, 2014 11:48 am
by snasui
:D ให้นำ Code ที่ผมแนบไปให้ไปใช้ ทดสอบ Code นั้น ไม่ต้องปรับปรุงใด ๆ แล้วแจ้งมาว่าติดขัดตรงไหน อย่างไร

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

Posted: Sat Feb 01, 2014 2:34 pm
by Rattanatham
ทดลอง Run แล้วปรากฏว่า บรรทัดนี้ค่ะ ที่เกิด error

Code: Select all

.Range("l1:l4").SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp

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

Posted: Sat Feb 01, 2014 2:57 pm
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

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

Posted: Wed Feb 05, 2014 1:48 am
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 ค่ะ
เราสามารถเขียนคำสั่งแบบไหนได้บ้างค่ะ
ขอบคุณค่ะ

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

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

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

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