การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
ตัวอย่างการดึงข้อมูลจากฐานข้อมูลที่จะนำเสนอต่อไปนี้เป็นการใช้ VBA ในการจัดการ ซึ่งเป็นหนึ่งในหลาย ๆ วิธีครับ โดยมีฐานข้อมูลพนักงานอยู่ที่ชีท Database ส่วนชีท Report จะเป็นการดึงรายชื่อของพนักงานมาแสดงตามแผนกที่เลือกในเซลล์ E2 ของชีท Report หลังจากนำข้อมูลมาวางแล้วก็กำหนดให้จัดรูปแบบให้ด้วยเพื่อให้มีความสวยงามน่าใช้งาน โดยทำการจัดรูปแบบเฉพาะช่วงที่มีข้อมูลเท่านั้น ดูภาพ Database และ Report ตามด้านล่างครับ ภาพตัวอย่างฐานข้อมูลพนักงาน
ภาพตัวอย่าง Report ที่ต้องการ
ภาพแสดงตัวอย่างการทำงาน
โดยใช้ Code VBA ดังต่อไปนี้ Code ด้านล่างวางไว้ที่ชีท Report Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$E$2" And Target <> "" Then ShowEmp ElseIf Target.Address = "$E$2" And Target = "" Then MsgBox "Please select data." End If End Sub Code ด้านล่างวางที่ Module ปกติ Option Explicit Option Base 1 Sub ShowEmp() Dim a() As Variant, lng As Long Dim r As Range, rAll As Range Dim rt As Range, rl As Long Application.EnableEvents = False Application.ScreenUpdating = False rl = Rows.Count With Worksheets("Database") Set rAll = .Range("F2", .Range("F" & rl).End(xlUp)) End With For Each r In rAll If r = Worksheets("Report").Range("E2") Then lng = lng + 1 ReDim Preserve a(5, lng) a(1, lng) = lng a(2, lng) = r.Offset(0, -5) a(3, lng) = r.Offset(0, -4) a(4, lng) = r.Offset(0, -3) a(5, lng) = r.Offset(0, -2) End If Next r If lng > 0 Then With Worksheets("Report") Set rt = .Range("A5", .Range("E" & lng - 1 + 5)) .Range("A5", .Range("A" & rl).End(xlUp).Offset(0, 4)).ClearContents .Range("A5:E5").Copy rt.PasteSpecial xlPasteFormats rt = Application.Transpose(a) .Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "000000" .Range(.Range("A5").End(xlDown).Offset(1, 0), .Range("E" & rl)).Clear .Range("E2").Activate End With Else MsgBox "Data not found." End If Application.EnableEvents = True Application.ScreenUpdating = True End Sub ซึ่งมีหลักการทำงานสำคัญ ๆ ดังนี้ 1. นำเซลล์ E2 ในชีท Report ไปเปรียบเทียบกับค่าในคอลัมน์ F ของชีท Database 2. ค่าที่ตรงกันจะเก็บไว้ใน Array 3. นำ Array มาวางที่ชีท Report 4. จัดรูปแบบให้กับรายงานที่ได้ นอกจากการใช้ Array เข้ามาช่วยแล้ว ทางเลือกอื่นในการเขียน Code เช่น สามารถเลือกเขียน Code ให้ทำ Advanced Filter แล้วเลือกเฉพาะข้อมูลที่ต้องการมาแสดงเช่นนี้เป็นต้นครับ
Create Date : 30 มิถุนายน 2554 |
|
2 comments |
Last Update : 10 กุมภาพันธ์ 2556 19:34:57 น. |
Counter : 10563 Pageviews. |
|
|
|