แบ่งปัน แนวทางการประยุกต์ใช้ Macro & VBA บน Access

4,463 views

Published on

แบ่งปัน แนวทางการประยุกต์ใช้ Macro & VBA บน Access

Published in: Education
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total views
4,463
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
169
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide

แบ่งปัน แนวทางการประยุกต์ใช้ Macro & VBA บน Access

  1. 1. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 1/41 แนวทางการพัฒนาระบบงานบน Access การพัฒนาระบบงานใน Access 1. Macro 2. Coding (VBA) 3. ActiveX Control (Control) เครืองมือสําหรับติดต่อกับผู้ใช้ Macro คือ? เป็นคําสังที Access เตรียมไว้ให้เลือกใช้ตามเหตุการณ์ทีต้องการ สร้างแล้ว Save เลยไม่ ต้องดับเบิลคลิกเหมือน Form, Report (ดูหน้า 25 เป็นต้นไปจะเป็น Action ของ Macro ทังหมด) Action แบ่งเป็น 2 ประเภท คือ 1. Action ทีไม่ต้องการส่วนขยาย เช่น Show AllRecord 2. Action ทีต้องการส่วนขยาย เช่น Close แนวคิดการสร้าง Macro สร้างได้ 2 วิธี 1. Macro ทีไม่มี Macro ย่อย (เอาข้อความทีปุ่มไปตังชือใน Macro Name) 2. Macro ทีมี Macro ย่อย (การตังชือ Macro หลักให้ตังชือตามชือฟอร์มนันๆ) หลักการสร้างและใช้งาน Macro 1. ต้องทราบว่า Macro ตัวไหนใช้กับวัตถุตัวไหน 2. ต้องทราบ Event Event ต่างๆ ทีควรทราบ • On Click = Command Button, ListBox • On Dbl Click = ListBox • On GotFocus, LostFocus = ใช้คีย์บอร์ดเลือนโดยกดปุ่ม Tab • On Mouse Down = กดเมาส์ค้างไว้ • On Mouse Up = ปล่อยเมาส์ • On Mouse Move = เมาส์เลือนผ่าน (Control Tip Text) • On Key Down = กดแช่ • On Key up = ปล่อย
  2. 2. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 2/41 • On Key Press = ใช้ใน VB6 มีตัวตรวจสอบได้ว่ากดปุ่มอะไร (Ascie Code) • After Update = TextBox, ComboBox • On Current = Form • On Load = Form ปฏิบัติ Macro1 Macro ทีไม่มี Macro ย่อย (Close) 1. นําตาราง tblSale มาสร้างฟอร์มตังชือว่า frmSail 2. กําหนด Form Header/Footer 3. กําหนด Form Header ว่า Sale Detail (ใช้Label) 4. กําหนด Properties รูปภาพ Size Mode: Stretch 5. กําหนด Form Footer เป็นปุ่ม Close (ใช้Command Button) กําหนด Properties ControlTipTextว่า ปิดฟอร์มครับ 6. สร้าง Macro ใหม่ตังชือว่า macClose • Action = Close • Save = Promt 7. ทีปุ่ม Close กําหนด Event: On Click = macClose 8. วาดฟอร์มจากตารางทีเหลือทังหมด (ทําตามขันตอนที 1 – 7) ปฏิบัติ สร้าง MainForm/SubForm (การสร้างจะต้องมีฟิลด์ทีลิงก์กัน) 1. สร้าง Mainform จากตาราง tblOrder ตังชือว่า mfrmOrder 2. สร้าง Subform (Wizard) จากตาราง tblOrder ตังชือว่า sfrmOrderDetail • เปลียน DefaultView: Continuous Form • เปลียนมุมมอง นํา Label ไปวางไว้บน Form Header • เพิม Label ตังชือ Amount เพือนํา Item มาคูณ Price • เพิม TextBox กําหนด Property: Control Source = Item * Price • ที Form Footer เพิม TextBox ตังชือว่า Total กําหนด Property: Control Source = Sum(Item * Price) *** #Name (อ้างอิงชือผิด), #Error (ใส่สูตรผิด)
  3. 3. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 3/41 ปฏิบัติ สร้างฟอร์มเมนูตังชือว่า frmMenu Main Menu Open Customer Open Sale Open Product Open Order Exit Database ปฏิบัติ Macro2 ทีมี Macro ย่อย (Open Form) 1. สร้าง Macro หลักชือ macMenu 2. สร้าง Macro ย่อย • OpenCustomer -> OpenForm -> frmCustomer • OpenSale -> OpenForm -> frmSale • OpenProduct -> OpenForm -> frmProduct • OpenOrder-> OpenForm -> frmOrder • ExitDatabase -> Quit 3. นํา Macro macMenu ไปกําหนดให้กับปุ่มต่างๆ ในฟอร์ม frmMenu ปฏิบัติ สร้างฟอร์ม frmWelCome 1. สร้าง Macro ชือ macWelcome Action Action Argument OpenForm Formname: frmMenu Close Objectname: frmWelcome 2. เปิดฟอร์ม fmrWelcome กําหนด Property ดังนี OnTimer macWelcome Time Interval 5000 ปฏิบัติ สร้าง Macro เพือกําหนดให้ฟอร์มเปิดขึนเองอัตโนมัติ 1. สร้าง Macro ใหม่ตังชือว่า Autoexec Action FormName OpenForm frmWelcome 2. นํา Macro ไปกําหนดทีฟอร์ม frmWelcome
  4. 4. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 4/41 ปฏิบัติ Macro3 ทีมี Macro แบบมี Condition 1. สร้าง Macro ใหม่ชือ macOrder MacroName Action Where Condition OpenCustomer OpenForm frmCustomer Cust_Number = Forms!mfrmOrder!Cust_Number PrintOrder OpenReport rptOrder Order_Number=Forms!mfrmOrder!Order_Number 2. นํา Macro ไปกําหนดให้กับฟอร์ม frmOrder การสร้าง Macro ค้นหา 1. การค้นหาข้อมูลครังละ 1 Record 2. การค้นหาข้อมูลครังละหลาย Record (Apply Filter) ปฏิบัติการค้นหาข้อมูลครังละ 1 Record 1. สร้างฟอร์มจากตาราง NwindEmployees ตังชือฟอร์มว่า frmEmployee 2. ที Form Header วาด TextBox ตังชือ Label: FindID, TextBox:txtFindID 3. สร้าง Macro ชือ macEmployee แล้วสร้าง Macro ย่อยดังนี MacroName Action Action Argument FindEmId GotoControl ControlName: EmployeeID FindRecord Find What: =txtFindID 4. นํา macEmployee ไปกําหนดเหตุการณ์ After Update ที txtFindID (สังเกตผล) 5. เพิมเติม MacroName: FindEmid ดังรูป MacroName Condition Action Action Argument FindEmId GotoControl ControlName: EmployeeID FindRecord Find What: =txtFindID GoToControl ControlName: txtFindID [txtFindID]<>[EmployeeId] MsgBox Find not Found, Critical, Find ID ... SetValue Item: [txtFindID], Expression: “” ... GoToControl ControlName: txtFindID
  5. 5. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 5/41 6. สร้าง Macro ต่อเพือไป SetFocus ตอนเปิดฟอร์มให้ Cursor อยู่ที txtFindID (ใช้เหตุการณ์ OnLoad) MacroName Condition Action Argument SetFocus GotoControl ControlName: txtFindID 7. สร้าง Macro ต่อเพือกําหนดให้txtFindID กับ EmployeeID ตรงกันตอนเลือน Record (กําหนดเหตุการณ์ Form เป็น On Current) MacroName Condition Action Argument SetPointer SetValue Item: txtFindID, Expression: EmployeeID ข้อจํากัดของการค้นข้อมูลครังละ 1 Record 1. Find Next ไม่ทราบว่าจะจบเมือไหร่ 2. Find Record เห็นทีละ Record 3. *** ถ้าต้องการค้นหาข้อมูลครังละหลายๆ Record ต้องใช้ Action ทีชือ Apply Filter ขันตอนการค้นหาข้อมูลครังละหลายๆ Record 1. สร้าง Query ก่อน 2. นํา Query ทีได้ไปสร้างฟอร์ม 3. วาด Combobox เพือเลือกดูข้อมูล 4. สร้าง Macro 5. กําหนด Event: After Update ที ComboBox ปฏิบัติการค้นหาข้อมูลครังละหลายๆ Record (Apply Filter) 1. สร้าง Query โดยเลือกตารางทังหมดยกเว้น Nwind 2. ตังชือ Query ว่า qryAmount โดยเลือกฟิลด์ต่างๆ ดังนี 3. Cust_Number, Cust_Name, Order_Date, Product_Number, Product_Name, Item, Price 4. นํา qryAmount ไปสร้างฟอร์มดังขันตอนต่อไปนี 5. สร้างฟอร์มใหม่กําหนดรูปแบบเป็น AutoForm: Tabbular ตังชือฟอร์มว่า frmAmount 6. ที FormFooter วาด TextBox เพือสร้างเป็นตัวนับจํานวณ Record ว่ามีกีรายการ โดยพิมพ์ สูตรที ControlSource ดังนี =” จํานวนข้อมูลทังสิน” & Count (Cust_Number) & “รายการ”
  6. 6. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 6/41 7. ที FormFooter วาด ComboBox มาวาดเพือเลือกดู Customer กําหนด Property ดังนี • Name: cboCustomer • Row Source: tblCustomer • Limit To List: Yes (กําหนดให้เลือกได้อย่างเดียว) • Column Count: 2 • Column Width: 1cm; 1.5cm • Bound Column: 1 8. สร้าง Macro ชือ macAmount สร้าง Macro ย่อยชือ Find Amount ดังนี (เสร็จแล้วนําไป กําหนดเหตุการณ์ After Update ที cboCustomer) Macro Name Action Argument Find Amount Applyfilter Where condition:Cust_Number=Forms!frmAmount!cboCustomer 9. สร้างปุ่ม All เพือแสดง Record ทังหมด จากนันสร้าง Macro ย่อยชือ AllRecord กําหนด Action: ShowAllrecord 10. สร้างปุ่ม SortAmount กับปุ่ม SortOrderDate และปุ่ม Calculator โดยกําหนด Macro ดังนี Macro Name Action Argument SortAmount GotoControl Amount RunCommand SortAscending SortOrderDate GotoControl Order_Date RunCommand SortDescending Calculator RunApp c:winntsystem32calc.exe สรุปหัวข้อนี • Event TextBox = After Update • Event ComboBox = After Update, Click • RunCommand = Run Menu หรือ ToolBar • RunApp = Run โปรแกรมอืน (มีข้อแม้ว่าต้องไป Run file.exe เท่านัน)
  7. 7. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 7/41 การสร้างฟอร์มแบบ ListBox (แนวคิดตารางทัง 2 ตารางต้องมีฟิลด์ทีเหมือนกัน) ปฏิบัติการสร้างฟอร์ม ListBox ต้องการสร้างรายการ Sale และ Customer โดยมีเงือนไขว่าเวลาเลือก Sale ต้องให้ปรากฏ Customer ของ Sale นันๆ 1. สร้างฟอร์มใหม่ตังชือ frmListBox 2. วาด ListBox ตัวแรกตังชือ Label: Sale แล้วกําหนด Property ดังนี (เสร็จแล้วสังเกตผล) • Name:lstSasle • RowSource: tblSale • Column Count: 2 • Column Width: 1cm; 1.5cm • Bound Column: 1 3. วาด ListBox ตัวที 2 ตังชือ Label: Customer แล้วกําหนด Property ดังนี (เสร็จแล้วสังเกต ผล) • Name:lstCustomer • RowSource: tblCustomer • คลิกที ... แล้วกําหนดค่าดังรูป (เสร็จแล้ว Run ดูสิครับว่าเกิดปัญหาอะไรขึนบ้าง) • Column Count: 3 • Column Width: 1cm; 1cm; 1.5cm • Bound Column: 2 4. ทดลอง Run Form สังเกตผล (จะต้องเปิด/ปิดฟอร์ม รหัสจึงจะตรงกัน จะต้องแก้ไขด้วย Macro) 5. สร้าง Macro หลักตังชือว่า macListBox เมือสร้างเสร็จแล้วนําไปกําหนดเหตุการณ์ On Click ให้กับ lstSale MacroName Action Argument UpdateCustomer Requery ControlName: lstCustomer
  8. 8. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 8/41 6. วาด ListBox ตัวที 3 ตังชือ Label: Order แล้วกําหนด Property ดังนี (เสร็จแล้วสังเกตผล) • Name:lstOrder • RowSource: คลิกที ... • เลือก Field: Cust_Number, Order_date, Product_Number, Product_Name, Item, Price, Amount:Item*Price • ที Cust_Number กําหนด Criteria: [lstCustomer] • Column Count: 7 • Column Width: 1cm; 1.5cm; 1cm; 1.8cm; 1; 1.5; 1.5 • Bound Column: 3 7. ทดลอง Run Form สังเกตผล (จะต้องเปิด/ปิดฟอร์ม รหัสจึงจะตรงกัน จะต้องแก้ไขด้วย Macro) 8. สร้าง Macro เมือสร้างเสร็จแล้วนําไปกําหนดเหตุการณ์ On Click ให้กับ lstCustomer MacroName Action Argument UpdateOrder Requery ControlName: lstOrder 9. สร้าง Macro เพือไปเปิดฟอร์ม frmProduct โดยมีเงือนไขให้รหัสทีเปิดตรงกันสร้าง Macro เมือสร้างเสร็จแล้วนําไปกําหนดเหตุการณ์ On DblClick ให้กับ lstOrder MacroName Action Argument OpenProduct OpenForm FormName: frmProduct View: Form Where Condition: Product_Number=Forms!frmListBox!lstOrder
  9. 9. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 9/41 การสร้างฟอร์มแบบ Option Group ต้องการสร้างฟอร์มจากตาราง NwindCustomer โดยต้องการดูกลุ่มลูกค้าเป็นกลุ่มดังนีคือ A-E, F-J, K-O, P-T, U-Z, All สามารถทําได้ดังนีครับ 1. สร้างฟอร์มจากตาราง NwindCustomer ตังชือว่า frmNwindCustomer 2. เพิม Form Header, Footer 3. วาด Option Button บน Header 4. วาด Option Group โดยใช้Wizard • Step1: Label Name (กําหนดค่าทีจะนําไปใช้6 ค่าด้วยกันคือ A-E, F-J, K-O, P-T, U-Z, All) • Step2: กําหนดค่า Default เป็น All • Step3: โปรแกรมจะบอกค่า Value เพือนําไปกําหนดใน Where Condition • Step4: เลือกให้โปรแกรมบันทึกค่านีไว้ • Step5: เลือกรูปแบบปุ่ม • Step6: ตังชือว่า fraCompany 5. สร้าง Macro ชือ macNwindCustomer ไปกําหนดเหตุการณ์ On Click ที fraCompany Where Condition: CompanyName Like “[A-E]” การสร้าง Macro แบบ Auto 1. Autoexec (ไม่จําเป็นต้องมี Macro ย่อย) Action Argument OpenForm Form: frmWelCome 2. Autokeys (จําเป็นต้องมี Macro ย่อย เพราะต้องนํา Shortcut Key ไปตังชือ Macro ย่อย) MacroName Action Argument {F10} Quit ^m OpenForm frmMenu ^+P OpenReport rptOrder
  10. 10. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 10/41 Macro Vs Coding (VBA) ข้อแตกต่างของ Macro / Coding 1. Coding ทํางานได้เร็วกว่า Macro 2. Coding ทํา Debug ได้แต่ Macro ทําไม่ได้ 3. Coding สร้างตัวแปรได้Macro สร้างไม่ได้ 4. ใช้Macro เป็น AutoKeys ได้เพียงอย่างเดียว 5. ดังนันระบบงานจริงๆ เราควรใช้Coding หรือแปลง Macro เป็น Coding โดย Coding จะ เก็บที Module (เวลาใช้งานกับฟอร์มต้อง Copy หรือ Move ไปทีฟอร์มนันๆ และต้องทราบ ด้วยว่าจะนําไปใช้กับ Object ตัวไหน และจะใช้ใน Event ไหน) 6. Module ไว้เขียนฟังก์ชันการใช้งาน Macro 3 ชนิดที Coding ทําไม่ได้ 1. Autoexec 2. Autokeys 3. Menubar ขันตอนการแปลง Macro เป็น Coding (Module) 1. คลิกขวาที Macro เลือก Save As • As: Module • Add error Handler…ให้โปรแกรมเขียนแก้Error ให้อัตโนมัติ • Include macro Comment … ให้โปรแกรมเขียน Comment ให้อัตโนมัติ 2. ปรากฏ Coding ในหน้าต่าง VBA สีต่างๆ ใน Coding • สีเขียว = Comment (โปรแกรมไม่อ่าน) • สีนําเงิน = Keyword Text (โปรแกรม) • สีดํา = ไม่ใช่คําสงวน (โปรแกรมอ่าน) • สีแดง = Syntax Error Text (โปรแกรมอ่าน)
  11. 11. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 11/41 ความหมายในการเขียนโปรแกรม 1. Procedure คือ โปรแกรมย่อย มี 2 ชนิด • Sub Procedure เขียนเพือเป็นเหตุการณ์ของวัตถุ • Function Procedure เขียนเพือช่วยในการคํานวณ / ทํางาน 2. Private Sub เขียนเพือเป็นเหตุการณ์ของวัตถุ แยกแต่ละเหตุการณ์ ตระกูลของ VB 1. VBA -> MS Office ส่วนมากใช้พัฒนาระบบงานใน Access & Excel แปลงเป็น MDE ได้ลักษณะเดียวกับ EXE แต่ MDE สามารถเปิดดูตารางได้ เพราะฉะนันเราต้องสร้างความปลอดภัยในลักษณะไฟล์ MDW 2. VB (VB 6) -> Programming อย่างเดียวไม่มี Macro • ข้อดี คือ ใช้งานได้กว้างกว่ารวมถึงควบคุม Office ก็ได้ • ข้อเสีย คือ ยุ่งยาก • สามารถ Compile เป็น EXE. ได้(แก้โค๊ดไม่ได้) 3. VB Script -> เป็นภาษาทีโต้ตอบ HTML ได้(Web Site) 4. VB.NET -> เป็น Version ใหม่ (ถัดจาก VB 6) ใช้สําหรับงาน Web Service (สูงกว่า Web Site) • กินพืนที 8 GB • ต้องมี Hardware เพียงพออย่างตํา 80 GB • ใช้งานได้ดีกับ Windows 2003 ปฏิบัติการแปลง Macro เป็น Coding (Module) 1. ให้แปลง Macro macClose กับ Macro macMenu 2. คัดลอกคําสัง DoCmd.Close , "" 3. เปิดฟอร์ม frmCustomer 4. กําหนด Event: OnClick เป็น Event Procedure 5. วางคําสัง DoCmd.Close , "" 6. ทดลอง Run Programe ครังที1 7. ลบ Module macClose 8. ทดลอง Run Programe ครังที2
  12. 12. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 12/41 9. คัดลอกคําสังจาก macMenu ไปยังฟอร์ม frmMenu (ทําลักษณะเดียวกับข้อ 2 – 8 เพิมเติมให้ตังชือปุ่มด้วยครับ) Access Programming 1. Object Oriented Program (OOP) 2. Event Driven 3. Class • แบบมองเห็น (Control) • แบบมองไม่เห็น (VBA) ต้องประกาศตัวแปร และต้องพิมพ์คําสัง Set จึงจะใช้งานได้ 4. Object 5. Property 6. Method 7. Argument หลักการเขียนโปรแกรม พิมพ์ชือ Object แล้วตามด้วย Property หรือ Method โดยมีหลักการดังนี 1. Object.Property = Value 2. Object.Method ให้ตามด้วยเคาะวรรค อาจจะมี Argument หรือ ไม่มี Argument ก็ได้ หลักการตังชือ Object 1. ตังให้สือความหมาย 2. ใช้ภาษาอังกฤษ 3. ห้ามเกิน 255 ตัวอักษร 4. ห้ามขึนต้นด้วยตัวเลข 5. ห้ามซํากัน 6. ควรใส่ Prefix นําหน้าชือ Object ด้วยเพือบอกให้ทราบถึงชนิดของ Object เปรียบเทียบความหมายของคําใน Access กับ VBA 1. Action ใน Access = Method ใน VBA 2. ac คือค่าคงทีใน Access = vb ค่าคงทีใน VBA 3. Cm คือหน่วยวัดใน Access = TWIP คือหน่วยวัดใน VBA
  13. 13. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 13/41 4. Yes, No ใช้ใน Access = True, False ใช้ใน VBA 5. ลําดับที 1 ใน Access = ลําดับที 0 ใน VBA (ComboBox, ListBox) ปฏิบัติทดสอบการเขียนโปรแกรม 1 1. สร้างฟอร์มใหม่ตังชือว่า frmTestVBA1 2. วาด TextBox ตังชือว่า txtTest 3. วาด Command Button ตังชือว่า cmdTest และตังชือ Caption ว่า Text กําหนด Event: Onclick แล้วเขียน Coding ดังนี (เปรียบเทียบกับ Property ในระหว่างเขียนเพือจะได้ เข้าใจหลักการไปด้วย) Private Sub cmdTest_Click() txtTest.BackColor = 255 'Red txtTest.ForeColor = vbYellow txtTest.ControlTipText = "MyTest" txtTest.Locked = True txtTest.TextAlign = 2 'Center txtTest.Width = 2880 '5cm txtTest.Value = "Access VBA" End Sub ปฏิบัติทดสอบการเขียนโปรแกรม 2 1. วาด TextBox ตังชือว่า Text1 2. วาด Command Button ตังชือว่า cmdFocusText1 และตังชือ Caption ว่า Focus Text1 กําหนด Event: Onclick แล้วเขียน Coding ดังนี Private Sub cmdFocusText1_Click() Text1.SetFocus End Sub ปฏิบัติทดสอบการเขียนโปรแกรม 3 1. วาด Command Button ตังชือว่า cmdClose และตังชือ Caption ว่า Close กําหนด Event: Onclick แล้วเขียน Coding ดังนี
  14. 14. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 14/41 Private Sub cmdClose_Click() DoCmd.Close , , acSaveYes End Sub ปฏิบัติทดสอบการเขียนโปรแกรม 4 1. วาด Command Button ตังชือว่า cmdExitProgram และตังชือ Caption ว่า Exit Program กําหนด Event: Onclick แล้วเขียน Coding ดังนี Private Sub cmdExitProgram_Click() DoCmd.Quit acQuitSaveAll End Sub ปฏิบัติทดสอบการเขียนโปรแกรม 5 1. วาด Command Button ตังชือว่า cmdOpenEmployee และตังชือ Caption ว่า Open Employee กําหนด Event: Onclick แล้วเขียน Coding ดังนี Private Sub cmdOpenEmployee_Click() DoCmd.OpenForm "frmEmployee" End Sub ปฏิบัติทดสอบการเขียนโปรแกรม 6 1. เปิดฟอร์ม mfrmOrder 2. กําหนด Event: OnClick ที cmdOpenCustomer (…) แบบมีเงือนไขดังนี Private Sub cmdOpenCustomer_Click() DoCmd.OpenForm "frmCustomer", , , _ "Cust_number= !mfemOrder!Cust_number", , acDialog End Sub *** การขึนบรรทัดใหม่ให้เคาะ 1 เคาะแล้วตามด้วยเครืองหมาย_ แล้ว Enter *** ไม่สามารถแยกหรือขึนบรรทัดระหว่างภายในเครืองหมายคําพูดได้
  15. 15. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 15/41 Statement in VBA (คําสังทีเสริมความสามารถให้กับ VBA ) 1. With…End With 2. If…End If 3. Select…End Select 4. Do…Loop 5. For…Next Exit Statement 1. Exit Do 2. Exit For 3. Exit Sub 4. Exit Function With…End With 1. ช่วยให้ไม่ต้องพิมพ์ชือวัตถุซํา 2. ทําให้โปรแกรมทํางานได้เร็วขึน ปฏิบัติ With … End With 1. เปิดฟอร์ม frmTestVBA1 2. เปลียนแปลง Coding ดังนี With txtTest .BackColor = 255 'Red .ForeColor = vbYellow ' .ControlTipText = "My Test" .TextAlign = 2 ' Center .Width = 2880 '5cm .Value = "Access" End With
  16. 16. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 16/41 If…End If 1. ช่วยในการตัดสินใจ 2. อย่าไปปนกับฟังก์ชัน IF (แต่การใช้งานเหมือนกัน) If…End If เขียนได้2 แบบ 1. เขียนบรรทัดเดียว ไม่ต้องมี End If If condition Then Statement [Else elseStatements] ตัวอย่างที1 If A>10 Then B=1 ตัวอย่างที2 If A>10 Then B=1 Else B=2 2. เขียนหลายบรรทัด ต้องปิดท้ายด้วย End If If condition Then If A>10 Then Statements B=1 Else Else elseStatements B=2 End If End If ปฏิบัติ If…End If 1 สร้างฟอร์มใหม่โดยใช้ข้อมูลจากตาราง NwindEmployee ตังชือฟอร์มว่า frmPageBreak(IF) โดยใช้Control PagePreak มาเป็นตัวแบ่งหน้าเป็น 2 หน้า 1. กําหนด Form Header/Footer 2. สร้างปุ่มที Form Footer ตังชือปุ่มว่า cmdGotoPage ตังชือ Caption ว่า Goto Page2 3. เขียนโปรแกรม Event: On Click ที cmdGotoPage ดังนี Private Sub cmdGotoPage_Click() If cmdGotoPage.Caption = "Goto Page2" Then DoCmd.GoToPage 2 cmdGotoPage.Caption = "Goto Page1" Else DoCmd.GoToPage 1 cmdGotoPage.Caption = "Goto Page2" End If End Sub
  17. 17. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 17/41 ปฏิบัติ If…End If 2 If condition-1 Then If Sale>=10000 Then Statements Commis = 0.1 ElseIf condition-2 Then ElseIf Sale>=5000 Then elseStatements Commis = 0.05 ElseIf condition-n Then ElseIf Sale>=3000 Then elseStatements Commis = 0.03 Else(นอกนันให้เป็น...) Else elseStatements Commis = 0 End If End If ปฏิบัติ 1. สร้างฟอร์มใหม่ตังชือ frmGrade 2. ต้องการตัดเกรดโดยสร้าง TextBox ชือ txtMark และสร้าง Label ชือ lblGrade 3. กําหนด Event: After Update ให้กับ txtMark และเขียนโปรแกรมดังนี Private Sub txtMark_AfterUpdate() If txtMark.Value >= 80 Then lblGrade.Caption = "A" ElseIf txtMark.Value >= 70 Then lblGrade.Caption = "B" ElseIf txtMark.Value >= 60 Then lblGrade.Caption = "C" ElseIf txtMark.Value >= 50 Then lblGrade.Caption = "D" Else lblGrade.Caption = "F" End If End Sub
  18. 18. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 18/41 Select…End Select • คล้ายกับ IF • ช่วยให้พิมพ์โปรแกรมได้สันลง • จุดต่างกับ IF คือ • ถ้าเงือนไขเดียวใช้IF • ถ้าเงือนไขเยอะๆ(โดยตรวจสอบจากสิงเดียว) ใช้Select จะเหมาะกว่า • ถ้าเงือนไขเยอะๆ(โดยตรวจสอบจากหลายสิง) ใช้ IF จะเหมาะกว่า รูปแบบ Select Case variable Select Case Sale Case value 1 Case Is >= 10000 (กรณีที 1) Statements Commis = 0.1 Case value 2 Case Is >= 5000 (กรณีที 2) Statements Commis = 0.05 Case value n Case Is >= 3000 (กรณีที 3) Statements Commis = 0.03 Case Else Case Else (กรณีที 4) elseStatements Commis = 0 End Select End Select ปฏิบัติ Select … End Select 1 แก้ไขโปรแกรมตัดเกรดจาก If เปลียนมาเป็น Select ดังนี Private Sub txtMark_AfterUpdate() Select Case txtMark.Value Case Is >= 80 lblGrade.Caption = "A" Case Is >= 70 lblGrade.Caption = "B" Case Is >= 60 lblGrade.Caption = "C" Case Is >= 50
  19. 19. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 19/41 lblGrade.Caption = "D" Case Else lblGrade.Caption = "F" End Select End Sub ปฏิบัติ Select … End Select 2 1. สร้างฟอร์มใหม่ชือ frmOpenForm(SelectCase) 2. วาด ComboBox แล้วกําหนด Properties ดังนี • Name: cboOpenForm • Row Source Type: Value List • Row Source: Customer; Sale; Product; Order 3. กําหนด Event: After Update แล้วเขียนโปรแกรมดังนี Private Sub cboOpenForm_AfterUpdate() Select Case cboOpenForm.ListIndex Case 0 DoCmd.OpenForm "frmCustomer" Case 1 DoCmd.OpenForm "frmSale" Case 2 DoCmd.OpenForm "frmProduct" Case 3 DoCmd.OpenForm "frmOrder" End Select End Sub ปฏิบัติ Select…End Select 3 1. สร้างฟอร์มใหม่ตังชือ frmFrameVBA(Select) 2. วาด Frame ตังชือ fraProduct • วาด Option Button 4 ตัว ตังชือว่า None, Computer, Printer, Calculator ตามลําดับ 3. วาด Image ตังชือ imgProduct
  20. 20. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 20/41 4. กําหนด Event ของ fraProduct เป็น On Click แล้วเขียนโปรแกรมดังนี Private Sub fraProduct_Click() Select Case fraProduct.Value Case 1 imgProduct.Picture = "" Case 2 imgProduct.Picture = "C:AdvAccessAdvAccess-originalComputer.WMF" Case 3 imgProduct.Picture = "C:AdvAccessAdvAccess-originalPrinter.WMF" Case 4 imgProduct.Picture = "C:AdvAccessAdvAccess-originalCalculator.WMF" End Select End Sub สรุป 1. เวลาพิมพ์ Case อย่าลืมเคาะ 1 เคาะก่อนพิมพ์ค่า 2. Frame ใช้. Value (1-n) 3. ComboBox, ListBox ใช้.List Index (0-n) Do…Loop การทําซําตามเงือนไขทีกําหนด เขียนได้2 แบบคือ 1. Do {While | Until} condition Statements Exit Do Statements Loop 2. Do Statements Exit Do Statements Loop {While | Until} condition
  21. 21. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 21/41 Do {While | Until} condition ใช้While หรือ Until แล้วตามด้วยเงือนไข • Do While ตราบใดทีเงือนไขเป็นจริงทําไปเรือยๆ จนกว่าจะเป็นเท็จจึงจะออกจากลูป • Do Until ตราบใดทีเงือนไขเป็นเท็จทําไปเรือยๆ จนกว่าจะเป็นจริงจึงจะออกจากลูป วิธีคิดสําหรับการนําไปใช้งาน • ทําความเข้าใจโจทย์เช่น รับชือลูกค้า 3 คน (รู้จํานวน) ใช้ Do While • ทําความเข้าใจโจทย์เช่น รับชือลูกค้าหลายคน พิมพ์ Exit จึงออกใช้ Do Until ตัวอย่างการเลือกใช้ Do While หรือ Do Until Counter = 0 Do While Counter < 20 Counter = Counter + 1 Print Counter Loop Counter = 0 Do Until Counter >= 20 Counter = Counter + 1 Print Counter Loop ปฏิบัติ Do…Loop 1 1. สร้างฟอร์มใหม่ตังชือ frmLoop 2. วาด Command Button ตังชือว่า cmdInputName 3. วาด Label ตังชือว่า lblName
  22. 22. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 22/41 4. กําหนด Event: On Click ที cmdInputName แล้วเขียนโปรแกรมดังนี Private Sub cmdInputName_Click() Do Until CuName = "Exit" Or CuName = “ออก” CuName = InputBox("Please enter Customer Name", "Input Data") If CuName = "Exit" Or CuName = “ออก” Then Exit Do lblName.Caption = CuName Loop End Sub For…Next เป็นคําสังวนรอบเช่นเดียวกับ Do…Loop ต่างกันตรงที หลักการ 1. เป็นการวนลูปทีเป็นตัวแปร และมีจํานวนรอบทีชัดเจน 2. หลัง for ต้องเป็นชือตัวแปร 3. หลัง Next ต้องเป็นชือตัวแปรเดียวกันกับ for 4. มี for เท่าไหร่มี Next เท่านัน 5. Step คือการเพิมค่าครังละเท่าไหร่ส่วนใหญ่จะเป็นครังละ 1 ใช้แทน Do ไม่ได้ รูปแบบ For Counter = start To end [Step step] Statements Exit For Statements Next Counter ตัวอย่าง For I = 1 To 10 Step 2 Print I For M = 1 To 5 …… Next M Next I
  23. 23. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 23/41 ปฏิบัติ For…Next วาดปุ่ม Command Button 1 ปุ่ม ต้องการหาผลรวมของตัวเลขจาก 1 ถึง 10 สามารถเขียน โปรแกรมได้ดังนี Private Sub Command2_Click() For i = 1 To 10 m = m + i Next i MsgBox "Sum 1 To 10 =" & m End Sub ตัวแปร (Variable) • ตัวแปรทําหน้าทีเก็บค่า, พักค่า • ตัวแปรจะหายไปเมือปิดฟอร์ม การใช้ตัวแปร ให้นึกถึงปัจจัย 3 ข้อนี • Name: ชือของตัวแปร • Type: ชนิดของตัวแปร • Lifetime: Scope ทีตัวแปรสามารถใช้งานได้ Name: ชือของตัวแปร กฎในการตังชือตัวแปร Name ต้องไม่เกิน 255 ตัวอักษร ต้องขึนต้นด้วยตัวอักษร เช่น A-Z, a-z ขอให้ตัวแรกเป็นตัวหนังสือเช่น A1 ได้แต่ 1A ไม่ได้ ต้องไม่ซํากับชือทีมีอยู่แล้วและไม่ซํากับคําสงวน Type: ชนิดของตัวแปร ต้องบอกว่าเป็นประเภทไหน ถ้าไม่บอกตัวแปรนันจะใหญ่มาก ตัวทีเก็บเลขจํานวนเต็ม 1. Byte น้อย เช่น เก็บอายุ 2. Integer ปานกลาง
  24. 24. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 24/41 3. Long มาก ตัวทีเก็บเลขจํานวนเต็มและทศนิยม 1. Single ทศนิยมไม่เกิน 7 หลัก 2. Double ทศนิยม 15 หลัก 3. Currency ทศนิยม 12 หลัก String เก็บตัวอักษรและเก็บตัวเลขทีไม่นําไปคํานวณ Boolean เก็บค่า จริง/เท็จ Date เก็บวันที Variant ถ้าไม่กําหนดว่าเป็นตัวแปรชนิดไหนโปรแกรมจะให้เป็นชนิด Variant อัตโนมัติ ซึงจะทําให้เปลืองพืนทีอย่างตํา 16 Byte (เพราะฉะนันในการ กําหนดตัวแปรแต่ละครังเราจะต้องบอกด้วยว่าตัวแปรตัวนันเป็นชนิดอะไร) รูปแบบการประกาศตัวแปร Dim VariableName As type เช่น Dim temp As Integer Dim temp% (% = Integer) Dim win (win=variant) Dim intTemp As Integer Dim strName As String เวลาตังชือตัวแปรแนะนําให้ตังชือย่อชนิดของตัวแปรด้วย พิมพ์ Option Explicit ไว้บนสุด เพือบังคับให้ต้องประกาศตัวแปรก่อนนําไปใช้งาน เสมอ ปฏิบัติ Variable 1 1. เปิดฟอร์ม frmLoop 2. พิมพ์ Option Explicit บนบรรทัด Private Sub cmdInputName_Click() 3. ทดลอง Run Program โดยคลิกทีปุ่ม Input Number 4. แก้Error โดยประกาศตัวแปร Dim CuName As String
  25. 25. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 25/41 5. ทดลอง Run Program โดยคลิกทีปุ่ม Sum 1 To 10 6. แก้Error โดยประกาศตัวแปร Dim I As Byte และ Dim m As Integer ปฏิบัติ Variable 2 1. เปิดฟอร์ม frmGrade 2. ประกาศตัวแปร Dim Grade As String 3. แก้ไขโปรแกรมดังนี Dim Grade As String Select Case txtMark.Value Case Is >= 80 Grade = "A" Case Is >= 70 Grade = "B" Case Is >= 60 Grade = "C" Case Is >= 50 Grade = "D" Case Else Grade = "F" End Select lblGrade.Caption = Grade ปฏิบัติ Variable 3 1. เปิดฟอร์ม frmOpenForm(SelectCase) 2. แก้ไขโปรแกรมดังนี Private Sub cboOpenForm_AfterUpdate() Dim FormName As String Select Case cboOpenForm.ListIndex Case 0 FormName = "frmCustomer" Case 1 FormName = "frmSale"
  26. 26. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 26/41 Case 2 FormName = "frmProduct" Case 3 FormName = "frmOrder" End Select DoCmd.OpenForm FormName End Sub Lifetime: Scope ขอบเขตทีตัวแปรสามารถใช้งานได้ สามารถแบ่ง Scope ออกได้3 ระดับด้วยกันคือ 1. Sub Procedure -> Dim VariableName As type 2. Form -> Dim VariableName As type 3. Database -> Public VariableName As type ปฏิบัติ Lifetime 1 Sub Procedure 1. สร้างฟอร์มใหม่ตังชือฟอร์มว่า frmLifeTimeVariable 2. วาด TextBox และ Command Button อย่างละ 2 ตัว 3. เขียนโปรแกรมดังนี Private Sub Command2_Click() Dim Num1 As Integer Num1 = 100 Text0.Value = Num1 End Sub Private Sub Command5_Click() Num1 = Num1 + 100 Text3.Value = Num1 End Sub
  27. 27. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 27/41 ปฏิบัติ Lifetime 2 Form 1. ใช้ฟอร์ม frmLifeTimeVariable 2. เขียนโปรแกรมดังนี Option Compare Database Option Explicit Dim Num1 As Integer Private Sub Command2_Click() Num1 = 100 Text0.Value = Num1 End Sub Private Sub Command5_Click() Num1 = Num1 + 100 Text3.Value = Num1 End Sub ปฏิบัติ Lifetime 3 Database 1. เลือก Module 2. สร้าง Module ใหม่ Option Compare Database Option Explicit Public num1 As Integer 3. ทดลองนําไปใช้กับ frmLifeTimeVariable ดูนะครับ ทําความเข้าใจอีกมุมหนึงของตัวแปร Standard Variable เช่น Integer, Byte Object Variable เป็นตัวแปรประเภทวัตถุ เช่น เก็บชือตาราง, เก็บชือ Database, เก็บชืออืนๆ ทีไม่ใช่ Standard Procedure Sub Procedure -> เขียนเพือเป็นเหตุการณ์ให้กับวัตถุ Function -> เขียนเพือคํานวณ หรือเป็นผู้ช่วยในการทํางาน (เขียนที Module)
  28. 28. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 28/41 เกียวกับฟังก์ชัน (Module) Function ใช้สําหรับรับค่ามาคํานวณ เมือคํานวณแล้วคืนค่าทีได้จากการคํานวณกลับไป การสร้างฟังก์ชันสามารถทําได้2 วิธีคือ 1. เขียนด้วยตนเอง 2. แทรกเข้ามาใช้งานได้เลย (ไฟล์นามสกุล *.bas) ตัวอย่างการเขียนฟังก์ชัน (Module)1 ต้องการเขียนฟังก์ชันคํานวณอายุโดยตังชือฟังก์ชันว่า HowOld สามารถทําได้ดังขันตอน ต่อไปนี 1. เลือก Module แล้วคลิกปุ่ม New ตังชือว่า mduMyFunction เพือสร้าง Function 2. เขียนฟังก์ชันดังนี Function HowOld(Birthday As Date) As Byte HowOld = Year(Date) - Year(Birthday) End Function ตัวอย่างการเขียนฟังก์ชัน (Module) 2 ต้องการเขียนฟังก์ชันตัดเกรดโดยตังชือฟังก์ชันว่า Grade สามารถทําได้ดังขันตอนต่อไปนี 3. Function Grade (Mark As String) As String 4. คัดลอกโปรแกรมมาจาก frmGrade Function Grade(Mark As String) As String Select Case Mark Case Is >= 80 Grade = "A" Case Is >= 70 Grade = "B" Case Is >= 60 Grade = "C" Case Is >= 50 Grade = "D" Case Else Grade = "F" End Select
  29. 29. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 29/41 End Function การนําฟังก์ชันสําเร็จรูปเข้ามาใน Access 1. คลิกเลือก Module คลิก New 2. เลือกเมนู Insert, File 3. เลือก File of Type: Basic file (*.bas) 4. เลือกฟังก์ชัน (Module) ตามต้องการ ปฏิบัติการนําฟังก์ชันสําเร็จรูปเข้ามาใน Access Insert Module ชือ mduBahtText.bas กับ mduDateThai.bas เข้ามา การเรียกใช้ฟังก์ชันสามารถทําได้ 3 วิธี ด้วยกันคือ 1. เรียกใช้ที Query 2. เรียกใช้ที Properties: Control Source 3. เรียกใช้ที Coding ปฏิบัติการเรียกใช้ฟังก์ชันที Query ต้องการคํานวณหาอายุลูกค้า 1. สร้าง Query ใหม่จากตาราง tblSale ตังชือ QrySale 2. ลาก Field ชือ Sale_Number, Sale_Name, Birthday มาวาง 3. เพิม Field เพือคํานวณอายุ Age: HowOld([Birthday]) 4. ดูผลลัพธ์ ปฏิบัติการเรียกใช้ฟังก์ชันที Control Source1 ต้องการคํานวณด้วยฟังก์ชัน Bahttext 1. เปิดฟอร์มชือ mfrmOrder 2. วาด TextBox เปิด Properties เลือก Control Source 3. พิมพ์=Bahttext([txtTotal]) 4. ดูผลลัพธ์ ปฏิบัติการเรียกใช้ฟังก์ชันที Control Source2 ต้องการคํานวณด้วยฟังก์ชัน DateThai 1. เปิดฟอร์มชือ mfrmOrder 2. วาด TextBox เปิด Properties เลือก Control Source
  30. 30. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 30/41 3. พิมพ์=DateThai([Order_Date]) 4. ดูผลลัพธ์ ปฏิบัติการเรียกใช้ฟังก์ชันที Coding 1. ต้องการใช้ฟังก์ชัน Grade 2. เปิดฟอร์ม frmGrade 3. Comment โปรแกรมทังหมด 4. พิมพ์ lblGrade.Caption = Grade(txtMark.Value) 5. ดูผลลัพธ์ Debug Error Error มี 3 ชนิด 1. Statement Error: ตอนเขียนโปรแกรม (สีแดง) แก้ไขตอนเขียนเลย 2. Runtime Error: ตอนรันโปรแกรม (สีเหลือง) ตอนเขียนไม่มีปัญหา แต่พอนําไปใช้มี ปัญหา เช่น ลืมประกาศตัวแปร 3. Logic Error: ผิดทีคนเขียน (เกียวกับการคํานวณ) การเขียนโปรแกรมดัก Error 1. On Error Resume Next (เขียนไว้บนสุด) 2. On Error Goto Err_Handler (เขียนไว้บนสุด) ....................................................................... Err_Handler: (เขียนไว้ล่างสุด) ปฏิบัติ การเขียนโปรแกรมดัก Error 1. สร้างฟอร์มใหม่ ตังชือว่า frmError 2. วาด TextBox ตังชือว่า txtNum 3. วาด Command Button ตังชือว่า cmdInputNumber 4. ที cmdInputNumber กําหนด Event: On Click แล้ว Coding ดังรูป Private Sub cmdInputNumber_Click() Dim intNum As Integer intNum = InputBox("Please enter number") txtNum.Value = intNum
  31. 31. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 31/41 End Sub 5. Run Program • ทดลองป้อนตัวเลขไม่เกิน 5 หลัก • ทดลองป้อนตัวเลขเกิน 5 หลักโปรแกรมจะ Error OverFlow (6) • ทดลองป้อนตัวอักษรโปรแกรมจะ Error Type misMath (13) 6. แก้Error ด้วย On Error Resume Next (เขียนไว้บนสุด) 7. หรือแก้ Error ด้วย On Error Goto Err_Handler (เขียนไว้บนสุด) ....Err_Handler: (เขียน ไว้ล่างสุด) 8. พิมพ์ MsgBox “Error” ต่อจาก Err_Handler (เพือให้ผู้ใช้ทราบว่า Error) 9. ทดลองป้อนข้อความ (จะขึนกล่องข้อความแจ้งให้ทราบว่า Error) 10. ทดลองป้อนตัวเลข (จะขึนกล่องข้อความแจ้งให้ทราบว่า Error เช่นกัน) ต้องพิมพ์คําสัง Exit Sub ไว้บนบรรทัด Err_Handler: 11. แก้ไขกล่องข้อความในข้อที 8 เป็น MsgBox “Error is” & Err.Description (เพือให้ โปรแกรมแจ้งให้ทราบว่า Error อะไร) 12. หากต้องการให้แจ้ง Error เป็นภาษาไทย ต้องตรวจสอบจากตัวเลขโค้ด โดยพิมพ์ไว้ล่าง บรรทัด Err_Handler: ดังนี If Err.Number = 6 Then MsgBox "ป้อนตัวเลขเกิน" ElseIf Err.Number = 13 Then MsgBox "ป้อนตัวอักษร" End If 13. Run Program 14. Comment ข้อ 12 ทังหมด (เพือตรวจเช็คการแจ้ง Error ต่อไป) 15. แก้ไขกล่องข้อความในข้อที 8 เป็น MsgBox "Error is" & Err.Description & "Do you want to continue" 16. แก้ไขกล่องข้อความในข้อที 15 เป็น MsgBox "Error is" & Err.Description & vbCrLf & "Do you want to continue" 17. แก้ไขกล่องข้อความในข้อที 16 เป็น MsgBox "Error is" & Err.Description & vbCrLf & "Do you want to continue", vbCritical + vbYesNo 18. เขียนโปรแกรมเมือผุ้ใช้ตอบ Yes ให้กลับไปป้ อนข้อมูลใหม่
  32. 32. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 32/41 Dim bytError As Byte bytError = MsgBox("Error is" & Err.Description & vbCrLf & "Do you want to continue", vbCritical + vbYesNo) If bytError = vbYes Then Resume การตรวจสอบช่องว่าง หรือไม่มีการป้ อนข้อมูล ต้องเปลียนชนิดของตัวแปรจาก Integer ไปเป็น String Dim intNum As Integer เป็น Dim intNum Ad String 19. เมือเปลียนตัวแปรเป็น String แล้ว ต้องเพิมบรรทัดนีเข้าไปด้วย เพือตรวจสอบเฉพาะค่าที เป็นตัวเลข (กรองเอาเฉพาะข้อมูลทีเป็นตัวเลข) intNum = Cint (intNum) 20. โปรแกรมทีสมบูรณ์ Private Sub cmdInputNumber_Click() On Error GoTo Err_Handler Dim intNum As String Input_Number: intNum = InputBox("Please enter number") If intNum = "" Then Exit Sub intNum = CInt(intNum) txtNum.Value = intNum Exit Sub Err_Handler: Dim bytError As Byte bytError = MsgBox("Error is" & Err.Description & vbCrLf & "Do you want to continue", vbCritical + vbYesNo) If bytError = vbYes Then Resume Input_Number End Sub
  33. 33. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 33/41 Domain Aggregate Function (Dsum, Dcount, Dmax, Dmin, Davg, Dlookup) รูปแบบ: Dfunction (“FieldName”,”TableName”,[“Condition”]) ปฏิบัติ 1 1. สร้างฟอร์มใหม่ตังชือว่า frmDomain วาด TextBox 2 ตัว 2. ทดลองใช้ฟังก์ชัน Sum กับ Dsum เพือคํานวณหาผลรวมของ Amount ใน QryAmount ปฏิบัติ 2 ใช้ฟังก์ชัน Dlookup เพือนําค่า Cust_Number ไปค้นหา Cust_Name ในตาราง tblCustomer 1. วาด TextBox 2 ตัว ตังชือ txtCust_Number กับ txtCust_Name ตามลําดับ 2. ที txtCust_Number กําหนด Event เป็น After Update แล้ว Coding Private Sub txtCust_Number_AfterUpdate() txtCust_Name.Value = DLookup("Cust_Name", "tblCustomer", _ "Cust_Number=Forms!frmDomain!txtCust_Number") End Sub ปฏิบัติ 3 1. เปิดฟอร์ม mfrmOrder 2. วาด Label 2 ตัว ตังชือว่า lblCust_Name กับ lblCust_Address ตามลําดับ 3. กําหนด Event ของ Cust_Number เป็น After Update แล้ว Coding Private Sub Cust_number_AfterUpdate() lblCust_Name.Caption = DLookup("Cust_Name", "tblCustomer", "Cust_Number = Forms!mfrmOrder!Cust_Number") lblCust_Address.Caption = DLookup("Cust_Address", "tblCustomer", "Cust_Number = Forms!mfrmOrder!Cust_Number") End Sub
  34. 34. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 34/41 4. เขียน Debug ตอนเลือกแล้วไม่มีข้อมูลทีอยู่ (คนทีชือเสนีย์) มาแสดงผล Private Sub Cust_number_AfterUpdate() On Error GoTo Err_Handler lblCust_Name.Caption = DLookup("Cust_Name", "tblCustomer", "Cust_Number = Forms!mfrmOrder!Cust_Number") lblCust_Address.Caption = DLookup("Cust_Address", "tblCustomer", "Cust_Number = Forms!mfrmOrder!Cust_Number") Exit Sub Err_Handler: lblCust_Address.Caption = "" End Sub 5. กําหนด Event ของ Form เป็น On Current Private Sub Form_Current() Call Cust_number_AfterUpdate End Sub 6. กําหนด Event ของ Product_Number เป็น AfterUpdate เพือให้ค่า Price แสดงผลตาม Product_Number ทีเลือก Private Sub Product_number_AfterUpdate() Price.Value = DLookup("Unit_Price", "tblProduct", "Product_Number = Forms!mfrmOrder!sfrmOrderDetail.Form!Product_Number") End Sub
  35. 35. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 35/41 การสร้างปุ่ ม เปิดฟอร์ม frmEmployee 1. สร้างปุ่ม AddRecord ด้วย Wizard เขียนโปรแกรมควบคุมดังนี Private Sub cmdAdd_Click() Dim intEmId As Integer DoCmd.GoToRecord , , acNewRec intEmId = DMax("EmployeeID", "NwindEmployees") EmployeeID.Value = intEmId + 1 LastName.SetFocus End Sub 2. สร้างปุ่ม DeleteRecord ด้วย Wizard เขียนโปรแกรมควบคุมดังนี Private Sub cmdDelete_Click() DoCmd.SetWarnings False Dim bytDelete As Byte bytDelete = MsgBox("Are you sure delete these record?", _ vbCritical + vbYesNo, "Delete record") If bytDelete = vbYes Then DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70 End If End Sub
  36. 36. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 36/41 3. สร้างปุ่ม cmdFindEmID (โดยไม่ต้องใช้ Wizard) เข้าหน้าต่าง VBE) 1. เลือกเมนู Tools, References เลือก DAO (ยกเลิก ADO) 2. เขียนโปรแกรมควบคุมดังนี Private Sub cmdFindEmID_Click() On Error Resume Next Dim rs As Recordset Set rs = Me.RecordsetClone Dim EmID As String EmID = InputBox("Please enter EmployeeID", "Find ID") If EmID = "" Then Exit Sub rs.FindFirst "EmPloyeeID = " & EmID If rs.NoMatch = True Then MsgBox "Find not Found EmployeeID =" & EmID, vbCritical, "Find ID" Else Me.Bookmark = rs.Bookmark End If End Sub Microsoft Database Technology 1. ADO (Microsoft ActiveX Data Objects) for access all type of data. 2. RDO (Remote Data Objects) for ODBC data. 3. DAO (Data Access Objects) for local data (Microsoft Jet Engine Database)
  37. 37. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 37/41 การเชือมต่อฐานข้อมูล (ADO, DAO) 1. สร้างฐานข้อมูลใหม่ 2 ไฟล์ตังชือไฟล์ว่า Db1.mdb กับ Db2.mdb (Db1 = Table, Db2 = Form) 2. เขียนโปรแกรมเชือมต่อฐานข้อมูลดังนี Option Explicit Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub Form_Load() Set cnn = New ADODB.Connection cnn.Open " Provider= Microsoft.jet.OLEDB.4.0 ; " & _ "Data Source=C:AdvAccessDb1.mdb" Set rs = New ADODB.Recordset rs.Open "Sales", cnn, adOpenKeyset, adLockOptimistic txtSaID.Value = rs!Said txtSaName.Value = rs!SaName txtSaAddress.Value = rs!SaAddress End Sub 3. โปรแกรมทีสมบูรณ์ Option Compare Database Option Explicit Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub cmdMvFirst_Click() rs.MoveFirst Call ShowData End Sub
  38. 38. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 38/41 Private Sub cmdMvLast_Click() rs.MoveLast Call ShowData End Sub Private Sub cmdMvNext_Click() rs.MoveNext If rs.EOF = True Then rs.MoveLast Call ShowData End Sub Private Sub cmdMvPrevious_Click() rs.MovePrevious If rs.BOF = True Then rs.MoveFirst Call ShowData End Sub Private Sub Form_Load() Set cnn = New ADODB.Connection cnn.Open " Provider= Microsoft.jet.OLEDB.4.0 ; " & _ "Data Source=C:AdvAccessDb1.mdb" Set rs = New ADODB.Recordset rs.Open "Sales", cnn, adOpenKeyset, adLockOptimistic Call ShowData End Sub Sub ShowData() txtSaID.Value = rs!Said txtSaName.Value = rs!SaName txtSaAddress.Value = rs!SaAddress lblPosition.Caption = "Record: " & rs.AbsolutePosition & "/ " & rs.RecordCount End Sub
  39. 39. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 39/41 เรืองการเปิดฟอร์ม adOpenDynamic = SQL, Oracle ขึนไป adOpenForwordOnly = ไปข้างหน้าอย่างเดียว adOpenKeyset = ทําได้ทุกอย่าง (นิยมใช้งาน) adOpenStatic = เดินหน้าถอยหลังได้แต่ Read Only เรืองการ Lock Record adLockBathOptomistic = SQL, Oracle adLock ReadOnly = อ่านอย่างเดียว adLockOptimistic = วิธีใหม่ทําให้ Lock ได้เร็วขึน adLock Pessimistic =เป็นการ Lock วิธีเดิม (ทํางานช้า)
  40. 40. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 40/41 การสร้าง ToolBar, MenuBar การสร้าง ToolBar 1. สร้าง ToolBar ตังชือว่า My ToolBar โดยเลือกเมนู Tools, Customize เลือก บัตรรายการ Toolbars 2. เลือกบัตรรายการ Commands เพือเลือกปุ่มเครืองมือทีต้องการ การสร้าง MenuBar 1. สร้าง Menu Bar ตังชือว่า My Menu โดยเลือกเมนู Tools, Customize เลือกบัตรรายการ Toolbars 2. คลิกปุ่ม Properties กําหนด Type: Menu Bar 3. เลือกบัตรรายการ Commands เลือก Category: New Menu แล้วลากไปวางบน MyMenu การนํา ToolBar และ MenuBar ไปกําหนดให้กับฟอร์ม 1. เปิดฟอร์มทีต้องการ 2. เลือกฟอร์ม 3. กําหนด Properties ให้กับฟอร์มดังนี • Menu Bar: My Menu • Tool Bar: My ToolBar การสร้าง Start Up Form 1. เลือกเมนู Tools, Startup…
  41. 41. แบ่งปัน แนวทางการใช้งาน Macro & VBA บน Access 2003: สมเกียรติ ช่วยมาก หน้าที 41/41 การกําหนด Security 1. เลือกเมนู Tools, Security, User Level Security Wizard 2. เลือก Create a new workgroup information file. 3. เลือก I want to Create a shortcut to Open my secured database 4. เลือก Object ทีต้องการสร้างระบบความปลอดภัย 5. กําหนดกลุ่ม ผู้ใช้ทีต้องการ • Backup Operators (สํารองข้อมูล) • Full Data User (แก้ไขข้อมูลได้ทุกอย่าง แต่กําหนดสิทธิไม่ได้) • Full Permission (ทําได้ทุกอย่าง) • New Data User (เพิมผู้ใช้งานได้) • Project Designer (เขียนโปรแกรมได้) • Read Only User (อ่านอย่างเดียว) • Update Data User (แก้ไขข้อมูลผู้ใช้ได้) 6. เลือก No, the Users Group should not have any permissions 7. กําหนดชือผู้ใช้งาน และรหัสผ่าน 8. กําหนดชือผู้ใช้งานในข้อ 7. ให้อยู่ในกลุ่มทีต้องการ 9. ขันตอนสุดท้ายจะมีรายงานแจ้งให้ทราบเกียวกับรายละเอียดทังหมด ตังแต่ในข้อที 1-8

×