41
แบ่งปัน แนวทางการใช้งาน 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 = ปล่อย

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

แบงปน แนวทางการใชงาน 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 ทKงหมด) Action แบงเปน 2 ประเภท คอ

1. Action ท�ไมตองการสวนขยาย เชน Show AllRecord 2. Action ท�ตองการสวนขยาย เชน Close

แนวคดการสราง Macro สรางได 2 วธ

1. Macro ท�ไมม Macro ยอย (เอาขอความท�ปมไปตKงช�อใน Macro Name) 2. Macro ท�ม Macro ยอย (การตKงช�อ Macro หลกใหตKงช�อตามช�อฟอรมนKนๆ)

หลกการสรางและใชงาน Macro

1. ตองทราบวา Macro ตวไหนใชกบวตถตวไหน 2. ตองทราบ Event

Event ตางๆ ท3ควรทราบ

• 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 = ปลอย

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

แบงปน แนวทางการใชงาน 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 มาสรางฟอรมตKงช�อวา 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 ใหมตKงช�อวา macClose

• Action = Close

• Save = Promt 7. ท�ปม Close กาหนด Event: On Click = macClose 8. วาดฟอรมจากตารางท�เหลอทKงหมด (ทาตามขKนตอนท� 1 – 7)

ปฏบต สราง MainForm/SubForm (การสรางจะตองมฟลดท�ลงกกน)

1. สราง Mainform จากตาราง tblOrder ตKงช�อวา mfrmOrder 2. สราง Subform (Wizard) จากตาราง tblOrder ตKงช�อวา sfrmOrderDetail

• เปล�ยน DefaultView: Continuous Form

• เปล�ยนมมมอง นา Label ไปวางไวบน Form Header

• เพ�ม Label ตKงช�อ Amount เพ�อนา Item มาคณ Price

• เพ�ม TextBox กาหนด Property: Control Source = Item * Price

• ท� Form Footer เพ�ม TextBox ตKงช�อวา Total กาหนด Property: Control Source = Sum(Item * Price)

*** #Name (อางองช�อผด), #Error (ใสสตรผด)

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 3/41

ปฏบต สรางฟอรมเมนตKงช�อวา 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 ดงนK

OnTimer macWelcome Time Interval 5000

ปฏบต สราง Macro เพ�อกาหนดใหฟอรมเปดขKนเองอตโนมต

1. สราง Macro ใหมตKงช�อวา Autoexec Action FormName OpenForm frmWelcome

2. นา Macro ไปกาหนดท�ฟอรม frmWelcome

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

แบงปน แนวทางการใชงาน 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. การคนหาขอมลครK งละ 1 Record 2. การคนหาขอมลครK งละหลาย Record (Apply Filter)

ปฏบตการคนหาขอมลครK งละ 1 Record

1. สรางฟอรมจากตาราง NwindEmployees ตKงช�อฟอรมวา frmEmployee 2. ท� Form Header วาด TextBox ตKงช�อ Label: FindID, TextBox:txtFindID 3. สราง Macro ช�อ macEmployee แลวสราง Macro ยอยดงนK

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

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

แบงปน แนวทางการใชงาน 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 ขอจากดของการคนขอมลครK งละ 1 Record

1. Find Next ไมทราบวาจะจบเม�อไหร 2. Find Record เหนทละ Record 3. *** ถาตองการคนหาขอมลครK งละหลายๆ Record ตองใช Action ท�ช�อ Apply Filter

ข5นตอนการคนหาขอมลคร5งละหลายๆ Record

1. สราง Query กอน 2. นา Query ท�ไดไปสรางฟอรม 3. วาด Combobox เพ�อเลอกดขอมล 4. สราง Macro 5. กาหนด Event: After Update ท� ComboBox

ปฏบตการคนหาขอมลครK งละหลายๆ Record (Apply Filter) 1. สราง Query โดยเลอกตารางทKงหมดยกเวน Nwind 2. ตKงช�อ Query วา qryAmount โดยเลอกฟลดตางๆ ดงนK 3. Cust_Number, Cust_Name, Order_Date, Product_Number, Product_Name, Item, Price 4. นา qryAmount ไปสรางฟอรมดงขKนตอนตอไปนK 5. สรางฟอรมใหมกาหนดรปแบบเปน AutoForm: Tabbular ตKงช�อฟอรมวา frmAmount 6. ท� FormFooter วาด TextBox เพ�อสรางเปนตวนบจานวณ Record วามก�รายการ โดยพมพ

สตรท� ControlSource ดงนK =” จานวนขอมลทKงสKน” & Count (Cust_Number) & “รายการ”

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 6/41

7. ท� FormFooter วาด ComboBox มาวาดเพ�อเลอกด Customer กาหนด Property ดงนK

• 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 ดงนK (เสรจแลวนาไป

กาหนดเหตการณ After Update ท� cboCustomer) Macro Name Action Argument Find Amount Applyfilter Where condition:Cust_Number=Forms!frmAmount!cboCustomer

9. สรางปม All เพ�อแสดง Record ทKงหมด จากนKนสราง Macro ยอยช�อ AllRecord กาหนด Action: ShowAllrecord

10. สรางปม SortAmount กบปม SortOrderDate และปม Calculator โดยกาหนด Macro ดงนK Macro Name Action Argument SortAmount GotoControl Amount RunCommand SortAscending SortOrderDate GotoControl Order_Date RunCommand SortDescending Calculator RunApp c:\winnt\system32\calc.exe สรปหวขอน5

• Event TextBox = After Update

• Event ComboBox = After Update, Click

• RunCommand = Run Menu หรอ ToolBar

• RunApp = Run โปรแกรมอ�น (มขอแมวาตองไป Run file.exe เทานKน)

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 7/41

การสรางฟอรมแบบ ListBox (แนวคดตารางทKง 2 ตารางตองมฟลดท�เหมอนกน) ปฏบตการสรางฟอรม ListBox

ตองการสรางรายการ Sale และ Customer โดยมเง�อนไขวาเวลาเลอก Sale ตองใหปรากฏ Customer ของ Sale นKนๆ

1. สรางฟอรมใหมตKงช�อ frmListBox 2. วาด ListBox ตวแรกตKงช�อ Label: Sale แลวกาหนด Property ดงนK (เสรจแลวสงเกตผล)

• Name:lstSasle

• RowSource: tblSale

• Column Count: 2

• Column Width: 1cm; 1.5cm

• Bound Column: 1 3. วาด ListBox ตวท� 2 ตKงช�อ Label: Customer แลวกาหนด Property ดงนK (เสรจแลวสงเกต

ผล)

• Name:lstCustomer

• RowSource: tblCustomer

• คลกท� ... แลวกาหนดคาดงรป (เสรจแลว Run ดสครบวาเกดปญหาอะไรขKนบาง)

• Column Count: 3

• Column Width: 1cm; 1cm; 1.5cm

• Bound Column: 2 4. ทดลอง Run Form สงเกตผล (จะตองเปด/ปดฟอรม รหสจงจะตรงกน จะตองแกไขดวย

Macro) 5. สราง Macro หลกตKงช�อวา macListBox เม�อสรางเสรจแลวนาไปกาหนดเหตการณ On

Click ใหกบ lstSale MacroName Action Argument UpdateCustomer Requery ControlName: lstCustomer

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 8/41

6. วาด ListBox ตวท� 3 ตKงช�อ Label: Order แลวกาหนด Property ดงนK (เสรจแลวสงเกตผล)

• 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 9/41

การสรางฟอรมแบบ Option Group ตองการสรางฟอรมจากตาราง NwindCustomer โดยตองการดกลมลกคาเปนกลมดงนK คอ

A-E, F-J, K-O, P-T, U-Z, All สามารถทาไดดงนK ครบ 1. สรางฟอรมจากตาราง NwindCustomer ตKงช�อวา 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: เลอกใหโปรแกรมบนทกคานK ไว

• Step5: เลอกรปแบบปม

• Step6: ตKงช�อวา 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 ไปตKงช�อ Macro

ยอย) MacroName Action Argument {F10} Quit ^m OpenForm frmMenu ^+P OpenReport rptOrder

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

แบงปน แนวทางการใชงาน 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. ดงนKนระบบงานจรงๆ เราควรใช Coding หรอแปลง Macro เปน Coding โดย Coding จะ

เกบท� Module (เวลาใชงานกบฟอรมตอง Copy หรอ Move ไปท�ฟอรมนKนๆ และตองทราบดวยวาจะนาไปใชกบ Object ตวไหน และจะใชใน Event ไหน)

6. Module ไวเขยนฟงกชนการใชงาน

Macro 3 ชนดท3 Coding ทาไมได

1. Autoexec 2. Autokeys 3. Menubar

ข5นตอนการแปลง Macro เปน Coding (Module)

1. คลกขวาท� Macro เลอก Save As

• As: Module

• Add error Handler…ใหโปรแกรมเขยนแก Error ใหอตโนมต

• Include macro Comment … ใหโปรแกรมเขยน Comment ใหอตโนมต 2. ปรากฏ Coding ในหนาตาง VBA

สตางๆ ใน Coding

• สเขยว = Comment (โปรแกรมไมอาน)

• สนK าเงน = Keyword Text (โปรแกรม)

• สดา = ไมใชคาสงวน (โปรแกรมอาน)

• สแดง = Syntax Error Text (โปรแกรมอาน)

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

แบงปน แนวทางการใชงาน 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 สามารถเปดดตารางได เพราะฉะนKนเราตองสรางความปลอดภยในลกษณะไฟล 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)

• กนพKนท� 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 ครK งท�1 7. ลบ Module macClose 8. ทดลอง Run Programe ครK งท�2

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 12/41

9. คดลอกคาส�งจาก macMenu ไปยงฟอรม frmMenu (ทาลกษณะเดยวกบขอ 2 – 8 เพ�มเตมใหตKงช�อปมดวยครบ)

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 โดยมหลกการดงนK 1. Object.Property = Value 2. Object.Method ใหตามดวยเคาะวรรค อาจจะม Argument หรอ ไมม Argument กได

หลกการต5งช3อ Object 1. ตKงใหส�อความหมาย 2. ใชภาษาองกฤษ 3. หามเกน 255 ตวอกษร 4. หามขKนตนดวยตวเลข 5. หามซKากน 6. ควรใส Prefix นาหนาช�อ Object ดวยเพ�อบอกใหทราบถงชนดของ Object

เปรยบเทยบความหมายของคาใน Access กบ VBA

1. Action ใน Access = Method ใน VBA 2. ac คอคาคงท�ใน Access = vb คาคงท�ใน VBA 3. Cm คอหนวยวดใน Access = TWIP คอหนวยวดใน VBA

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 13/41

4. Yes, No ใชใน Access = True, False ใชใน VBA 5. ลาดบท� 1 ใน Access = ลาดบท� 0 ใน VBA (ComboBox, ListBox)

ปฏบตทดสอบการเขยนโปรแกรม 1 1. สรางฟอรมใหมตKงช�อวา frmTestVBA1 2. วาด TextBox ตKงช�อวา txtTest 3. วาด Command Button ตKงช�อวา cmdTest และตKงช�อ Caption วา Text กาหนด Event:

Onclick แลวเขยน Coding ดงนK (เปรยบเทยบกบ 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 ตKงช�อวา Text1 2. วาด Command Button ตKงช�อวา cmdFocusText1 และตKงช�อ Caption วา Focus Text1

กาหนด Event: Onclick แลวเขยน Coding ดงนK Private Sub cmdFocusText1_Click()

Text1.SetFocus

End Sub ปฏบตทดสอบการเขยนโปรแกรม 3

1. วาด Command Button ตKงช�อวา cmdClose และตKงช�อ Caption วา Close กาหนด Event: Onclick แลวเขยน Coding ดงนK

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 14/41

Private Sub cmdClose_Click() DoCmd.Close , , acSaveYes

End Sub

ปฏบตทดสอบการเขยนโปรแกรม 4 1. วาด Command Button ตKงช�อวา cmdExitProgram และตKงช�อ Caption วา Exit Program

กาหนด Event: Onclick แลวเขยน Coding ดงนK Private Sub cmdExitProgram_Click() DoCmd.Quit acQuitSaveAll End Sub

ปฏบตทดสอบการเขยนโปรแกรม 5 1. วาด Command Button ตKงช�อวา cmdOpenEmployee และตKงช�อ Caption วา Open

Employee กาหนด Event: Onclick แลวเขยน Coding ดงนK Private Sub cmdOpenEmployee_Click()

DoCmd.OpenForm "frmEmployee"

End Sub ปฏบตทดสอบการเขยนโปรแกรม 6

1. เปดฟอรม mfrmOrder 2. กาหนด Event: OnClick ท� cmdOpenCustomer (…) แบบมเง�อนไขดงนK

Private Sub cmdOpenCustomer_Click() DoCmd.OpenForm "frmCustomer", , , _

"Cust_number= !mfemOrder!Cust_number", , acDialog

End Sub

*** การขKนบรรทดใหมใหเคาะ 1 เคาะแลวตามดวยเคร�องหมาย_ แลว Enter *** ไมสามารถแยกหรอขKนบรรทดระหวางภายในเคร�องหมายคาพดได

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 15/41

Statement in VBA

(คาส3งท3เสรมความสามารถใหกบ 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. ชวยใหไมตองพมพช�อวตถซK า 2. ทาใหโปรแกรมทางานไดเรวขKน

ปฏบต With … End With 1. เปดฟอรม frmTestVBA1 2. เปล�ยนแปลง Coding ดงนK

With txtTest

.BackColor = 255 'Red

.ForeColor = vbYellow '

.ControlTipText = "My Test"

.TextAlign = 2 ' Center

.Width = 2880 '5cm

.Value = "Access"

End With

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

แบงปน แนวทางการใชงาน 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 ตKงช�อฟอรมวา

frmPageBreak(IF) โดยใช Control PagePreak มาเปนตวแบงหนาเปน 2 หนา 1. กาหนด Form Header/Footer 2. สรางปมท� Form Footer ตKงช�อปมวา cmdGotoPage ตKงช�อ Caption วา Goto Page2 3. เขยนโปรแกรม Event: On Click ท� cmdGotoPage ดงนK

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

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

แบงปน แนวทางการใชงาน 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(นอกนKนใหเปน...) Else elseStatements Commis = 0 End If End If

ปฏบต

1. สรางฟอรมใหมตKงช�อ frmGrade 2. ตองการตดเกรดโดยสราง TextBox ช�อ txtMark และสราง Label ช�อ lblGrade 3. กาหนด Event: After Update ใหกบ txtMark และเขยนโปรแกรมดงนK 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 18/41

Select…End Select

• คลายกบ IF

• ชวยใหพมพโปรแกรมไดสKนลง

• จดตางกบ 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 ดงนK

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

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

แบงปน แนวทางการใชงาน 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 ดงนK

• Name: cboOpenForm

• Row Source Type: Value List

• Row Source: Customer; Sale; Product; Order 3. กาหนด Event: After Update แลวเขยนโปรแกรมดงนK

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. สรางฟอรมใหมตKงช�อ frmFrameVBA(Select) 2. วาด Frame ตKงช�อ fraProduct

• วาด Option Button 4 ตว ตKงช�อวา None, Computer, Printer, Calculator ตามลาดบ 3. วาด Image ตKงช�อ imgProduct

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 20/41

4. กาหนด Event ของ fraProduct เปน On Click แลวเขยนโปรแกรมดงนK Private Sub fraProduct_Click() Select Case fraProduct.Value Case 1 imgProduct.Picture = "" Case 2 imgProduct.Picture = "C:\AdvAccess\AdvAccess-original\Computer.WMF" Case 3 imgProduct.Picture = "C:\AdvAccess\AdvAccess-original\Printer.WMF" Case 4 imgProduct.Picture = "C:\AdvAccess\AdvAccess-original\Calculator.WMF" End Select End Sub สรป

1. เวลาพมพ Case อยาลมเคาะ 1 เคาะกอนพมพคา 2. Frame ใช . Value (1-n) 3. ComboBox, ListBox ใช .List Index (0-n)

Do…Loop

การทาซKาตามเง�อนไขท�กาหนด เขยนได 2 แบบคอ

1. Do {While | Until} condition

Statements

Exit Do

Statements

Loop

2. Do Statements Exit Do Statements

Loop {While | Until} condition

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

แบงปน แนวทางการใชงาน 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. สรางฟอรมใหมตKงช�อ frmLoop 2. วาด Command Button ตKงช�อวา cmdInputName 3. วาด Label ตKงช�อวา lblName

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 22/41

4. กาหนด Event: On Click ท� cmdInputName แลวเขยนโปรแกรมดงนK

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 เทานKน 5. Step คอการเพ�มคาครK งละเทาไหรสวนใหญจะเปนครK งละ 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 23/41

ปฏบต For…Next วาดปม Command Button 1 ปม ตองการหาผลรวมของตวเลขจาก 1 ถง 10 สามารถเขยน

โปรแกรมไดดงนK Private Sub Command2_Click()

For i = 1 To 10

m = m + i

Next i

MsgBox "Sum 1 To 10 =" & m

End Sub

ตวแปร (Variable)

• ตวแปรทาหนาท�เกบคา, พกคา

• ตวแปรจะหายไปเม�อปดฟอรม การใชตวแปร ใหนกถงปจจย 3 ขอน5

• Name: ช�อของตวแปร

• Type: ชนดของตวแปร

• Lifetime: Scope ท�ตวแปรสามารถใชงานได

Name: ช3อของตวแปร

กฎในการตKงช�อตวแปร Name � ตองไมเกน 255 ตวอกษร � ตองขKนตนดวยตวอกษร เชน A-Z, a-z

� ขอใหตวแรกเปนตวหนงสอเชน A1 ได แต 1A ไมได � ตองไมซK ากบช�อท�มอยแลวและไมซKากบคาสงวน

Type: ชนดของตวแปร

ตองบอกวาเปนประเภทไหน ถาไมบอกตวแปรนKนจะใหญมาก � ตวท�เกบเลขจานวนเตม

1. Byte นอย เชน เกบอาย 2. Integer ปานกลาง

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 24/41

3. Long มาก

� ตวท�เกบเลขจานวนเตมและทศนยม 1. Single ทศนยมไมเกน 7 หลก 2. Double ทศนยม 15 หลก 3. Currency ทศนยม 12 หลก

� String เกบตวอกษรและเกบตวเลขท�ไมนาไปคานวณ � Boolean เกบคา จรง/เทจ � Date เกบวนท� � Variant ถาไมกาหนดวาเปนตวแปรชนดไหนโปรแกรมจะใหเปนชนด

Variant อตโนมต ซ� งจะทาใหเปลองพKนท�อยางต�า 16 Byte (เพราะฉะนKนในการกาหนดตวแปรแตละครK งเราจะตองบอกดวยวาตวแปรตวนKนเปนชนดอะไร)

รปแบบการประกาศตวแปร

Dim VariableName As type เชน

� Dim temp As Integer � Dim temp% (% = Integer) � Dim win (win=variant) � Dim intTemp As Integer � Dim strName As String � เวลาตKงช�อตวแปรแนะนาใหตKงช�อยอชนดของตวแปรดวย � พมพ Option Explicit ไวบนสด เพ�อบงคบใหตองประกาศตวแปรกอนนาไปใชงาน

เสมอ

ปฏบต Variable 1

1. เปดฟอรม frmLoop 2. พมพ Option Explicit บนบรรทด Private Sub cmdInputName_Click() 3. ทดลอง Run Program โดยคลกท�ปม Input Number 4. แก Error โดยประกาศตวแปร Dim CuName As String

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

แบงปน แนวทางการใชงาน 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. แกไขโปรแกรมดงนt

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. แกไขโปรแกรมดงนK

Private Sub cboOpenForm_AfterUpdate() Dim FormName As String

Select Case cboOpenForm.ListIndex Case 0

FormName = "frmCustomer" Case 1

FormName = "frmSale"

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

แบงปน แนวทางการใชงาน 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. สรางฟอรมใหมตKงช�อฟอรมวา frmLifeTimeVariable 2. วาด TextBox และ Command Button อยางละ 2 ตว 3. เขยนโปรแกรมดงนK

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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 27/41

ปฏบต Lifetime 2 Form 1. ใชฟอรม frmLifeTimeVariable 2. เขยนโปรแกรมดงนK

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 ดนะครบ

ทาความเขาใจอกมมหน3งของตวแปร

� Standard Variable เชน Integer, Byte � Object Variable เปนตวแปรประเภทวตถ เชน เกบช�อตาราง, เกบช�อ Database,

เกบช�ออ�นๆ ท�ไมใช Standard Procedure

� Sub Procedure -> เขยนเพ�อเปนเหตการณใหกบวตถ � Function -> เขยนเพ�อคานวณ หรอเปนผชวยในการทางาน (เขยนท� Module)

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 28/41

เก3ยวกบฟงกชน (Module)

Function ใชสาหรบรบคามาคานวณ เม�อคานวณแลวคนคาท�ไดจากการคานวณกลบไป การสรางฟงกชนสามารถทาได 2 วธคอ

1. เขยนดวยตนเอง 2. แทรกเขามาใชงานไดเลย (ไฟลนามสกล *.bas)

ตวอยางการเขยนฟงกชน (Module)1

ตองการเขยนฟงกชนคานวณอายโดยตKงช�อฟงกชนวา HowOld สามารถทาไดดงขKนตอนตอไปนK

1. เลอก Module แลวคลกปม New ตKงช�อวา mduMyFunction เพ�อสราง Function 2. เขยนฟงกชนดงนK

Function HowOld(Birthday As Date) As Byte HowOld = Year(Date) - Year(Birthday) End Function

ตวอยางการเขยนฟงกชน (Module) 2

ตองการเขยนฟงกชนตดเกรดโดยตKงช�อฟงกชนวา Grade สามารถทาไดดงขKนตอนตอไปนK 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

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

แบงปน แนวทางการใชงาน 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 ตKงช�อ 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 30/41

3. พมพ =DateThai([Order_Date]) 4. ดผลลพธ

ปฏบตการเรยกใชฟงกชนท� Coding

1. ตองการใชฟงกชน Grade 2. เปดฟอรม frmGrade 3. Comment โปรแกรมทKงหมด 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. สรางฟอรมใหม ตKงช�อวา frmError 2. วาด TextBox ตKงช�อวา txtNum 3. วาด Command Button ตKงช�อวา cmdInputNumber 4. ท� cmdInputNumber กาหนด Event: On Click แลว Coding ดงรป

Private Sub cmdInputNumber_Click()

Dim intNum As Integer

intNum = InputBox("Please enter number")

txtNum.Value = intNum

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

แบงปน แนวทางการใชงาน 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. ทดลองปอนขอความ (จะขKนกลองขอความแจงใหทราบวา Error) 10. ทดลองปอนตวเลข (จะขKนกลองขอความแจงใหทราบวา Error เชนกน) ตองพมพคาส�ง

Exit Sub ไวบนบรรทด Err_Handler: 11. แกไขกลองขอความในขอท� 8 เปน MsgBox “Error is” & Err.Description (เพ�อให

โปรแกรมแจงใหทราบวา Error อะไร) 12. หากตองการใหแจง Error เปนภาษาไทย ตองตรวจสอบจากตวเลขโคด โดยพมพไวลาง

บรรทด Err_Handler: ดงนK If Err.Number = 6 Then

MsgBox "ปอนตวเลขเกน"

ElseIf Err.Number = 13 Then

MsgBox "ปอนตวอกษร"

End If

13. Run Program 14. Comment ขอ 12 ทKงหมด (เพ�อตรวจเชคการแจง 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 ใหกลบไปปอนขอมลใหม

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

แบงปน แนวทางการใชงาน 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 แลว ตองเพ�มบรรทดนK เขาไปดวย เพ�อตรวจสอบเฉพาะคาท�เปนตวเลข (กรองเอาเฉพาะขอมลท�เปนตวเลข) 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 33/41

Domain Aggregate Function (Dsum, Dcount, Dmax, Dmin, Davg, Dlookup)

รปแบบ: Dfunction (“FieldName”,”TableName”,[“Condition”])

ปฏบต 1 1. สรางฟอรมใหมตKงช�อวา frmDomain วาด TextBox 2 ตว 2. ทดลองใชฟงกชน Sum กบ Dsum เพ�อคานวณหาผลรวมของ Amount ใน QryAmount

ปฏบต 2 ใชฟงกชน Dlookup เพ�อนาคา Cust_Number ไปคนหา Cust_Name ในตาราง tblCustomer

1. วาด TextBox 2 ตว ตKงช�อ 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 ตว ตKงช�อวา 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

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

แบงปน แนวทางการใชงาน 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 35/41

การสรางปม เปดฟอรม frmEmployee

1. สรางปม AddRecord ดวย Wizard เขยนโปรแกรมควบคมดงนK 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 เขยนโปรแกรมควบคมดงนK 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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 36/41

3. สรางปม cmdFindEmID (โดยไมตองใช Wizard) เขาหนาตาง VBE) 1. เลอกเมน Tools, References เลอก DAO (ยกเลก ADO) 2. เขยนโปรแกรมควบคมดงนK 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)

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 37/41

การเช3อมตอฐานขอมล (ADO, DAO)

1. สรางฐานขอมลใหม 2 ไฟล ตKงช�อไฟลวา Db1.mdb กบ Db2.mdb (Db1 = Table, Db2 = Form)

2. เขยนโปรแกรมเช�อมตอฐานขอมลดงนK 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:\AdvAccess\Db1.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

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

แบงปน แนวทางการใชงาน 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:\AdvAccess\Db1.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

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 39/41

เร�องการเปดฟอรม adOpenDynamic = SQL, Oracle ขKนไป adOpenForwordOnly = ไปขางหนาอยางเดยว adOpenKeyset = ทาไดทกอยาง (นยมใชงาน) adOpenStatic = เดนหนาถอยหลงได แต Read Only เร�องการ Lock Record adLockBathOptomistic = SQL, Oracle adLock ReadOnly = อานอยางเดยว adLockOptimistic = วธใหมทาให Lock ไดเรวขKน adLock Pessimistic =เปนการ Lock วธเดม (ทางานชา)

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

แบงปน แนวทางการใชงาน Macro & VBA บน Access 2003: สมเกยรต ชวยมาก หนาท( 40/41

การสราง ToolBar, MenuBar

การสราง ToolBar 1. สราง ToolBar ตKงช�อวา My ToolBar โดยเลอกเมน Tools, Customize เลอก

บตรรายการ Toolbars 2. เลอกบตรรายการ Commands เพ�อเลอกปมเคร�องมอท�ตองการ การสราง MenuBar 1. สราง Menu Bar ตKงช�อวา My Menu โดยเลอกเมน Tools, Customize เลอกบตรรายการ

Toolbars 2. คลกปม Properties กาหนด Type: Menu Bar 3. เลอกบตรรายการ Commands เลอก Category: New Menu แลวลากไปวางบน

MyMenu การนา ToolBar และ MenuBar ไปกาหนดใหกบฟอรม 1. เปดฟอรมท�ตองการ 2. เลอกฟอรม 3. กาหนด Properties ใหกบฟอรมดงนK

• Menu Bar: My Menu

• Tool Bar: My ToolBar การสราง Start Up Form 1. เลอกเมน Tools, Startup…

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

แบงปน แนวทางการใชงาน 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. ขKนตอนสดทายจะมรายงานแจงใหทราบเก�ยวกบรายละเอยดทKงหมด ตKงแตในขอท� 1-8