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
ตัวอย่าง 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
ให้นำ 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
ปรับเฉพาะ 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
ได้แล้วค่ะ
ขอบคุณมากนะค่ะ
กว่าจะได้เล่นเอา มึนเลย วิธีนี้ดิฉันว่ายากค่ะ สำหรับคนที่ไม่ถนัดการเขียนโปรแกรมอย่างดิฉันค่ะ
ก็เลยลองอีก วิธีหนึ่งค่ะ แต่ก็ใช้ VBA เหมือนกัน แต่รู้สึกว่าไม่ยุ่งยากมากค่ะ
Concept: กด "Create Check sheet" --> user form ปรากฎให้ใส่ข้อมูล --> เมื่อกรอกข้อมูลครบแล้ว กด "Create" --> ข้อมูลทั้งหมดจะไปปรากฏใน sheet2
แต่ตอนนี้ติดปัญหาตรงที่ ดิฉันไม่สามารถนำ รายการที่อยู่ใน คอลัม J ของ sheet1 มาใส่ลงใน Combobox ได้ค่ะ
ต้องการจะนำรายการที่อยู่ใน คอลัม J ทั้งหมดใส่ลงใน Combobox โดยที่ไม่ให้แสดงตัวที่ซ้ำกันค่ะ ลองเขียนโค้ด
ก็ error ค่ะ
เราสามารถเขียนคำสั่งแบบไหนได้บ้างค่ะ
ขอบคุณค่ะ
Re: ต้องการ Filter แต่ละแผนก โดย VBA ค่ะ
Posted: Wed Feb 05, 2014 11:55 am
by snasui
คนไม่ถนัด VBA ย่อมไม่เลือกใช้ UserForm เพราะเป็นการทำเรื่องทียากกว่า เพราะต้องสร้าง Object ขึ้นมาใหม่ กำหนด Properties ต่าง ๆ แล้วต้องเขียน Code กำกับ Control เพื่อเชื่อมกับ Worksheet
ผมทดสอบกรอกข้อมูลจากที่เขียนมาแล้วไม่แสดงผลใด ช่วยยกตัวอย่างข้อมูลที่ต้องกรอก เพื่อให้แสดงผลตามต้องการมาด้วยครับ
สำหรับการนำข้อมูลแบบ Unique ไปใส่ใน Control ที่อยู่ใน UserForm ไม่มีวิธีที่ง่าย อย่างง่ายที่สุดคือบันทึก Macro โดย Remove Duplicate แล้วค่อยนำข้อมูลผลลัพธ์ไปใช้ใน Property ที่ชื่อว่า RowSource หรือใช้ Loop เพื่อ Add Item ให้กับ Control อย่างที่ยากขึ้นมาคือสร้าง Collection เข้ามาช่วย เช่นนี้เป็นต้นครับ