ข้ามไปที่เนื้อหาหลัก

เทคนิค Access VBA

เทคนิค เกร็ด การใช้ VBA กับ Microsoft Access
  1. การสั่งไม่ให้ใช้ คลิกขวา ที่ฟอร์ม หรือ รายงาน
    • เปิดฟอร์มหรือรายงานแบบ มุมมองออกแบบ หรือ Design View
    • ที่ on load เขียนคำสั่งเพิ่ม ดังนี้
      Forms("ชื่อฟอร์ม หรือชื่อรายงาน").ShortcutMenu = False
    • เมื่อเปิดฟอร์ม จะไม่สามารถใช้คลิกขวาได้
  2. การใช้ Combo box
    • กำหนด Row Source Type เป็น Table/Query เมื่อต้องการนำข้อมูลจากตารางหรือ Query มาแสดง
    • ถ้าจะใส่ข้อมูลเอง ให้กำหนด Row Source Type เป็น Value list
    • ถ้าจะเคลียข้อมูลใน Combo box ให้ใช้คำสั่ง me.ชื่อ combo box. RowSource = ""
    • ในกรณีที่ต้องการสร้าง Comob box 2 อัน เมื่อเลือกอันที่หนึ่งแล้ว ให้เป็นเงื่อนไขที่จะนำตัวเลือกมาแสดงใน combo box อันที่ 2 เช่น เมื่อเลือกจังหวัดแล้ว ให้นำชื่ออำเภอของจังหวัดที่เลือก มาให้เลือกใน Combo box อันที่ 2 ทำดังนี้
      - สร้างตาราง 2 ตาราง สำหรับเป็นข้อมูลจังหวัด และ อำเภอ
      ตารางจังหวัด
      ตารางอำเภอ
      - สร้าง combo box 2 อัน สมมุติชื่อ cboProvince และ cboAmphur
      -กำหนด Row Source Type ทั้งสอง เป็น Table/Query เพราะต้องเอาข้อมูลมาจาก ตาราง เนื่องจากชื่อจังหวัด ชื่ออำเภอ มีมาก
      - ที่ after update ของ cboProvince เขียนโค้ด ดังนี้

      Private Sub cboProvince_AfterUpdate()
          Me.cboAmphur.RowSource = "SELECT tblAmpur.ampname, tblAmpur.provid  FROM tblAmpur WHERE (((tblAmpur.provid)= '" & Me.cboProvince.Column(0) & "'))"
          Me.cboAmphur = "เลือกอำเภอ"
          Me.cboAmphur.Requery   
      End Sub

      -สังเกตว่า มีการสั่งให้แสดง ข้อความ เลือกอำเภอ และต้องมีคำสั่ง Requery เพื่อให้นำข้อมูลที่สั่งใน row source มาแสดง ถ้าไม่สั่ง Requery จะยังไม่แสดง
  3. การหาค่าในตาราง โดยระบุชื่อฟิลด์ ที่ต้องการ ให้นำค่าใน Record นั้น ๆ มาแสดง มีประโยชน์ในการจัดเรียงข้อมูลแบบ Excel แล้วนำมาเข้าโปรแกรม Access เช่น หัวคอลัมน์เป็นชื่อวิชา และมีรายชื่อนักเรียนอยู่ในคอลัมน์แรก เช่น
    thisSubj = "วิทยาศาสตร์"
    Set rst = dbs.OpenRecordset("SELECT * FROM " & dataTableName)  '
    If Not rst.EOF Then
        With rst
            Do While Not rst.EOF
                thisStudentScore = rst(thisSubj) 
                rst.MoveNext
            Loop
        End With
    rst.Close
    ความจริง ใช้  
    thisStudentScore = rst!วิทยาศาสตร์  
    ก็ได้ แต่ในกรณีที่ไม่รู้ว่าจะเป็นวิชาอะไร จำเป็นต้องใช้ตัวแปร โค้ดข้างต้นจะมีประโยชน์
  4. การตรวจสอบค่า ว่ามีอยู่ใน Listbox หรือไม่ สร้างฟังก์ชันข้างล่างนี้ ตรวจสอบ

    Function isValidSubject(subjName As String) As Boolean
    Dim i As Integer
    For i = 0 To Me.lstSubNames.ListCount - 1
       If Me.lstSubNames.Column(0, i) = subjName Then
         isValidSubject = True
             Exit Function
       End If
    Next i
         isValidSubject = False
    End Function
  5. การเปิดฟอร์มแบบ ตาราง (DataSheet) ทำให้สะดวกในการแก้ไขข้อมูล ถ้าใช้ VBA สั่งให้เปิดฟอร์มแบบตาราง  ต้องระบุไปด้วยว่า ให้เปิดแบบตาราง(DataSheet)  มิฉะนั้น จะไม่เปิดแบบตาราง แม้ว่าจะไปตั้งค่า Default ของฟอร์มให้เป็นตารางก็ตาม เช่น ถ้าเป็นคำสั่งใน ButtonCallback คลิกจากริบบิ้นให้เปิดฟอร์มแบบ DataSheet ให้เขียนดังนี้

    Sub buttonCallback(control As IRibbonControl)
     Select Case control.ID
         Case "showAll"
            DoCmd.OpenForm "frmShowAll_by_Level", acNormal
         Case ...
  6. การค้นหาค่าในตารางที่ 1 ที่ไม่มีในตารางที่ 2 เช่น มีรายชื่อจังหวัดในตาราง tblProvince และ อีกตารางหนึ่งคือ tblPrintLabelData เป็นการส่งงานของจังหวัด อยากทราบว่า จังหวัดที่ยังไม่ส่งงานมีจังหวัดอะไรบ้าง

    วิธีการ ให้เขียน VBA ดังนี้

    SELECT tblProvince.provname FROM tblProvince WHERE ((Exists (SELECT * FROM tblPrintLabelData WHERE tblProvince.provname = tblPrintLabelData.prvName)=False);

    ตัวอย่างข้างบน tblProvince.provname และ tblPrintLabeldata.prvName เป็นชื่อจังหวัดเหมือนกัน ความจริง เงื่อนไขถ้าใช้ id ของจังหวัด กำหนดให้เท่ากัน ก็จะขจัดปัญหาเริื่องการเขียนสะกดการันต์ แต่ ในของจริงที่ทำบังเอิญว่า id ของจังหวัด มาจาก 2 แหล่ง กลัวว่าจะไม่เท่ากัน เลยใช้ชื่อแทน

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

อุปมา อุปไมย สำนวนการเปรียบเทียบ ของไทย

การเตรียมสอบ ก.พ. ภาค ก. เพื่อสอบบรรจุเข้ารับราชการ มีการทดสอบความสามารถทั่วไป มักจะมี
ข้อสอบที่เกี่ยวกับอุปมาอุปไมย  ข้อสอบมีลักษณะ ให้หาตัวเลือกที่มีความหมาย ความสัมพันธ์คล้ายคลึง หรือเหมือนกับที่โจทย์กำหนดให้มา  หรือเติมข้อความที่มีความหมายสอดคล้องกับคำอุปมาอุปไมยที่ยกมาให้ เป็นต้น ดังนั้น การเข้าใจความหมายของคำอุปมาอุปไมย จึงช่วยให้ทำข้อสอบได้ดียิ่งขึ้น

คำอุปมาอุปไมย หมายถึง ถ้อยคำที่เป็นสำนวนพวกหนึ่ง กล่าวทำนองเปรียบเทียบ ให้เห็นจริง เข้าใจแจ่มแจ้งชัดเจน และสละสลวยน่าฟังมากขึ้น การพูดหรือการเขียน นิยมหาคำอุปมาอุปไมยมาเติมให้ได้ความชัดเจนเกิดภาพพจน์ เข้าใจง่าย เช่น

คนดุ หากต้องการให้ความหมายชัดเจน น่าฟัง และเกิดภาพพจน์ชัดเจนก็ต้องอุปมาอุปไมยว่า “ดุ เหมือน เสือ”
ขรุขระมาก การสื่อความยังไม่ชัดเจนไม่เห็นภาพ ต้องอุปมาอุปไมยว่า “ขรุขระเหมือนผิวมะกรูด” หรือ “ขรุขระเหมือนผิวพระจันทร์” ก็จะทำให้เข้าใจ ความหมายในรูปธรรมชัดเจนมากยิ่งขึ้น

คำอุปมาอุปไมยที่ควรรู้จัก (พิมพ์คำ/ข้อความ แล้วกดปุ่ม "ค้นหา")

แนวข้อสอบ เงื่อนไขสัญลักษณ์

ครั้งที่แล้ว ได้แนะนำหลักการทำ ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ มา แล้ว ถ้าใครยังไม่ได้อ่าน ก็คลิกกลับไปอ่านได้
ความจริง ข้อสอบเงื่อนไขสัญลักษณ์ เป็นข้อสอบไม่ยาก ถ้าเข้าใจหลักการ และมีทักษะความชำนาญ ใจเย็น ๆ อย่าตื่นเต้น โดยเฉพาะการดูเครื่องหมายต่าง ๆ อย่าดูผิด เช่น เครื่องหมายมากกว่า (>) น้อยกว่า (<) เป็นต้น เพราะการแก้ปัญหาโจทย์เงื่อนไขสัญลักษณ์ หรือ inequality ก็คล้ายกับการแก้ปัญหาสมการโดยทั่วไป นั่นเอง คือ สามารถบวก ลบ คูณ หาร ด้วยจำนวนที่เท่ากัน ทั้งสองข้างของเครื่องหมายได้ กลับเศษเป็นส่วนได้ แต่ก็มีบางเรื่อง บางรายละเอียดที่แตกต่างกันบ้าง ซึ่งอ่านได้จาก ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ นะครับ ครั้งนี้ จึงเป็นการนำแนวข้อสอบ เงื่อนไขสัญลักษณ์ เพื่อนำมาฝึกทำให้เกิดทักษะความชำนาญ เพื่อจะได้ทำข้อสอบได้รวดเร็วขึ้น เพราะในห้องสอบ เวลาจัดได้ว่ามีค่ามาก ยิ่งทำเร็วและถูกต้อง ยิ่งดี คำสั่ง

เลือกตอบข้อ 1. ถ้าข้อสรุปทั้งสอง ถูกด้องหรือเป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 2. ถ้าข้อสรุปทั้งลอง ผิดหรือไม่เป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 3. ถ้าข้อ…

เทคนิคการทำ ข้อสอบ อนุกรม ของ ก.พ.

|ประเภทของอนุกรม เทคนิคการทำโจทย์เลข อนุกรม ข้อแนะนำเพิ่มเติม |


ข้อสอบเลขอนุกรม ของ ก.พ. ต้องการวัดความถนัดทางด้านตัวเลข โดยการจัดทำตัวเลขเป็นชุด ๆ ที่มีความสัมพันธ์กันบางอย่าง โดยให้ผู้เข้าสอบได้แสดงความถนัดด้านตัวเลข ในการวิเคราะห์และแก้ปัญหาตามที่โจทย์ระบุ


ประเภทของอนุกรม รูปแบบความสัมพันธ์ของตัวเลขอนุกรมเท่าที่พบบ่อย ๆ มีหลายประเภท เช่น

ก. อนุกรมเชิงเดี่ยว 

ได้แก่ชุดตัวเลขที่เป็นอนุกรมเพียงชุดเดียว เช่น
ค่าของตัวเลขเพิ่มขึ้นต่อเนื่องอย่างเป็นระบบ โดยการบวก หรือ คูณ ตัวเลขก่อนหน้า เช่น บวกด้วยตัวเลขที่เป็นค่าคงที่ เช่น    5   10   15   20   ...?...
บวกด้วยตัวเลขที่มีระบบ เช่น     1    2    5    10   ...?...
คูณด้วยค่าคงที่ เช่น   1   3   9   27   ...?...
มีทั้ง บวก ลบ คูณ หรือหาร สลับกัน เช่น บวกแล้วคูณด้วยค่าคงที่สลับกัน ดังตัวอย่าง  5   7    14   16  32   ...... มีการ บวก ลบ คูณ หรือ หาร ร่วมกัน เช่น  15   31   63   127   255  ...?...
ในตัวอย่างนี้ จะเห็นว่า ตัวเลขตัวแรกคูณด้วย 2 และบวกด้วย 1 จะได้ตัวเลขตัวถัดไป คูณด้วยค่าคงที่ที่เป็นเศษส่วน ให้สังเกตความสัมพันธ์ว่า ตัวเลขก่อนหน้า …