You are on page 1of 492
PHAN TU HUGNG Lap Trinh (Visual Basic for Applications) (In tai ban) NHA XUAT BAN THONG KE HA NOI, nam 2009 LOI NOI DAU Hién nay, phn mém Excel da tro nén than thude déi voi nhiing ngw thong xuyén lam viée véi bang tinh va biéu do. Khé néing tinh todn, phan tich va wit ly dit liéu tuyét voi ca phan mém Excel c6 thé gitip ching ta gidi quyét duoc nhiéu loai céng viée khéc nhau. Bai cb nhiéu stich tiéng Viet hudng dan ste dung phan mém Excel tir co ban dén nang cao, ting dung tir nginh kF thudt dén linh vive kinh té. Tuy nhién, phén lon sach a6 chi huéng dén khai théc cdc céng cu va chite nang sén c6 trong phan mém Excel, Voi doi hoi cita cong viee ngay cang cao thi viee stt dung céng cu va chite nang san cé trong phan mém Excel nhiéu khi rat khé khan hode khéng thé dap ting duge. May man thay, Microsoft dé hé tre ngén ngit lap winh Visual Basic for Applications (goi tat la VBA) tich hop trong phan mém Excel (cing voi cdc phan mém khac trong goi Office). La ngén ngit lap trinh Visual Basic (VB) phat trién trong ting dung, VBA da gitip phan mém Excel cé kha nang tuy bién cao, vot ra khoi gibi han bang tinh thong thong. Sit dung VBA cting voi céc céng cu san cé trong phan mém Excel gitip ching ta co thé gidi quyét doe nhiéu bai todn phite tap voi khé nang tw déng héa cao, sin phdm c6 thé trong duong vi céc phan mém chuyén dung. Ngon ngit VBA rét gdn giti voi VB, trong khi dé VB la ngén ngit duve str dung pho bién & Viet Nam cing nhu todn thé gidi vi dé sit dung va ngudn sdch va, tdi liéu phong phi. Mét sd trwong dai hoc trén thé gidi da dua VBA vdo gidng day chinh thitc. Con tai Viet Nam, nhiéu ngwoi cing rat quan tam dén ngén ngit nay, daic biét la nhitng ngudi lam viée trong linh vuc dia chat, khai thic mo, xdy dung, giao thong, thuy loi, tai chinh, ké todn, kinh té,... Hién nay, Truong Pai hoc Mo Bia chat, Tredng Dai hoc Giao théng vn téi, Truong Dai hoc Xay dyng da dia ngén ngit VBA vao gidng day trong mot sé chuyén nganh. Hon nita, khi nam duge VBA trong Excel, ban cé thé dé dang nam bit VBA trong AutoCad, day la mot phan mém chuyén vé linh vue dé hog rat néi tiéng thudng duge sir dung trong cde ngdnh kF thudt. Tuy nhién, sach huwéng dan stv dung VBA bang tiéng Vier thi rat hiém hode chi duge dé cép rat han ché trong cdc tai lieu c6 lién quan Vi vay, cudn sdch nay hy vong dap tmg mét phan nhu cau cia nhiing ai quan idm dén ngén ngit VBA noi chung va ting dung trong Excel néi riéng 3 Trong lan tai ban nay, cudn séch dé duge sita aéi, bb sung cho phi hop vd dé hiéu hon. Mét.sé doan code dugc trinh bay lai cho hop ly: nhém gitip ban doc dé ding tiép can hon voi ctta sé kim vige cia VBA Toi xin cém on cée thanh vién trong dién dan www giaiphapexcel.com va dic biét la Ban quan tri da gép ¥, cung cap nhiéu kién thite cing nh ede san phdm ting dung ctta VBA dé cudn sich duoc hodn thién. Téi ciing xin giti Ioicdmon dén cde anh Lé Van Duyét (Ci ‘ng ty TNHH Dunlopillo - TPHé Chi Minh), Nguyé én Duy Tuan (Trrong Pai hoc Cong nghiép Ha Néi), Dao Viet Cudng (Cong 0» Co phan Du lich va Thuong mai Vinpearl ~ Nha Trang), Nguyén Van Son (Cong ty Cé phdn Nay dung bat cing - Hai Phong)... da tan tinh gitip dé t6i hodn thanh cudn séch nay, Tée gid MUC LUC Chwong t: GIG! THIEU VE VISUAL BASIC FOR APPLICATIONS Chuong 2: GHI VA THUC HIEN MACRO 2.1- Tao macro bang chire nang Recorder Macro 2.2- Thue hién macro khi sir dung bang diéu khién macro 2.3- Thue hién macro khi sir dung phim tit (shortcut key) 2.4- Tam dimg khi thyc hign macro Chuong 3: CACH THUC HIEN MOT MACRO DON GIAN 3.1- Thue hién macro tir m6t déi wrong trong worksheet 3.2- Thue hién macro tir nit lénh trong thanh cong cu 3.3- Thuc hién macro ttr thanh menu 3.4- Thay déi Iya chon trong macro Chong 4: CUA SO VISUAL BASIC EDITOR (VBE) 4.1- Cau trite ctra sé VBE 4.2- Cita s6 soan thao code (Code window) 4,3- Cita 36 Immediate 4.4- Higu chinh trong VBE 4.4.1- Thay ddi tén ctia tht tuc 4.4.2- Stra dOi ma 1énb trong thi tuc 4.4,3- Tao thém Module trong cia sé VBE 4.4.4- Gd bo module Chuong 5: LAM VIEC VOI FILE EXCEL CO CHUA MACRO 5.1+ Sir dung chite nang Security 5.2- Str dung cdc chong trinh diét virus 5 Chuong 6: UU, NHU'O'C DIEM CUA CHUC NANG TU GHIMACRO 6.1-Uu diém cita chtte néing tr ghi macro 6.2- Nhuge diém cia chite nang ty ghi macro Chuong 7: NGON NGU VISUAL BASIC FOR APPLICATIONS 7.1- Cac déi tong (Objects) 7.2- Cac phuong thire (Methods) 7.3- Cac thudc tinh (Properties) Chuong 8: MOT SO DOI TUGNG CO BAN TRONG EXCEL 8.1- Déi tugng Application 8.1.1- Thudc tinh Calculation 1.2- Thude tinh ScreenUpdating 8.1.3- Thude tinh DisplayAlerts 8.2- Déi tuong Window 8.3- Déi tuong Workbook 8.4- Doi tong Worksheet 8.4.1- Xac dinh ac théng tin trong Worksheet 8.4.2- Nhdp dit ligu vio trong Worksheet 8.4.3- Diéu khién Worksheet 8.5- Doi tugng 6 (cell) va khdi 6 (range) 8.5.1- Thude tinh Range 8.5.2- Thudc tinh Selection 8.5.3- Thudc tinh Cells 8.5.4- Thude tinh Offset 8.5.5- Thude tinh Rows va Columns 8.5.6- Cac kiéu thude tinh khac trong tham chiéu 6 a 58 60 62 66 67 67 68 8.5.7- Xac dinh thén, 8.5.8- Tao ving truc tiép (khdng sir dung VBA) 8.5.9- Tao ving bang cach str dung VBA 8.5.10- Lam viée véi nhiéu ving 8.5.11- Di chuyén, sao chép va xoa 6 (khdi 6) 8.5.12 Mot s6 thude tinh hitu ich cita déi tong Range 8.6- Tra citu va tham khao ddi tuong Chwong 9: KHAI BAO VA SU DUNG BIEN TRONG VBA 9.1- Khai bao kiéu gia tri cho bién 9.2- Cac toan tir trong VBA 9.3- Biéu thire 9.4- Gan gia tri cho bién, hing va déi trong 9.4.1- Gan gid tr] cho bién 9.4.2- Gan gia tri ld hing s6 cho bién 9.4.3- Gan gid tri cho bién déi trong 9.4.4- Hudng dan truyén tham s6 bang gid tr 9.5- Khai bao va sir dung mang (Array) 9.5.1- Mang cé kich thuéc cé dinh 9.5.2- Mang dong 9.6- Sir dung Type dé khai bao bién nguai ding 9.7- Xéc dinh kiéu bién bang ham TypeName 9.8- Vong dai cia bién Chuong 10: SU DUNG TRG GIUP TRONG VBA 10.1- Tro gitip truc tiép trong méi trudng VBA 10.2- Sir dung hép thoai tr gitip voi chit dé 86 87 87 88 89 93 96 1s 8 119 10.3- Sir dung vi du mau cita Excel 10.4- Sit dung Internet Chuong 11: THIET LAP MOI TRUGNG LAM ViEC L1.1- Sir dung Options 1.2- St dung VBA. Project Chwong 12: PHUONG PHAP TU XAY DUNG MACRO 12.1- Xay dung macro 12.2- Ngiit dong khi ma lénh qué dai 6 12.3- Cac i xy ra khi xay dung macro Chuong 13: SU DUNG VA XAY DUNG HAM TRONG VBA 13.1- Str dung céc ham sin cé trong Excel 13.1.1- Goi cdc ham trong Worksheet tir VBA 13.1.2- Chén ham s6 trong Worksheet vao 6 13.2- Str dung cdc ham trong VBA 13.2.1- Ham todn hoc 13.2.2- Ham xae nhan dit ligu 13.2.3- Ham chuyén ddi gitta ede kiéu dit ligu 13.2.4- Ham vé xi ly chudi 13.2.5- Ham dinh dang dit ligu 13.2.6- Ham tao s6 ngau nhién 13.2.7- Ham vé ngay gid 13.2.8- Ham vé dé hoa 13.2.9- Ham chuong trinh 13.2.10- Cac ham khac 120 121 123 124 13.3- Xay dung ham trong VBA 13.3.1- Phan biét ham ty lap véi thi tuc 13.3.2- Cach xdy dung ham 13.3.3- M6 ta ndi dung ham 13.3.4- Tao va str dung ham trong Add-Ins 13.3.5- Goi ham ttt thi tuc Chuong 14: CAU TRUC DIEU KHIEN 14.1- Diéu khién c6 didu kign 14.1.1- Diéu khién IF 14.1.2- Diéu khién Select Case 14.1.3- Diéu khién And 14.1.4- Diéu khién Or 14.1.5- Diéu khién sir dung nhiéu And va Or 14.2- Diéu khién vong lap 14.2.1- Diéu khién Do ... Loop 14.2.2- Diéu khién Do While ... Loop 14.2.3- Diéu khién Do ... Loop While 14.2.4- Diéu khién Do Until ... Loop- 14.2.5- Diéu khién Do ... Loop Until 14.2.6- Diéu khién For ... Next 14,2.7- Diéu khién For Each... Next 14.2.8- Lénh thodt (Exit) 14.2.9- Vong lap ling 14.2.10- Diéu khién With - End With 165 165 165 169 170 176 178 Chuong 15: HOP THOAI TRONG VBA 15.1- Hp théng bao Message box (Msg Box) 15.1.1- Cac loai théng diép trong buttons 15.1.2- Théng sé cia nut diéu khién 1.3- Cac biéu trong théng digp trong Msgbox 15.1.4- Xay dung tham sé cho MsgBox 15.2- Phuong thite InputBox 15.3- Ham InputBox Chuong 16: KY THUAT XU LY LOI 16.1- Cac kiéu 16i thuong gap 16.2- Léi thi hanh va cach xtr ly 18i 16.2.1- Xae dinh va lim viée véi nhimg 13i xay ra 16.2.2- C; +h “bay” 16i chi tiét bang On Error 16.2.3- G6i gon xr ly 16i 16.2.4- Nhiing trudng hop nén bé qua 13i 16.2.5- Xac dinh Idi cu thé 16.2.6- Léi do ngudi sir dung cé y 16.3- L6i lap trinh va ky thuat xtr ly 164 16.3.1- Cac loai 16i lap trinh 16.3.2- Xac dinh 1éi va ky thual xir ly 13i 16,3.3- Str dung c6ng cy stra Ii cia VBA (VBA Debugger) 16.4- Cac phuong phap giam 13i 16.5- Nhitng théng sé vé ma lénh Ii trong VBA Chwong 17: LAP TRINH SU KIEN TRONG EXCEL 2003 17.1- Chi din vé cdc thil tue cia su kién 17.2- Lam hitu hiéu va v6 hiéu cdc su kién 194 194 195 195 195 197 200 217 224 17.3- Trinh ty cdc su kién 17.4- Céc su kign déi v6i Workbook 17.4.1- Su kign Activate 17.4.2- Su kién Deactivate 17.4.3- Su kign Open 17.4.4- Sur kién BeforeSave 17.4.5- Sy kién BeforePrint 17.4.6- Su kign BeforeClose 17.4.7- Su kién NewSheet 17.4.8- Su kién Window Activate 17.4.9- Su kign WindowDeactivate 17.4.10- Su kién WindowResize 17.5- Cac su kign d6i v6i Worksheet 17.5.1- Su kign Activate 17.5.2- Su kign Deactivate 17.5.3- Sy kign SelectionChange 17.5.4- Sy kién Change 17.5.5- Su kign Calculate 17.5.6- Su kign BeforeDoubleClick 17.5.7- Su kién BeforeRightDoubleClick 17.5.8- Su kign FollowHyperlink 17.5.9- Sy kign PivotTableUpdate 17.6- Nhiing su kién khong lign quan véi cdc déi trgng 17.6.1- Sy kign OnTime 17.6.2- Su kién Keypress (bam phim) 11 Chwong 18: NHUNG Vi DU VE LAP TRINH VBA 18.1- Vi du vé lam viée véi ving 18.1.1- Sao chép ving diac biét 18.1.2- Sao chép ving chua xc dinh 18.1.3- Di chuyén ving 18.1.4- Duyét timg 6 trong ving xéc dinh 18.1.5- Thi tue dé xoa dong tréng 18.2- Thi du vé lim viée véi workbook va worksheet 18.2.1; Tha tue xoa sheet rong 18.2.2. Thu tuc tim sheet trong workbook 18.2.3- Di chuyén nhanh t6i mét sheet nao dé 18.2.4- Khoa 6 chtta cong thite 18.3- Thay di cai dat trong Excel 18.3.1- Thay déi cai dat kiéu Boolean 18.3.2- Thay ddi cai dat khong phai 6 kiéu Boolean 18.4- Mt sé ham va thi tuc hitu dung khéc 18.4.1- Ham chuyén sé sang chit 18.4.2- Ham tach s6 tir trong chudi 18.4.3- Ham vé tinh todn géc 18.4.4- Tho tuc sao chép dit liéu theo kiéu dac biét 18.4.5- Ham ndi suy tuyén tinh 18.4.6- Ham tach tén, ho va tén dém 18.4.7- Sir dung Validation dong Chuong 19: SU DUNG VA XAY DUNG BANG DIEU KHIEN TRONG EXCEL 19.1- Sir dung bang diéu khién sin cé trong Excel (Dialog Boxes) 19.1.1- Bang diéu khién File Open va File Save As 12 248 261 262 262 276 277 279 282 285 288 291 295 300 19.1,2- Phuong thire GetOpenFile va GetSaveAsFilename 307 19.2- Xay dung UserForm trong VBE 310 19.2.1- Cach kim hign UserForm trong bang tinh 312 19.2.2- M6 ta cdc diéu khién trong UserForm 313 19,2.3- Cac céng cy tao UserForm 316 19.2.4- M6t s6 thude tinh ctia cdc digu khién 323 19.2.5- Sir dung chudt phai tai UserForm 327 19.2.6- Str dung chuét phai tai cae diéu khién 329 19.2.7- Cac sur kién trong UserForm va diéu khién 329 19.2.8- Quy ude vé dat tén cho diéu khién trong UserForm 332 19.2.9- Vi du vé xy dung UserForm 333 19.3- Xay dung DialogSheet trong workbook 362 19.3.1- Céch lam hign va déng DialogSheet trong bang tinh 364 19,3.2- Cac diéu khién trong DialogSheet 365 19.3.3- Thudc tinh ctia cae diéu khién trong DialogSheet 367 19.3.4- Sir dung ham Excel dé lién két gitta DialogSheet voi Worksheet 19.3.5- Sir dung VBA dé lién két gitra DialogSheet v6i Worksheet 19.4- Xay dug Form trong WorkSheet Chuong 20: TAO THANH CONG CU VA THUC DON BANG VBA 20.1- Tao thanh cong cy Toolbar 20.1.1- Tao thanh céng cu (Toolbar) méi 20.1.2- Xo thanh cong cy 20.1.3- Sir dyng eae digu khién trong CommandBar 20.1.4- Thém cdc diéu khién vao CommandBar 13, 20.1.5- Sir dung cdc thuGc tinh ctia diéu khién 20.1.6- Sir dung cdc phurong thire 20.2- Tao thutc don Menu 20.2.1- Lap trinh véi menu 20.2.2- Tao thure don con (Submenu) 20.2.3- Thay ddi trong thure don tit 20.2.4- Tao Popup menu mdi clia déi tuong 6 hay khdi 6 Chuong 21: LAM VIEC VOI FILE VA THU’ MUC VOI VBA 21.1- Tim tén cua thu muc hién tai (ham CurDir) 21.2- Thay di tén cita file hoac thu muc (ham Name) 21.3- Kiém tra vj tri cia file va thu muc trong 6 dia (ham Dir) 21.4- Xac dinh ngay va thdi gian sira ddi file (ham FileDateTime) 21.5- Xac dinh kich c& ctia file (ham FileLen) 21.6- X4c dinh va thiét lap thudc tinh cta file (ham GetAttr va SetAttr) 21.7- Thay adi thiét lap thu muc va 6 dia (Iénh ChDir va ChDrive) 21.8- Tao va xoa thu muc (lénh MkDir va RmDir) 21.9- Sao chép file (Iénh FileCopy) 21.10- Xod file (lénh Kill) 21.11- Mot sé ham hu ich ctia file va thu muc 21.11.1- Ham kiém tra sy tn tai cita file 21.11.2- Ham tach tén file tir duong din 21.11.3- Ham kiém tra sy ton tai ctia duéng din 21.11.4- Ham kiém tra sy ton tai Tén ctia mot khoang 14 400 404 406 408 4t 413 Al7 418 418 419 424 425 426 427 428 21.11,5- Ham kiém tra sheet cé ton tai hay khong 21.11.6- Ham kiém tra Workbook cé mo hay khong Chuong 22: NHUNG CAU HO! HAY GAP TRONG VBA Chuong 23: DIEU KHIEN CAC CHUGNG TRINH KHAC BANG VBA 23.1- Khéi dong mot chuong trinh khac tir Excel 23.2- Di chuyén gitia cdc churong trinh ting dung 23.3- Diéu khién cdc chuong trinh khac 23.4- Tim hiéu vé lién két (Binding) 23.4.1- Lién két mugn 23.4.2- Lién két som 23.5- Tao cdc déi tong Automation 23.5.1- Str dung him CreateObject 23.5.2 Sir dung ham GetObject 23.5.3- Sir dung tir khoa New 23.6- Lién két dir ligu gitta cde chuong trinh trong Window 23.6.1- Diéu khién Word tir Excel 23.6.2- Didu khién PowerPoint tir Excel 23.6.3- Didu khién AutoCad tir Excel Chuong 24: LIEN KET GIUA EXCEL VOI VISUAL BASIC 6.0 24.1- Tao du an ActiveX DLL 24.1.1- Cach tao lin két don gian ActiveX DLL mét huéng 24.1.2- Céch tao lign két hoan thién ActiveX DLL hai huéng 24.1.3- Hién thi Form ctia VB 6.0 trong Excel 24.2- Diéu khién Excel tir Standard EXE cita VB 6.0 Tai liéu tham khao 442 47) 73 478 482 487 Chong 1 Gid] THIEU VE VISUAL BASIC FOR APPLICATIONS Nhw ching ta da biét, Microsoft Excel (Excel) la phan mém néi tiéng chuyén vé bang tinh va biéu dé ctia tap doan Microsoft. Phan mém Excel duoc stv dung rat rong rai va cé thé eng dung trong nhiéu nganh nghé. Tuy nhién, déi voi nhiing yéu cau tinh todn, xt? ly phic tap, néu chi don thuan st dung phép tinh trong Excel thi khong thé giai quyét duoc triét dé, hay phai ton nhiéu cong thie xay dng hoa bat budc phai thao tac mét cach tht cong. DS khdc phuc nhing mat han ché dé, ngén ngiF lap trinh cé tén Visual Basic for Applications (VBA) duoc tich hop sn trong phan mém Excel sé git ban co thé gidi quyét triét dé van dé trén. VBA Ia ng6n ngé lap trinh phat trién trong méi trudng Office boi tap doan Microsoft. Cac phan mém Excel, Word, Access, PowerPoint,... va ca phan mém chuyén linh we dé hoa... AutoCad (tl phién ban 2000 tré én) déu co thé stv dung VBA. Tw Iie ban dau, ban c6 thé sv dung macro trong Excel 3 (ra doi nam 1990), Excel 4 (ra doi nam 1992), Excel 5 (ra doi n&m 1994). Khi do, macro du’ vidt bang ng6n ngiv XLM va la mat phan trong bang tinh Excel, kha nang tng dung con han ché. Excel 98 (ra doi nm 1997) da danh dau sy phat trién cla macro bang viéc xdy dyng ng6n ngi@ lap trinh Ung dung Visual Basic voi ctra sé Microsft Visual Basic hoan toan déc lap. Excel phién ban truéc khéng mo duc phién ban nay. Cho dén nay, ngén ngir VBA da cé nhting bude phat trién vot bac voi mat sé kha nang khong thua kém nhiéu so voi nguoi anh em Visual Basic 6.0 (VB). Mac dit, bd Office 2007 da xuat hién trén thi trudng voi giao dién va mt sé tinh nang cd sv thay déi, nhung cau tric ng6n ngi cling nhu giao dién cla VBA van tuong ty nhu trong Office 2003. Macro (cén goi la tht: tue hay chong trinh con) la mét thanh phan ctia ngén ngi VBA, dug tao ra dé Excel thyc hién theo yéu cau boi cdc cau lénh chiva trong né dé hoan thanh mét céng viée nao dé. Cac cau lénh trong macro duge xay dung tiv cac ky tu’ gd phim dé ty dong thye hién cac céng viée mang tinh lap di lap lai hoc tang téc dé cho viée nhap, xt ly sé ligu. 17 8) sheet BB) steate 1) Sheet 2 (Sheet? 8) theviorktook 0 Prbordes Hinh 1-1: Civa s6 Microsoft Visual Basic trong Excel VBA gilip chung ta thy hién céc céng viéc trong Excel nhanh hon rét nhiéu so véi tinh toan thi cOng, c6 thé giai duoc nhding bai toan phire tap trong nhiéu linh vue. Cac céng viée trong Excel c6 str dung dén VBA thi tac 6 xt IY div ligu va d chinh xc cao, sén phdm ting dung mang tinh chuyén nghiép. VBA 6 hai ting dung chinh fa thi tuc (Sub - con goi la chung trinh Con) va ham ty lap (Function). La ngén ngG lap trinh ing dung trong mai truéng Office nén VBA tan dung duoc phan nén ta bang tinh trong Excel. Vi vay, ban khong can phai thiét ké hay phdi giao dién tt ban dau nhu cac phan mém chuyén vé lap tinh. Mat khac, VBA san 6 6 bén trong Excel nén khi ban cai dat Office trong Window, VBA sé ty dong dugc cai kem theo. Bé la nhéing loi thé khi st? dung VBA. Ngoai nhiing wu diém thi VBA cing t6n tai mét sé nhuoc diém nhu tinh bao mat kém, khéng bién dich thanh file chuong trinh dé hoat dng doc lap ma phai di kem cling voi file trong Excel,... Ngoai ra, mat sé chuong trinh Giét virus trong nude khong phan biét dugtc macro véi virus nén dé bi xod mat macro khi quét virus. 18 Dé hoc duoc ngén ngif lap trinh VBA, ban can nam duge kién thirc co ban va ndm bat duge cac déi tuong, phuong thire lam viéc trong Excel. Nhiing ngwoi biét lap trinh VBA trong Excel cé thé phat trién theo nhiéu dinh hung khéc nhau nhu lap trinh VB6.0, VB.NET, lap trinh tng dung VBA trong cac phan khac cia Office va cd phan mém chuyén dé hoa AutoCad, hay bAt ot phan mém tng dung nao cé lién quan dén Visual Basic. Cac linh vue ky thuat, kinh té, tai chinh,... déu co thé Ging dung ngén ngi VBA trong chuyén mé6n ctia minh. Chuong 2 GHIVA THUC HIEN MACRO SU dung chi? nang ty ghi macro (Recorder Macro) la mét y tuéng hay dé ting bude hoc ngén ngir VBA, nhét la Itic dau tim hiéu v8 VBA. Voi che nang nay, Excel sé ghi lai toan bé cac cong viée ban da thy hién trén bang tinh (bang cdc ky ty doe gé tw ban phim) mét cach tuan tw va khi 46, ban c6 thé nam bat duge qua trinh thurc hién céng viée nho viéc chay (thi hanh) macro bdi cde cau lénh trong macro dé 100% Al | Visual Basic Editor AltHFLL | rosoft Script Editor Alt+-Shift-+F11 Macro name: |macro3 a | Shortcut key Store macro in: Ctrl “This Workbook ® Description: ae ee : Macro recorded 10/21/2006 by Phan Ty Huengl OK | C : Cita sé Record Macro 20 Trong suét thoi gian ghi, macro da duc lwu lai voi ten xac dinh trong module, module dug tao ra trong qua trinh ghi va la mot phan ctia Workbook. Macro dugc ghi lai 6 thé dug luu trong This Workbook (Workbook hién hanh), New Workbook (Workbook mdi) hoac trong Personal Macro Workbook (nh@ng macro s@ hu riéng). Nhéng macro dug lu trong Personal.xls d&u stv dung dug khi ban mé Excel ra. Cac macro trong cdc Workbook khdc nhau co thé str dung bat clr Itic nao khi cdc Workbook dang mé (ké ca str dying chting tir Workbook khac). Diéu kién dé co thé thwe hién ghi macro: 1. Trén workbook dang dug kich hoat (Activate Workbook) 2. Trén workbook mdi Chie nang nay chi khéng thye hign khi ban dieng ghi. Chtre nang ty ghi khong c6 tac dung déi voi mét sé cong viéc. Vi du: nh trong qua trinh ghi macro, mét 6 duge chon (select) & hién tai sé khong dug ghi lai céc hanh d6ng xay ra voi né khi ban khéng thyc hién céng viéc trong 6 dé. Ngoai ra, Excel cling khéng ghi lai cdc céng viéc khi dang st? dung bang diéu khién (dialog box) cho dén khi ban bam nuit OK trén bang diéu khién dé. Bé hiéu ro hon thi-ban hay thy hanh c6ng viée ghi macro nhu & duéi day: 2.1- Tao macro bang chtrc nang Recorder Macro Ban hay tién hanh tao macro dau tién bang chtvc nang ty ghi macro. Noi dung macro nay trinh bay t6n va dia chi cla ban, cach thc hién nhu sau 1. Trong Tools/Macro, chon Record New Macro (hinh 2-1). 2. Trong Macro name: gé Address_abs dé dat tén macro dé (hinh 2-2). Dac diém la ky tu dau tién la cia ten macro phai IA chi? khong cé d4u (c6 nghia khéng phai la chit tiéng Viét). Con cac ky ty khac co thé la chi, sé hodc ky tw gach dui (ky ty _). Cac ky tw dac biét nhu khoang tréng (Space), @, %, $, #, &... khong duoc chap nhan, ban cé thé dung ky tu’_ dé tach tén trong macro. Quy dinh viét tén cla macro hay ham ty lap dé cap chi tiét hon trong myc 9.1. 3. Chuyén sang Shortcut key: dé tréng (ban sé thu'c hién viée nay sau). 4. Trong Store macro in: dé mac dinh la This Workbook. 5. Trong Description: ban g6 néi dung sau: Enter address starting in cell B3 6. Bam OK 7. Thanh Stop Recording sé xuat hién trong sudt qua trinh ghi macro. Ban cé thé di chuyén no dén vi tri khac (néu thay can thiét) bang cach bam trai va gid chudt tai thanh tiéu dé cia thanh Stop Recording. 8. Trong thanh Stop Recording, nut Relative Reference mac dinh bi mo (khéng tac dung - hinh 2-3). 9. Trong Sheet1, bam vao B3 va gé tén clia ban. © & dudi go tén lop, tiép theo Ia tén trudng ma ban dang hoc. Chwy la ban sty dung chi? khéng co dau, vi néu cé dau thi néi dung chi? dé trong macro sé khé doc 10. Cho toan b6 cac chi? dam va nghiéng. 11. Bam vao 6 B6. 12. Trong Stop Recording, bam vao nuit Stop Recording. Nguyen Van Hung Lop DCCT-DKT K48 Truong DH Mo Dia chat wt» chet { sheer sheer / Ready Record Hinh 2-3: Qué trinh ghi macro Nhu vay, macro cé tén Address_abs da duc ghi lai. Nnivng 6 ma an da str dung trong qué trinh ghi dugc thé hién dui dang dja chi tham chiéu tuyét déi (tén 6 gdm c6 hang va cét, vi du A2, CD78....). Vi vay, nhing 6 trong Worksheet do sé thyc hién khi ban cho thyc hién macro, tén ban, tén lop va tén trvong sé duc tao ra dung vi tri trong Worksheet. Tiép theo ban sé tao mét macro giéng nhw trén cling bang cach ghi macro. Chi khac la Macro truéc da chon khdi 6 (hay Ia vung) cé dia chi tham chiéu tuyét-d6i, con Macro sau sé sir dung quan hé tham chidu 6 tuong déi (quan hé voi vi tri cla 6 duoc kich hoat ban dau). 1. Chon Sheet1. 22 Bam vao 6 B11 Trong menu Tools/Macro, chon Record New Macro (hinh 2-1). Trong Macro name: g6 Address_Ref dé dat tén macro dé (hinh 2-2) aR ON Trong Shortcut key: Gite phim Shift va go cht A, nhw vay phim tat 98 la Ctrl+Shift+A. Ban nén tranh truong hop phim tat dé chay macro tring voi phim tt sn c6 trong Excel. Néu chang may ban tao phim tat chay macro tring voi phim tt trong Excel thi khi bdm phim tat, macro dé sé chay va phim tat sé khong cé tac dung. 2 Trong Store macro in: dé mac dinh la This Workbook N Trong Description: ban g6 néi dung sau Enter address starting in activate cell position Bam OK Thanh Stop Recording sé xuat hién. Ban c6 thé di chuyén né dén vi tri khac néu thay can thiét. © @ 10. Trong thanh Stop Recording, bam vao nut Relative Reference cho sng lén (c6 tac dung nhu hinh 2-3), Excel sé tiép tye ghi macro v6i quan hé tong déi cho dén khi nao thoat khoi Excel hoac ban bam lai vao nut Relative Reference. 11. G6 tn ban, lp, tén trudng va dia chi trong cac 6 B11, B12, B13 va B14. Ndi dung the hién nhw sau: Nguyen Van Hung Lop DCCT-DKT K48 Truong DH Mo Dia chat xa Dong Ngac, Tu Liem, Ha Noi 12. Cho toan bé cac cht dam. 13. Bam vao 6 B15. 14. Trong Stop Recording, bam vao nut Stop Recording. Ban cé thé str dung chi? co dau tiéng Viét, tuy nhién khi sang ctra sé VBE thi chi do sé rat kho doc. Ghi ché: Khi str dung quan hé tham chiéu 6 tuong déi, chon 6 géc (ActiveCell) truéc khi chon ntit Relative Reference, cac 6 khac quan hé tham chiéu tuong déi voi 6 géc do. Ban cé thé la chon hén hop dia chi tuyét déi va twong dai trong qua trinh ghi macro. Tuy nhién, ban khdng nén str dung phuong phap nay vi qua trinh tham chiéu sé lon x6n, khé theo di. 23 - Dé stv dung tham chiéu twong déi trong sudt qua trinh ghi macro, nut Relative Reference luén sang (cé tac dung). - Dé stv dung tham chiéu tuyét di trong suét qua trinh ghi macro, nut Relative Reference ludn t6i (khdng tac dung) 2.2- Thyc hién macro khi st» dung bang diéu khién macro Thyc hién mét macro 1a qua trinh thi hanh cac lénh chtra trong macro dé (con ggi la thuc thi hodc la chay macro. Ban cho thy hién macro trén tl Sheet2 nhu sau: 1. Chon sang Sheet2 va bam vao 6 nao dé ngoai 6 B3. 2. Trong menu Tools/Macro, chon Macros (hinh 2-1). 3. Bdm vao macro c6 tén Address_abs trong danh sach macro (hinh 2-4) Bam vao nut Run Sau d6 ban sé thay néi dung thé hién sau khi thuc hién macro & Sheet2 giéng nhu tai Sheet. Ban sé thay céng viéc thue hién trong macro la rat nhanh va chinh xac. Voi cac cong viée phirc tap va xt? ly on hon, thoi gian 8 thi hanh mt macro cé thé vai giay tham chi én dén hang phut. > WN Shoots \ sheet2 ( sheots / Hinh 2-4: Thyc hign macro tir cia sé Macro tai Sheet2 24 2.3- Thuc hién macro khi st dung phim tat (shortcut key) Thu tuc Address_Ref c6 thé duc diéu khién trong bang diéu khién Macro (muc 2.2). Luc truéc phim tat da dugc gan dé thue hién céng viée 46, hay sl dung phuong phap thay thé nay: 1. Tai Sheet2 ban b4m vao 1 6 bat ky (vi du 6 H14). 2. An phim Ctrl+Shift va A. Khi dé tén va dia chi sé xudt hién dudi 6 dé. 3. Ban hay thir thy hién lai macro d6 bang phim tat tai cdc vi tri khae trong Sheet2 2.4- Tam divng the hién va thoat khéi macro Trong qué trinh thi hanh macro, néu muén tam ding hay héy qué trinh thyc hién macro true khi két thie, ban 4n vao nut ESC trén ban phim. Dé thye hién cong viéc nay thi thoi gian thyrc hién macro phai di dai. Vi du, tha tuc Address_abs khi thi hanh thi khéng thé kip dng lai vi thoi gian din ra rt nhanh. Bé kip “bat”, ban bé sung thém vong lap For... Next dé kéo dai thoi gian thy hién (xem cach bé sung ma Iénh vao trong macro trong muc 4.4) Két qua nhw hinh 2-5 6 dudi day: wy) Addvess, ActiveCe ll. FormulaRiC: Range ("54") .Select Activece 11. Fo: |: Range ("D3") .Select Hinh 2-5: Tam difng khi thy hign thi tuc 25 Civa sé Microsoft Visual Basic hién ra thong bao rang thi tye dang thuc hign da bi ngat (Code excecution has been interrupted). Ban o6 cac truong hop wa chon nhu sau: - Continue: tht tuc tiép tuc chay binh thuong. - End: thu tuc ding tai day. ~ Debug: g6’r6i trong thi tuc (xem chi tiét trong Chuong 16). Tuy truéng hop cu thé ma ban chon mat trong cac trvong hop trén Trong mét sé trong hop st? dung vong 1d u khéng can than thd tue sé khéng bao gid két thuic. Vi du nhw th tuc dui day: "Tha tuc lam viéc tét Sub Chuan () Dim i As Integer ie Do Range("Al") .Value = i Msgbox Range ("Al") .Value asied Loop Until i > 10 End Sub Thd tuc trén 6 sty dyng vong lap Do ... Loop tang dan bién i ttr 1 dén 10 va thoat khdi vong lap do thoa man diéu kién i > 10, thu: tuc két thic. Nhu vay th tuc lam viéc tét. Con thu tuc dui day: 'Tha tyc nay bi 14i, khéng bao gid két thuc Sub Loi() Dim i As Integer ee Do Range("Al") .Value = i Msgbox Range("Al") .Value Loop Until i > 10 End Sub Thu tuc 6 trén do quén khai bao dong Iénh i =i + 1, do dé gid tri i van bang 1 va diéu kién i> 10 khéng bao gid dug thod man, vong lp khong bao gid két thc. Tw dé dan dén tinh trang “treo may". Phim ESC lic dé v6 tac dung, ban phai bam Ctrl+Break dé co thé thoat khdi tinh trang “treo may” nhw hinh 2-5. 26 Chuong 3 CACH THUC HIEN MOT MACRO BON GAN Ban da biét cach thue hién macro ti phim tat. Ngoai ra, con mot sé phuong t thirc khac cé thé thu hién macro, ban cd thé thwe hién macro tl cac diéu khién sau: - Déi twong trong worksheet hoac biéu dé. - Nut Iénh (Button) trong thanh c6ng cu (Toolbar) - Thanh menu ctia Excel. 3.1- Thyc hién macro tir mét adi twong trong worksheet C6 nhiéu déi twong trén worksheet c6 thé diéu khién macro, vi dy nhu déi teng dd hoa trong worksheet. Cac bude thy hién nhu sau: 4, Chon Sheet3 hay bat ctr sheet nao cn tréng. 2, Vao menu View/Toolbars chon Drawing (trv truéng hop thanh cong cu Toolbar da cé trén man hinh) 3. Chon déi tueng 48 hoa nhu hinh Oval va vé hinh oval dé 4. G6 chi? vao hinh Oval dé bang cach bam phai chudt, rdi chon Add Text ttr thyc don tat (hinh 3-1). 5. Gé ndi dung Address rdi bam ra ngoai dé thoat, 6. Ban c6 thé thay di kich thuéc hinh Oval cho phi hop dé thé hien dy dt: ndi dung ché & bén trong, ngoai ra cdn phai dam bao tinh my thuat va tién dung khi str dung 7. An phai chust vao hinh Oval d6, chen Assign Macro dé gan thii tue cho déi twong hinh Oval 8. Trong bang Assign Macro, chon macro cé tén Address_Ref. 9. Bam OK: Sau-do, ban cho thue hién chay thty macro: 14. Chon 1 6 nao dé (vi dy nhw 6 J13). 2. Bam vao hinh Oval trén, macro sé thyc hién. ar doi tung dé hoa (cé gan diéu khian macro) ra khéi ché khac trong worksheet, sty dung phai chudt dé di chuyén (b6i vi bam trai chudt thi macro sé thy hién). Cén néu ban muén thay di macro khac thi ban bam phai chudt trén doi twong, chon Assign Macro va lwa chon macro nao ban muén Nhteng déi tung trong Drawing cé chiva tht tuc (macro) khi di chuyén Chuot t6i sé 06 hinh ban tay, dé la dau hiéu dé phan biét voi dai tong khong chiva thi tuc, Format autoshape, Eeypertin. Wty n\ sheet { Sheet sheets / chestd / Ready Hinh 3-1; Gan macro vao hinh Oval 3.2- Thc hién macro tir nut 'énh trong thanh céng cu Ngoai cach 6 trén, ban cé thé thc hién macro tiy nut lénh (button) trong cac thanh céng cu ty tao (Custom Toolbar). Vi dy, ban c6 thé gan viéc diéu khién macro Address_abs vao nuit hinh mat cudi (Smiley Face) nhu sau: 1. Di chuyén chuét dén mét diém nao 46 trong cc thanh Toolbar. 2. An phai chu6t, trong thyc don tat chon Customize. 3. Trong bang Customize, chon tab Toolbars (hinh 3-2). 28 4. Chon nut New. 5. Sau do bang New Toolbar xuat hién, ban gé tén vao (vi dy Macro1) rdi OK 6. Trong bang Customize, chon tab Commands (hinh 3-3) 7. Trong hép Categories, chon AutoShapes 8. Trong Commands, cudn xudng cho: dén khi ban chon dugc hinh ung y (hinh Smiley Face). 9. Tai hinh Smiley Face, git? trai va kéo chudt vao trong thanh céng cu Macro1 (hinh 3-4). Ban c6 thé chon thém cac biéu tong khac néu can 10. Bam phai chudt vao nut Smiley Face, thuc don tat sé hién ra. Ban c6 thé stva hay xoa hinh dé va thay bang cdc hinh khac. Xem them mét sd chtre nang clia thyc don tat tai muc 3.3 & duoi day. 11. Chon Assign Macro trong thyc don tat, chon macro Address_abs va bam OK. 12. Dong bang Customize. Toolbars Commands — Options ("3.0 Settings Borders Chart Chatt Menu Bar Circular Reference Pi compare Side by Side Central Toolbox [__j Diagram # Drawing L lv i f 29 en : culmea _ Toolbars | To add a command to a toolbar: select a category and drag the | commend aut of this dialog box to a toolbar. Categories: “Window and Help Drawin | Teen Saeeees [Folded Commer Charti o @s “Forms ae control Teobox © dont Maceos "to" Symbol Built-in Menus | “New Menu scene Toobars Commands Options To.add a command ta» toolbar: select a category and drag the command out of this dslog box to « toobar. f Cowra i eget Button Image : “Edt Button Imsge... 1 Change futon Image» fF Vandow and Help r : Drawing wi Defer Style i | Text Only (Always) Test Only (Mens) : “image and Text i Hinh 3-4: Tao cdc nét Iénh trong thanh Macroi va gan Assign Macro 30 Ghi chi tao ra. Thanh céng cy dé van tén tai trong Excel cho dit ban da déng workbook tao ra né. Khi ban bam vao nut chtva thi tuc thi workbook tao ra nd sé duge mé ra déng thoi thi hanh cdc Iénh dugc gan cho nuit do. hanh céng cy ty tao thudc so hivu cia workbook ma né duge Ban hay thir stv dung nut lénh vira tao ra dé thye hién céng viée sau: 1. Truc khi thy hién thu tuc, ban xod sach ndi dung cla Sheet2. 2. Bam chudt vao nut Smiley Face trong thanh céng cu Macrot Két qua sé thé hién trén Sheet2. 3.3- Thuc hién macro tiv thanh menu Tw thanh menu ctia Excel ban co thé tao ra cdc menu moi ma khi lwa chon ching thi macro sé thy hién. Vi dy nhu tao menu mdi cé tén Macro2 nam ngay sat menu Help, menu Macro2 cé chtra menu con Work Address, cach thre hién nhw sau: . Truc khi thyrc hién, ban phai chdc chan rang Workbook chta macro cla ban dang dugc kich hoat (néu khéng ban phai m@ ra). Nn Thém mét worksheet moi bang cach vao menu Insert/Worksheet (dat la Sheet4). 3. Trong menu Tools/Customize, chon tab Commands trong bang Cus- tomize. & . Cugn xudng dng cudi cling va chon New Menu trong Categories (hinh 3-5) a Git trai chu6t & New Menu trong Commands va kéo vao dong menu canh Help. a Bam phai chuét vao New Menu trong thanh menu clia Excel, thyc don tat hién ra. ee Thay tén mdi trong Name la &Macro2. Néu chi can menu nay (menu me) thi bam vao Assign Macro dé chon (hinh 3-6). Néu cdn thém cac 34 menu con (menu item), khéng can gan tht tuc vi menu me chi mang tinh quan ly. oe eee PaaS ee Tectue Cenmseds opnene To oo conmundto oto see cate andthe conmsd ie ths dab bso tosh Categene: Commands Window die Non Hara » pee sie ented Toto BAe aan {esa Sabet = Sigeevoos ens wc) WN Shoats {Grete ( Sreee | sheet 7 tent net Hinh 3-5: Tao New Menu trong thanh menu cua Excel ene el ponte bee es mr fps oon wee ef Ms ee Tacks ownards — Qplene Toads cnet aera st ctegy sett eda to stock Sees Connie eden dip tne | ‘rnin : i pecan Shoo | we Conte Toto i ely Zea] (eorres Gnwanis | 7 Pt : > nA shemtt ¢ Shiota { shoot Reo Ce sesnennuinanatmumnctnasoenuiseaineeinnintnteiinmstnhom Hinh 3-6: Tao menu Maro2 trong thanh menu cia Excel 32 Ky ty & tree M sé gach chan chi M trong menu Macro? (tro thanh Macro2), do chinh la phim tat dé thi hanh Macro2 (chi can bam Alt+M). Tén menu c6 thé 6 dau (thé hién dug tiéng Viet) va khodng tréng, digu dé khong cé duge @ tén macro hay ham ty lap. Tiép theo ta tién hanh tao menu con trong Macro2 : | : 3 bata e tom Menu Bn | a ‘Wind at te Cotontenu | ; Donna 2 Catan ten i a AutoShapes inn : Gate e wa 7 ‘Forms b3 tel Teron i) cl | A 12 43 hag 715 COV WA Sheet / Seat { Sheet \ sheets / 2 & Hinh 3-7: Tao cdc menu con - Trong Categories (trong trvéng hyp bang Customize van dang mé), chon Macros. 2. Tai Commands, chon Custom Menu Item (hinh 3-7), gitr trai va keo chudt dén phan tréng 6 du6i Macro2 (ving duge khoanh mau dd) . Bam phai chudt vao Custom Menu Item trong menu me Macro2. 3. 4. Tai thye don tat, déi tén trong Name thanh &Work Address (hinh 3-8). a Sau dé vao Assign Macro dé chon macro thyre hién. o Cudi cling la déng bang Customize. 33 abla cacrentveatict: | cane ossipettscre Somes Hinh 3-8: Béi tén menu con, gan Assign Macro va menu duc tao ra. Twong ty nhu véi nut lénh trong thanh cong cu ty tao, menu mdi tao duoc lwu git trong Workbook dé va lu6n hién hiu trén ctra s6 Excel, ké ca truong hop ban da dong Workbook do. Khi ban bam vao menu thi Workbook cha menu do tu déng mé ra va thuc hién lénh. Commands Options | tame: 8C.stom Button t ' Toor To. aconmardtostoxbar: sca categry anid rag the coms * cake ths data boxto otoobs. “> copy Buten Image Paste Button image a of reset outen tage on x tourer image, } von 4 aie But tage peat / a orton : Om ansteb 1 Tet only (Abvaye) i 7 ey se] Testonyy Mere) nt 4 tmage and Text yo | bgnagan © assem eyperiric Assign tro. Hinh 3-9: Tao mdi va thay déi trong menu con Ra Hinh 3-40: Stra chifa hinh ciia menu con Bang cach tién hanh tong tu’, ban cé thé tao thém duoc cdc menu con khdc. Ngoai viée gan tén (Name) va thd tye (Assign Macro), ban con cé nhiing Ia chon khac nhu’ sau: - Reset: Trd lai cai dat géc (hinh £4] cung voi tan Custom Button). - Delete: Xod menu con. - Copy Button Image: Sao chép biéu twong ctia menu con. - Paste Button Image: Dan biéu tugng ctia menu con. - Reset Button Image: Cai dat lai hinh cua menu con ( [=] ). - Edit Button Image: Sta hinh cia menu con theo y muén (hinh 3-10). - Change Button Image: Béi hinh ctia menu con (hinh 3-9). - Default Style: Kiéu mac dinh cia menu con, gdm cé hinh va cht - Text Only: Chi cd chi trong menu con (khéng cé hinh). 3.4- Thay déi lwa chon trong macro Néu ban muén thay déi cdc Iyva chon chi tiét trong macro, bus dau tién ban vao menu Tools/Macro va chon Macros (hoac phim tat Alt+F8). Ctra sé Marco hién ra nhu hinh 3-14 vdi danh sach toan bO macro 35 tise nse aco nae Aaess obs Shortcut hey cts | escrito: taser sckkess stating els Hinh 3-11: Cita s6 Macro va Macro Op! Maosin; Tie Workbook Enter arose tating nce 69 Sau d6 chon tén macro ma ban muén thay ddi, cé mot sé Iva chon sau: - Options: khi ban chon Options thi ctra sé Marco Options hign ra nhu hinh 3-11. Ban co thé thay déi phim tat va mé ta lai cong viéc macro trong Description. - Edit: khi chon muc nay civa sé Microsoft Visual Basic (MVB) hién ra va tré chudt sé nhap nhay tai vi tri cla macro do. Ban co thé stra déi ndi dung theo y muén va tat nhién phai ding néu khéng thi macro sé khdéng chay dug. b - Delete: xoa macro nao ban muén. Trude khi xoa thi Excel sé héi ban cé chac chan xda hay khéng? - Macros in: hién danh sach cdc macro tuy thuéc vao cac truong hop chon trong hép cudn tha xuéng. + All Open Workbooks: ton b6 workbook dang mé + This Workbook: chi trong workbook hién hanh. + Tén tung workbook dang dug mé trong Excel Ngay phia duoi muc Macros in la Description (mau xanh) mé ta sy hoat d6ng cla tlyng macro trong dong phia dudi 36 Chuong 4 CUA SO VISUAL BASIC EDITOR (VBE) Khi ban tién hanh ghi macro dau tién, Excelsé tao ra module trong workbook do. Module duoc quan ly trong ctra sé Microsoft Visual Basic cla Excel Trong module d6 chiva cc ma lénh (code) dug vit bang ngén ngt VBA dé xay dung nén cdc macro. Cac buée thyc hién dé nhin thay module: 1, Tw menu Tools/Macro chon Macros. 2. Chon macro Address_abs va bam vao nut Edit Civa s6 Visual Basic Editor hay Microsoft Visual Basic (viét tat la VBE hay MVB) hién ra nhw hinh 4-1. Ctra sé VBE chinh la noi thy hién cac céng viéc trong dy an VBA cla ban. Ban cé thé thay ré duge néi dung ting tht tuc hay ham khi cudn xudng. Hai chuong trinh con ma ban viva tao bang chtrc nang Record New Macro dug hién thi chi tiét trong ctva 6 VBE. Ngoai ra, civa sé VBE con la méi trudng dé ban xay dung mét chic ‘nding digu khién khac nhu: tao bang diéu khién tuy bién (UserForm), thay déi thudc tinh ctia cac diéu khién,.. 4.1- Cau tric ctra sé VBE Ctra sé VBE Ia noi quan ly, lwu trir ton bé cac thi tuc (macro) fing nhu cae dy an xay dyng trong VBA. Cau tric ctva sé VBE nhu sav: = Dong trén cling gém 6 biéu tong el va tén ota sé Visual Basic Editor, tiép do la tén ota Workbook, cudi cling la dy an ban dang thuc hién. - Dong ther hai la cdc menu diéu khién chtva trong thanh menu ctia VBA. - Dong thir ba la thanh céng cu tiéu chudn (Standard) duge mac dinh xuat hién trong civa s6 VBE (hinh 4-1). Ngoai ra, con mat sé thanh céng cu khac khéng duoc hién thi san nhu Debug, Edit va UserForm (hinh 4-3). Tuy trwéng hop cu thé ma ban co thé cho hién thi va str dung céng cu nay. Géc phia trén bén trai la chi tiét dy dn cia ban (Project Explorer). Dy an bao gém tap hyp cac déi trong Excel Objects (gdm cdc déi tong trong Excel nhu: Sheet, This Workbook), Forms (chtva céc hop déi thoai iuy bién do ngui str dung lap ra), Modules (chtra cac module con nhu Module1, Module?....). Module !4 noi quan ly, lwu tri? cac tht tuc (sub) va ham (function) Méi module cé thé chtra mét hay nhiéu Sub hodc Function. 37 8 Géc phia du¢i bén trai la civa sé thudc tinh (Properties window) ctia déi tuong dang duoc chon. Gém c6 tén clia déi tong, phia dui la thudc tinh cla n6. di tugng cé thé ld This Workbook, cac Sheet, UserForm hay Module, Class Module... F £ 2 vansopet aes ma noureensaie he — fname] ‘ S mematcracapafbret| © tae aiirsee ceaessce #4 00 i HB) sheets (Sheets) Range 1H) shee? (Shewt2) ActiveCell.FormilakICL = "Nguyen Van ¥ BH) sheets (Shows) Range ("81") .Select ©) TeWielbook ActiveCell.FormulaRici = "Lop DCCT-DET Kas" C4 Fomms Renge ("BS") .Seiece Bl UserFermt Avtivecell.FormulaRici * "yong DH Me Dia chat” #5 Medes Benge ("83:55") .Selece Seen ; Selection.Font.Bold = _ a : Selection. Font . Te GT Range ("B65") .Select Anette = ooo —r—i‘C « “ees see 2s F = = 3 e ¢ 2 $8 & PT | “e & € S&S 8B & | = ae a 38 i | - £ g & @ = g & & 2 € So S 2 : 5 Hinh 4-2: Cac nut lénh trong cong cy tiéu chudin cuia cifa sé VBE 38 UserForm Customize... Hinh 4-3: Cac thanh céng cu Debug, Edit va UserForm trong VBE Phan chiém dién tich lon nhat civa sé MVB chinh la civa s6 code (Code window). Dé Ia noi soan thao ma lénh (code) trong macro hay xay dung User- Form. Tai d6, ndi dung thé tuc, ham sé duoc hién thi trong module hoc trong tung déi twong trong Excel. C6 thé coi module la noi quan ly, lwu triv cac thd tuc (Sub) va ham (Function). Méi module cé thé chtra mot hay nhiéu thd tuc hoac ham. Phia trén cira sé soan code c6 Hép déi tuong va Hop thd tue, su kién. VAn dé nay duoc dé cap cu thé hon trong muc 4-2 Ctra sé nam dudi cling co tén la Immediate, théng thudng khéng hién thi trén VBE. Trong clra s6 VBE, ban vao chon menu View/ Immediate Window (phim tat Ctr+G), Civa sé Immediate hién ra (hinh 4-7, hinh 4-8). Thong thudng, ctva sé Immediate nam phia dudi man hinh va ban 6 thé di chuyén, thay déi kich thuéc theo y muén trong VBE. Van dé nay duge dé cap & myc 4.3. Ghi chu: Néu chi stv dung thuat ngi macro d6i voi cdc churong trinh ni chung thi nhiéu trvong hop sé khéng r6 nghia. Theo ding sw lam viéc thi macro phai la thti tuc vi chi thti tuc moi co thé dé chay duoc (Run Macro) va c6 thé can thiép dén nhiéu déi trong, con ham ty lap (Function) thi chi lam viéc trong mét 6 chira tén ham. Chinh vi vay, chung ta str dung thii tuc (Sub) va ham ty lap (hay Function) dé thay thuat ngt macro ndi chung. 4.2- Cla s6 soan thao code (Code window) Mot thd tuc duoc bat dau voi Sub va két thc boi End Sub. Ham tu lap cting bat dau bang Font va két thc béi End Function. Cac thi tuc hodc ham ty lap néu dug lap ra dé co thé dling chung trong Excel thi ban phai xay dung trong cac module téng quat (khéng phai trong Class Module). Dé tao ra module téng quat, ban vao menu Insert\Module 39 trong cla sé VBE. Module dling chung c6 Hép déi tong voi tén la General, danh sch thi tuc trong méi module dug liét ké trong Hop thii tue, sw kién (hinh 4-1). Ngoai ra, ban cén 6 thé x4y dung thi tue cho déi tuong la Workbook, ThisWorkbook voi nhiing su kién xay ra déi vi nd. Ba biét chi tiét, moi ban xem phan lap trinh sv kién trong Excel tai Chuong 18. TheeeNunbers (] |/ Dam num a9 Integer, num? 22 Integer, mums az Inveger hum = 10; num2 = 20: nud = 30 [binge | YogBox "Gia cri trung Binh la" ¢ ~ a Nyaverage (muml, num2, nuns) MegBox Mmul= " € mut € Che (19) € wnuma= " & mum 6 Chr (13) 6 "nune= 7 § mes € Che (13) End Sab notion MyAverage(numt, By pumt = nuel #4 Hyaverage = (numl + numz + rues) / 3 End Fun ADeclarations} Y [iPectarations) 4 |Add_Forn IHienthong Type Thongtin Ten As String | Diachi as Sune mae | in Quequan As StShowFormé | | End Type | | Tuoi As IntedshowForm? 4 | f Sub Hienthongtin() i Dim Danhsach as Thongtin i A 1 To 4 Hinh 4-5: Danh sach cac chwong trinh dude xay dung trong ting module 40 i : nisbeieammmetapelea I Private Suk Yorkbook_Open() MsgBox "Hello World!” End Sub Hinh 4-6: This tuc cia sy Sau Sub hay Function la tén cia thi tue hay ham. Ti khoa Sub, End Sub, Function va End Function mac dinh cé mau xanh da tri (hinh 4-4). Noi dung bén trong thi tuc hoac ham nhu sau: éi tugng Workbook md ra (Workbook_Open) Théng thong, ngay du6i dong Sub hode Function fa dong mau xanh ka cay voi dau ngoac don (') & dau dong, do [a 101 chu thich (comments). Loi cht: thich khong anh huéng dén macro va ban c6 thé thay di ndi dung ctia nd. Khi ban tién hanh ghi macro, tén macro va loi mé ta ndi dung st dung tw déng xuat hién dudi dang chi thich. Ngoai ra, ban c6 thé ty bd sung cha thich trong qua trinh xay dyng macro. Khi d6, ban sé dé dang hidu duoc cac buoc cling nhy muc dich thu hién cla cdc dong ma lénh. Tiép theo la ndi dung ma lénh, day chinh l& n6i dung chinh quyét dinh sw tam vige cia Sub hay Function. Ban cé thé stra déi, thém bot ni dung ma lnh cho phu hop Suéng mau den lién dai cé y nghia phan chia céc Sub (thd tuc), Function (ham) trong Module. Dau gach du@i (_) thinh thoang gap o cuéi dong ma lénh Trong truéng hop ma lénh qua dai thi ban dung (_) dé ngat dong, nhung duoc hiéu la ma enh van lién tuc. Trong muc 12-2 trinh bay chi tiét vé cach ngt dong. Ngoai ra, dau gach dui con bat gap trong cac tht tuc su kién (hinh 4-6). Khi ban ghi macro phtrc tap hon, ban c6 thé gp mot s6 mai lénh ty dong xuat hign. Excel ghi lai tat cd nhitng gi ban thy hién mot cach cu thé nhat, ké cd nhting thudc tinh dugc cai dat mac dinh trong Excel (dang st dung) nhung ban khéng hé can thigp toi. Ban co thé luo bo nhteng ma lénh tha do ma khéng anh hung dén két qua thuc hién macro (xem tai muc 4.4.2). Bé 16 hon ban thyc hién vi du sau day: 1. Tai 6 B3 ban tién hanh ghi macro, dat tén macro la Kiem_tra. a Go 86 1.2 vao 6 dé ri tién hanh dinh dang lam dam, nghiéng 86, can s6 vao gitva 6 va chon mau dé cho sé trong 6 B3. 3. Khi céng viéc hoan thanh, ban chuyén sang 6 C3. Sau dé bém nut divng ghi macro 4t om Bay gid, ban kiém tra xem macro lam viéc nhw thé nao bang cach bam phim Alt+F 11. Trong cira s6 VBE, ban mo module 6 chtva thé tuc vira duoc ghi va sé thay ndi dung nhu sau (da lvoe bét nhing ché tréng khéng can thiét): Sub Kiem_tra() \Kiem_tra Macro ‘Macro recorded 12/31/2006 by PhanTuluong Range ("B3”) .Select ActiveCell.FormulaR1Cl = “1.2” Range (“B3”) .Select Selection.Font.Bold = True Selection.Font.Italic = True With Selection -HorizontalAlignment = xlCenter i End With Selection.Font.ColorIndex = 3 ; Range (“C3”) .Select End Sub Trong thi tuc trén, ban sé thay nhiing doan ma lénh ty nhién xuat hién (gach 6 gitra). 86 chinh la nhéng cai dat mac dinh sn trong dinh dang 6 cita Excel ma chung ta khéng hé can thiép toi. 4.3- Ctra sé Immediate Trude khi nghién ctru vé ngon ngé VBA, ban hay xay dung vin tir vung trong VBA cho ban. Lam thé nao dé ban thu hién céng viéc 46 nhanh chong va khong bj mét méi? Lam thé nao dé ban hoc duc nhiing cau lénh VBA? Civa sé Immediate sé gilip ban tra Idi cdc cau hdi trén. Tai clra sé Immediate, ban nhap vao cau Iénh VBA don gian, sau dé bam Enter, Excel sé kiém tra 42 va thc hién cau lénh dé. Néu ban muén tim hiéu thém théng tin thi ban thém dau hi (?) 6 trude thay vi g6 chit Print, két qua sé thé hién ngay & dong dui (hinh 4-8) Voi thi tuc ho&c ham, ban phai xay dyng chuong trinh theo dung quy dinh cia ng6n ngi VBA thi moi cé higu Ic. Qua trinh thy hién (thi hanh macro, tinh todn ham) dién ra lién tuc va rat nhanh, ban khong thé theo dai, kiém tra tung buc mét cach binh thudng. Cai hay cla clva sé Immediate la cho phép thuc hién ting cau lénh mét, két qua thé hién ngay trén ctra sé Excel hay ctva sd Immediate. Definition Shih+F2 [| RE vBaProjeci Last Position Ciri#shift+r2 = 93 Merosofl «= al num3 = 30 tri trung binh la " ¢ el, num2, mum3) =" § numl § Chr (13) qum2 ¢ Chr (13) © "numa Object Browser F2 40 11] 2 [ue nh Shoott \ sheet2 { shests / [Rea tra sé Immediate 43 Vi du tai hinh 4-8, tng cau !énh thu hién céng viée nhu sau: Worksheets (“Sheet2”) .Activate ‘Kich hoat Sheet2 Range (“A2”) .Select ‘Chon 6 A2 (béi den) Range ("B5") .Value= “Nganh DCCT” ‘Thé hién “Nganh DCCT” trong 6 BS Range (“B5") .Font.ColorIndex = 3 ‘Gan mau dé cho chit tai 6 B5 Range(“B5”) .Font.Bold = True ‘Gan chir dam tai 6 BS Trong qua trinh thy hién ma gap I6i, cia 86 VBE sé thong bao ngay. Vi du nhu hinh 4-9, bang tinh Sheet4 khdéng tn tai trong Modau.x1s, ctr so VBE sé bao Idi. Hinh 4-10 théng bao khi ban chon mét sheet khéng tén tai trong workbook. eactivelarkbook . Name Modau. xls 2Sheets. Count 3 ?Activesheet, Name Sheet2 | VorkSheets("Sheet4"). Select Subscript out of range Help i Hinh 4-10: Cifa s6 bao 161 4.4- Hiéu chinh trong VBE Ctra sé VBE (hinh 4-1, 4-4) co khu vy soan thao code tréng gan giéng nhu Word, ban cé thé dé dang tao nhing thay ddi trong dé nh bé sung hay b6t di ndi dung, téi vu, rut gon ma Iénh tha khong can thiét,... Cac phim mii tén trén ban phim dugc stv dung dé di chuy&n chudt lén, xudng, sang trai, sang phai, sao chép, cat dan, tim kiém, thay thé,... giéng nh trong Word Dui day la mét sd thay ddi chinh co thé thuc hién duoc: i 44 4.4.1- Thay déi tén cua thé tuc Trong trudng hop ban musén thay ddi tén cia tht: tue vi ly do nang cAp chwong trinh hay vi nhieng ly do khac, ban khéng thé thurc hign c6ng viee do trong Excel ma bat buéc phai thy hién trong civa so VBA. Vi dy, ban od thé thay dai tén macro Address_abs thanh Dia_chi chang han, chi can gé néi dung Dia_chi thay thé Address_abs trong dong Sub Address_abs(). dng thoi, ban cling stra ndi duhg ghi cht phia duéi. Ban co thé kiém tra két qua stva déi trong hop Macros Name ctia ctva sd Macro khi bam vao phim Alt+F8 tai Excel. | Sub Dia_chit) | Range ("B3") Select Range ("53") Select — ActiveCell.FormulaRICl = "Nguyen Vo ActiveCell.FormulaRici Hinh 4-11: Thay déi tén ciia thi tuc 4.4.2- Sia doi m4 lénh trong thd tuc Nhu da dé cp, chire ning ty ghi macro sé ghi lai toain b6 nhiing cai dat mac dinh trong Excel. Vi vay, mot s6 ma lénh sé khdng can thiét va nén xoa bd. Ching ta rit ngan thi tue Kiem_tra lai baing cdch xod bé nhting ma lénh tha (duge gach 6 gitra), cach thyc hién giéng nhu & trong Word. Két qua nhu thu tuc dudi day: Sub Kiem_tral() ‘Kiem_tra Macro ‘Macro recorded 12/31/2006 by PhanTuHuong Range (“B3”) .Select: ActiveCell.FormulaR1Cl = “1.2” Range (“B3”) .Select. Selection.Font.Bold = True Selection.Font.Italic = True With Selection HorizontalAlignment = x1lCenter End With Selection.Font.ColorIndex = 3 Range (“C3”) .Select End Sub 45 Ban hay chay thi thi tuc trén, chc chan két qua van nhu luc truéc khi stva. Nhu vay, sau khi ghi macro ban nén loai bé nhing doan ma lénh khong can thiét, tranh viéc Excel thuc hién nhieng céng viéc thtva va tht tuc dai dong. Dé thue hién dug viéc loai bd nhirng mé lénh thiva thi ban: phai so sAnh gira cong viéc da thy hién tr ban phim véi néi dung ma cla macro ghi lai, tt dé tim ra sw khdc nhau gitra ching. Ngoai ra, ban phai cé nhieng hiéu biét nhat dinh vé VBA mdi c6 thé chinh stra mét cach hop ly va khéng sai sot. Chung ta lai quay tré’ vé tht tuc Address_abs duoc ghi tai muc 2.1, ndi dung thu tue nh sau: Sub Address_abs () ‘Address_abs Macro ‘Enter address starting in cell B3 Range ("B3”) .Select ActiveCell.FormulaR1Cl = “Nguyen Van Hung” Range ("B4”) .Select ActiveCell.FormulaRICl = “Lop DCCT-DKT K48” Range ("B5”) . Select ActiveCell.FormulaR1Cl = “Truong DH Mo Dia chat” Range (“B3:B5”) .Select Selection.Font.Bold = True Selection.Font.Italic = True Range ("B6”) . Select End Sub Ban da thay thi tuc Address_abs t6i wu chwa? Cau tra Idi la chua. Ban co thé rut ngan thi tuc dé lai ma van dam bao tht tuc hoat déng binh thuong Ta co thé thay hai dong lénh: Range ("B3”) .Select ActiveCell.FormulaR1Cl = “Nguyen Van Hung” bang mét dong nhu sau: Range (“B3”) .FormulaRICl = “Nguyen Van Hung” Két qua stra déi nhu sau: Sub Address_abs() \Address_abs Macro 46 “enter address starting in cell B3 i a ikl Range ("B3”) .FormulaR1Cl = “Nguyen Van Hung” Range ("B4”) .FormulaR1Cl = “Lop DCCT-DKT K48” a Range (“B5”) .FormulaR1Cl = “Truong DH Mo Dia chat” I Range ("B3:B5”) .Font.Bold = True i Range (“B3:B5”) .Font.Italic = True Range ("B6”) .Select i End Sub Nhw ban thay, thu tuc da duc rat ngdn dang ké. Bay gid ching ta bé sung thém théng tin vé tudi, qué quaén cho anh “Nguyen Van Hung” nay vao cac 6 BG, B7 6 phia duoi. Két qua thii tue da bd sung nhu sau: Sub Address_abs1() i ‘Address abs] Macro i ‘Enter address starting in cell B3 : Range ("B3”) . FormulaR1C1 Nguyen Van Hung” | Range (“B4”) .FormulaR1Cl = “Lop DCCT-DKT K48” 4 Range (“B5”) .FormulaR1Cl = “Truong DH Mo Dia chat” i Range (“B6”) .FormulaR1Cl = “Tuoi: 21” 7 Range ("B7”) .FormulaR1Cl = “Que quan: huyen Gia Loc - t Hai Duong” (cing 1 déng) | Range ("B3:B7”) .Font.Bold = True 4 Range ("B3:B7”) .Font.Italic = True : Range ("B8”) .Select End Sub Bé kiém tra tht tuc trén hoat dong nhu thé nao, ban di chuyén chudt vao trong bat ctr ndi dung ném trong th tuc dé (tén thai tuc phai hién thi trong Hop thi tuc, sy kién), sau dé vao menu Run va chon Run Sub/UserForm (hoac phim tat F5) nhw hinh 4-12. anita Sau dé vao View/Excel (phim tat Alt+F11). Luc dé, clva sé MVB van hién hiru trong Excel. D8 déng ctva sé VBE va tro vé Excel, trong civa sé VBE ban vao menu File, sau dé chon Close and Return to Excel (phim tat Alt + Q). 47 | Range ("B3:B7") .Font. Italic = True | 1 6h6Um Cle _| Hinh 4-12: Thc hign tha tuc Address_abs1 trong ctfa s6 VBE khi con chudt nam trong EET | | Aiguyen Van Hung | 4 Lop OCCI-OKT Kas | {5 Trnong OH Mo Dia chat le Thi 2 | 2 bow gan: hajon Gi Lox Hai Duony | 3 | Hinh 4-13: Két qua thyc hién thd tuc Address_abs1 4.4.3- Tao thém Module trong cia s6 VBE Néu muén bé sung thém mét module, ban vao menu Insert va chon Mod ule. Ngoai ra, ban co thé bé sung UserForm (bang diéu khién) hay Class Module theo y muén. Cach xay dyng UserForm dugc dé cap trong muc 19.2 = vonvvoiec(adive © = Microsoft Excel Of Fade : UH sheet! Gheokey~ 7 Jp3") .FormulaRici = "Ng Hinh 4-14: Thém mét module mdi 48 i i Khi bam vao menu Module, mét module réng sé duo tao ra voi ten mac dinh theo thir tu Module1, Module2, Module3,... Ban c6 thé xéy dung cae ham va thi tue & bén trong Module mét cach thodi mai ‘Modules Module Alphabetic | Categorized qo) Bosung Hinh 4-15: Module3 duc tao ra va ban thay tén bang Bosung Dé dé quan ly, ban c6 thé déi tén cla module vira duoc tao bang cach chon tén module, sau do vao ctra sé thudc tinh Properties dé thay déi tén thanh Bosung (trong Name). Sau a6, ban c6 thé x4y dung cdc thi tuc hay ham trong module Bosung nay. YBAProject ( [= G8 Mice Ghi chi: Méi module cé thé cha duoc nhiéu tht tuc hoac ham. Voi nhing dy an lon, ban nén co phuong phap quan ly module mét cach cu thé, rO rang. Nén phan chia r6 rang nhom module chiva tht tuc, module chira ham va dat tén cho module do. 4.4.4- G& bé module Khi muén gé bé mét module nao dé trong dy an VBAProject, ban chon tén menu do (vi du nh Bosung). Sau dé ban bam chudt phai va thyc don tat hién ra, chon Remove Bosung... (hinh 4-16). Khi dé, clra s3 MVB hién ra hdi ban cé xuat module Bosung truéc khi g@ bo nd? Ban chon Yes dé Iwu lai truéc khi g@ bd (néu chon No thi sé khong lu lai). Module Bosung sé wu Iai voi tén *.bas. Ban cé thé mé file via duge Iwu lai dé bang VB 6.0 hoac tir Notepad 49 eae Propzeti. wert » pest a ew Brot Fama eb Rin Cumry Dayo Ioob Enis Whdow Ho Bea RAB bd | cotegsed | Pai eae ly ject Wrage eid: a cesses es = mente) A baneberabn 604) meee ees x : / Sigh Selectson.Font : id (ame) os Hane = "arse Retires th ae din code to Ps Size 732 Heatly afar, cnl or dos a Fie Edt Format View Hoip [attinute VB_Narne = “Bosurg ‘Sub Phim {019 Phirm_tat Mero Macio recorded 2728/2007 by Phan Tu Huong " Keyboard Shortcut: Cir} Range('C5") Select ActiveCellFormulaR 1C1 = “Helio Wer! Range(C5") Select Selection Font. Bold = Te Selection Font Gelosindex = Hinh 4-18: Mé module Bosung.bas tir Notepad 50 Chuong 5 LAM WEC VOI FILE EXCEL CO CHUA MACRO 5.1- Str dung chive nang Security May nam gan day, do virus macro phat trién nén Microsoft di bd sung thém ché dé an toan trong cac tng dung. Chtre nang Security diéu khién su lam viée cla macro, tire 1a c6 thé cho macro hoat dong hoac khong hoat dong. Voi che nang diéu khién dé, ban sé yén tam hon Khi sir dung Excel trong cong viée. Dudi day la cach str dung chire nang Security trong Excel 1, Vao menu Tools/Macro va chon Security (hinh 5-1), clra sé Security hién ra. 2. Trong Security, tai tab Security Level co 4 truéng hop chon nhu sau - Very High: Dat ché do an toan rat cao, cdc macro khéng thé thuc hién duoc, chi try macro ctia Office. Khi mé file c6 macro thi sé hin bang théng bao nhu hinh 5-2. Ndi dung théng bao cdc macro da bi v6 hiéu hod - High: Dat ché dé an toan cao. Chi nhiing macro duge xac nhan mdi co thé thyc hién, cac macro khac bj v6 higu héa. Hé co macro duoc xac nhan, ban phai dang ky trong menu Tools\Option\Security\More Macro\Trusted Pub- lisher. Khi ban mo file ¢6 macro thi sé théng bao cac macro da bi v6 higu hoa nhu hinh 5-3. - Medium: Dat ché 6 an toan trung binh. Khi chon truéng hop nay, néu mé file cé chtva macro thi Excel sé canh bdo nhu hinh 5-4. Ban cé thé Iva chon Enable Macros dé macro hoat déng, hoac Disable Macros dé macro khéng hoat dong. Trong trwong hgp file cla ban khéng st dung macro, néu khi mé Excel canh bao nhu hinh 5-4 thi file cia ban da bi nhiém virus macro. - Low: Khéng dat ché dé an toan, tlc la Excel khong canh bao bat ctr van a8 gicd Nhu vay, khi ban st dung VBA nén dat Security Level & mirc dé Medium hoae Low. Khi dé cde thé tuc hoac ham moi hoat dong duc. Rat nhiéu 51 trudng hop macro khéng hoat dong dug khi dé ché do Security Level & mtrc dé Very High hay High ma nguoi str dung khéng r6 nguyén nhan. C) Vory High. Cnly macros installed in trusted focathons wil be allowed Oitigh. cry signedacros rm trated suaces wi be slowedto ‘ns Uegpedimecs re sbi bk, fk @ Sedum, You can choose whether or rst to tun potently unsafe ° | asap, 4 Macros, ahs seociniin sony GEE Hinh 5-1: Vao menu Security va cifa sé Security “Macros are dsabled becauise the securty lvelis set to Very High, To run the macros, change the secutty level toa “lower setting ond vey the macros ate signed andtiusted ‘Macros are dsatled because the securty level set to High and a datally sianed Trusted Certficate tick attached to the eattos. Torun the mszros, change the secury level a lower setting (not recommended), oF ‘request the macros be signed by the author uang a certfieate issued by a Certdicate fulhoniy. Show Help >> Hinh 5-3: Thdng bao khi mé file cd chita macro d ché dé High Macros may contain virus sualy Safe to disable macros ate leatinate, you right lase soime Functionally, Hinh 5-4: Canh bao macro chifa trong file Trong Excel 2007, che loan ea co eel ee nhieu thanh phan hon va Excel Options ti nut Office Button (nut hinh tron to phia trén, bén trai chia ctra sé Excel 2007), Sau dé, chon menu Trust Center trong otva sé Excel Op- tions (hinh 5-5a), tiép tue chon muc Trust Center Settings... Tiép theo ban tuy chon nhiing cai dat trong ctva sé Trust Center (hinh 5-5 b). Ban sé thay ngoai macro, Excel 2007 con thiét lap déi voi ActiveX, Add-ins, Message Bar,... Cai dat mae dinh trong Excel 2007 la toan b@ macro khéng hoat déng, néu ban dinh chon myc nao thi hay bé danh dau trong hép kiém tra. Ban c6 thé cai dat chi tiét tai cdc muc khdc. Formvios | Proofing Cusomice Menage Ba Developer Macto Settings bad-tne Message Bar i ch | tio comer External Content |) Ei) Tes access te the WBA project abject model Privacy Options (a) Hinh 5-5: Menu Trust Center va cc menu chifa trong Trust Center O ché a6 cai dat mac dinh, khi ban mé file c6 chtra macro, Message Bar hién ra canh bao vé an toan. Khac voi Excel 2003, tuy cai dat khong cho macro hoat déng nhung Excel 2007 van cho phép hoat d6ng tré lai khi ban 53 vao Option trong Message Bar, sau d6 chon nut Enable this content trong clva sé Microsoft Excel Security Options (hinh 5-6). Ngoai ra, ban co thé thay 4) cdc mac dinh khac khi bam vao Open the Trus Center. VBA bo SungL icon Date Review | @ security Waring Some seve 0 “ Enaoek 4 Danh sach ‘Gidi tinh) 2 Nguyén Van An | Nam’ | 3. Tin Van Binh \4 (Nguyén Thanh Hoa | | 6 Ls Thi Hang ay @ “ Security Alert - Macros & ActiveX. Macros & Activex Macros and one oF mere yve been dsabled, This actve content might, contain viruses or other security hazards. O9 nat enable thi content unless you tust the source ofthis fle Warning: It is not possible to determine that this content came from a trustworthy source. You should leave this content disabled unless the content provides critical functionality and you trust its source. oce inforreator Fie Path: 0:\PTH\BsigangiBAIVBA_bo_ sung. xls © Help protect me & G Enable thie conte isinarnn content (recommend Hinh 5-7: Digu khién dé macro hoat dong trong ta chon Enable this content 5.2- Sw dung cae chong trinh diét virus Hién nay virus macro trong Excel phan lon co ngudn g c tt nue ngoai Nhiing virus d6 66 kh vo higu chire nang canh bao trong Excel. Vi vay, 54 viée nhan biét file Excel co bi nhiém virus khon pau tién ban vao menu Teols/Macro va chon thu myc Macros. Trong clva sd Macros ban tim xem cé thu tuc nao fa trong danh hay khéng? Néu cé thd tue nao la ma ban khéng thé siva (nut edit bi mo) hay xod duge (nut delete bj mo) thi dé co thé la virus. Ngoai ra, con mot sé virus duoc xay dung bang Macro4 trén bang tinh cling gay nhiéu phién toai. Thong thong cac bang tinh chtva virus dé dé An va dé kiém tra, ban vao menu For- mat/Sheet rai chon muc Unhide. Néu thay sheet nao co ndi dung Ia thi xoa di, dng théi ban xoa file khéi déng trong thu myc XLSTART. thi khéng phai don gian hn 2-4), Phan lon céc chuong tinh diét virus cla nue ta hién nay khéng phan biét dug virus théng thung va macro duge xay dung trong VBA. Vi dy nhu chuong trinh BKAV hoac D382, day la hai phan mém diét virus rat phé bién & trong nue va duoc phép str dung mién phi. Néu khéng can than thi cdc chuong trinh quét virus nay sé xoa bé toan bd ma ban xay dung trong VBA. Khi d6, nhérng tng dung cé st dung VBA sé khong sty dung duoc nia Dé cdc macro duge an toan khi str dung chuong trinh BKAV, cac ban Iuu y nhiing van dé sau: = Khi khdi dong chuong trinh quét virus BKAY, ctra sé BKAV hién ra nhw hinh 5-8. Khéng duoc chon muc Xoa tdi ca macro va muc Diét khong ean hoi - Trong qua trinh quét virus, BKAV sé lam tudéng cae macro ctia ban lap ra 4 mot con virus nao a6 (vi du nhu WX97Macro.New nhu hinh 5-9). Néu ban chon Yes thi toan bé macro sé bi xo. Trong truéng hop dé, ban chon No. Néu chang may bam vao Yes, ban co thé phuc hdi lai ca macro bang chive nang “Sao luu trudec khi diét" & duoi. True khi diét virus trén file, thi cac file nhiém virus sé duoc sao leu lai trong thy muc C:AProgram Files\Bkav2006\Backup (hodc duéng dan do ban cai Bkav) dé dé phong trvdng hop rui ro, Qua trinh sao Iwu sé khéng dién ra khi dung wong con tréng cita 6 cteng chia thu myc backup nay nhé hon SOMB. Sau 15 ngay, cac file sao luu nay sé ty dong bj xod di dé tiét kigm cho dung long 6 dia. Vi vay, néu chang may cdc chuong trinh trong VBAProject bi xoa thi ban phai phuc héi ngay, tranh trudng hop vwot qua thoi gian Iuru git? trong thur muc backup. Noi tém Igi, ban khong nén sir dyng cde chong trinh diét virus trén khi ban thudng xuyén str dung VBA trong céng viée, ma sir dung cac chuong 55 trinh diét virus cia nuéc ngoai nhu Symantec antiVirus hay AVG Antivirus, Cac chuong trinh nay c6 kha nang phan biét rt (6t gitva virus va macro tron¢ VBA. Néu file Excel cia ban co c virus macro va macro trong VBA thi ci chuong trinh cdc chong trinh quét virus trén sé quét sach virus macro d6 Dy an VBA cia ban van an toan Bie irene Eas Bach Khoa AntiVirus Professional ia. | UeUodste | eboeaiée | anes | Ueoddia Cronies Lia care © ThebSemasauso Flechuong inh «| _Ditthdog edn © chem Barabahdog 7 evinbla Sookie iit hn ius ta Wlebeterie & Nap i dena © Chant me restless 1 Ene eoce | 16195-2006 Nowra 14 Gung Grown Qe DK thos Bach Khoa AntiVirus Profession Tab chan Nh ag | vids Vina yi vue WASTEBEION Hinh 5-9: BKAV [am tuéng macro trong VBA la virus Chuong 6 UU, NHUDC HEM COA cHife NANG TU GHI MACRO 6.1- Wu diém cia chive nang tu ghi macro Chive nang Record Macro ghi lai nhéing gi ma VBA thy hién la cach hoc rat hay, gitip cac ban cé thé nd 6i twong va thudc tinh cilia nd, nam dug trinh ty cdc buée thy’ hién céng viée. Chir nang nay hd tro tich cure nhéng ngudi mdi bi tim hiéu vé VBA. Ban co thé ghi lai mot sé cong viée, sau d6 xem lai nhiéng ma lénh dug ghi va tim hiéu chive nang cia chting Ngoai ra, voi mdt sé céng viéc néu khéng st? dung chive nang ghi macro thi rat khé thye hién, tham chi khdng thé the hién néi. Vi du nh trvong hop tha tuc sp xép lai danh sach theo tht tu’ tang hay giam dan, Néu suv dung chtre nang Sort cia Excel bang VBA thi sé rt khd, vi co nhiéu théng tin phai xt? ly. Nhung vei chic nang ty ghi, ban cd thé dé dang tao ra thi! tuc thyre hién céng viéc trén bang cach ghi lai viéc thi hanh chtre nang Sort trong Excel. Két qua thé hién tai Hinh 6-1, Hinh 6-2 va Hinh 6-3. Ngoai ra, con truéng hop nhu xay dyng va hiéu chinh bidu dé trong Excel, ban bat bude phai st: dung che nang ty ghi macro. ascending CO deseendinn sheader ow, Hinh 6-1: Sti dung chive nang ghi macro dé sap xép lai danh sich trong “A18:C33" 57 sep Macro Macre recorded 4/23/2 Range ("AL7:C33") . select selection, sort Keyl:=Ranga("AL6"), orderl:=xlascending, _ Header:=xl6uess, Ordercustom:=1, Ma orientation Range ("D19") Gioi tinh Ban Narn Bang Nara Nam__| 27 (Khanh 28 [Minh [Sinn Thanh | [Tuan Hinh 6-3: Két qua sip xép lai theo c6t “Tan” 6.2- Nhugc diém cua chive nang ty ghi macro Ngoai nhting uu diém nhu da dé cp trong cac muc trén, chic nz ang ghi macro co nhirng han ché nhat dinh. Vi du, ban sé khéng thé lay duge néi dung hay xac dinh mau trong 1 6, khéng thé so sénh gia tri gitra cac 6, khong igo duge ham riéng,... bang chive nang ghi macro. Nhu vay, néu ban chi str dung chive nang tu ghi macro thi sé con nhiéu han ché. Duoi day la danh sAch nhiing céng viée ma chtre nang ghi macro khong thé ty thuc hién duo: - Cac kiéu vong lap (Do... Loop). - Cac kiéu hanh dong theo diéu kién (st? dung if... Then). 58 _ Khai bao kiéu gid tri cho bién - Gan gia tri cho bién. - XW ly va chuyén déi gitra céc kiéu dir liu. - Hign cdc thong bdo giao tiép voi ngudi str dung (Pop-up Messages), - Hién cdc hép thoai diéu khién (Dialog Boxes). - Tao lién két ty dng voi cdc chuong trinh khac trong moi truong Windows, . Nhu vay, bat buéc ban phai bé sung ma lénh VBA vao trong macro hay phai xay dung mot macro mang tinh dc lap dé thyre hign hing bal toan phire tap hon. Khi dé, viéc str dyng chire nang ghi macro thuan tuy tro nén khong hiru dung niva. Tuy vay, khong cé nghia la chive nang nay da mat tac dung ma nguoc Iai, né van song song hé trg tich eye cho ban trong con duong chinh phuc VBA day gian nan va vat va Trong céc chwrong dudi day, ban cé thé Kham pha duge nhiéu kién thir vé ngon ng@ lap trinh VBA. Chi ¥ hai thuat ngir VBA va VB trong mét sé trvong hop duge stv dung dung nh nhau, vi déu ¢6 thé dong tho’ sty dung trong VBA hay VB. Chung chi khac nhau 6 mdi trudng va déi tugng lam viée. Ning kién thire nay déu bé ich cho nhéing ai dang nghién etvu vé VBA hay VB. 59 Chuong 7 NGON NGO VISUAL BASIC FOR APPLICATIONS 7.1- Cac déi twong (Objects) Visual Basic hay VBA la ng6n ngit lap trinh hung déi twong (object-oriented). Diéu dé cé nghia la cac thanh phan trong Excel co thé coi la cdc déi tong dé ban diéu khién, can thidp t6i. Déi twong chinh la workbook, worksheet, 6 va khdi 6 (vung) trong worksheet, biéu dé, thanh céng cy,... ma ban sé gap trong mét sé vi du vé diéu khién trong Excel. TAt c& cdc déi tuong trong VBA dugc t6 chirc theo hé théng cdp bac. Vi du Excel chinh la déi tuong Application, day la déi tong Ion nhat. Bdi tuong Application cé chtva cac déi tuong khac nhu cc workbook hoa nhing thuc don lénh. Nhieng thay ddi xay ra trong déi tong Application anh hung dén toan bé ndi dung trong Ung dung, Béi tveng Workbook c6 thé chtra cdc déi twong worksheet hoac cac bidéu dé (Chartsheet). Con lam vige déi véi cac déi tueng giéng nhau thi sao? Néu ban mo mot workbook méi va lam viée trén cac worksheet, ban sé khéng thay duoc sy khac biét gitra cac worksheet dé. Nhom cia nhiing déi twong gidng nhau duoc goi la tp hop (collection). Vi du nur tap hop worksheets bao gém todn b6 cdc worksheet trong Workbook lién quan. Tuy cé cac diéu khién gidng nhau nhung tap hgp (collection) khac voi déi trong (object). éi tung cé thé chi la don 1é nhung tap hop thong fa sé nhidu (thém dudi s & sau). Vi du Workbooks, Worksheets 1 mdt tap hop cla cdc workbook, worksheet Dé dé hinh dung, chung ta co thé lay MOt vi dy nhu: mét chiéc xe may cia Honda, c6 thé coi !a mét déi tong. Honda o6 nh nhu' Future, Future I, Future Neo, Super Dream, Wave 100, Wave RS, Wave «, Wave a+,... Vay, ta c6 thé xem xe may cla u ching loai xe may 1g Honda la mét tap hop nhém nhw (collection), tap hop nay ¢6 cac déi trong cung nm trong mé Future (gém Future, Future il, Future Neo), Wave (Wave 100, Wave RS. Wave a, Wave u-+) Bang 7-1: M6t sé déi tueng chinh trong Excel Doi tuong Mota [Application | Chinh f& ting dung Excel, ehifa toin b9 eae d6i tong ben wong nd Workbook | ia file Excel don fe chia toan bo cae worksheet, biéu dé sheet F Worksheet _ | la sheet don ié chéa cde 6 (cell), d0i twong d6 hog trong sheel,.. Range Tao hay Khoi 0 [call ko don Ie ~ Charater Ja ky don Ié trong 6 = Hinh 7-1: Biéu dé cdc déi turgng trong Excel Muén diéu khién déi tugng Range, ban phai tao tham chiéu dén no. Dé cé tham chiéu dén duge déi twong Range, bat dau tw vi tri dau tién cla biéu d6 va thuc hién theo cdc dong phia dui. Dau chém Ia ky tu duong dan toi cp di tong khac. Véi cach do, khi tham chiéu dén déi twgng Range, ban sé tao tham chiéu theo thtr ty nhu sau: 64 Application. Workbook.Worksheet.Range Théng thong cac déi tweng ma ban st? dung du nam trong déi tong Application nén cé thé bé qua déi tugng Application (vi du cau lénh & trén co thé rat ngan thanh Workbook. Worksheet.Range). Vi du vé cdc déi tueng va tap hop nhu sau: Application. Workbooks tham chiéu dén tat ca workbook dang m@ trong Excel Workbooks. |tem(1) tham chiéu dén workbook dau tién va duoc goi tat la Workbooks(1). Workbooks(“Baigiang.xIs") sé tham chiéu dén workbook tén do. Workbook thung chtva cdc worksheet, trong méi worksheet dé chiva nhiéu 6 (cell). Ban cé thé tham chiéu dén 6 B3 nhu sau Workbooks(“Baigiang.xIs”).Worksheets(“Shect1”).Range(“B3") Sheets la tap hop cac déi twgng Worksheet va Chart (biéu dd) trong ActiveWorkbook. Sheets(“Year2006”) sé tham chiéu dén déi tuong sheet cd tén la Year2006. Charts(1) sé tham chiéu dén déi tong Chart theo thtr ty tab (1 la dau tién). Workbook dugc kich hoat thi dug goi la ActiveWorkbook (con goi la hién hanh), worksheet nao dang dug kich hoat thi dugc goi la ActiveWorksheet Néu co vai worksheet dang cling hién thi trén man hinh, worksheet nao dang c6 chudt & trong né thi dugc kich hoat. Néu ctra sé Excel co vai workbook dang hién thi, workbook nao dang chtra worksheet dug kich hoat thi duoc ggi la AvtiveWorkbook. Néu ban khéng muén thu’c hién riéng trén workbook hay worksheet nao, VBA sé thy hién trén ActiveWorkbook hay ActiveWork- sheet (mac dinh). Con néu thyc hién trén déi tung nao dé theo y mudn, cé dong dan cu thé nhu 6 trén. Theo théng ké, Microsoft Excel e6 hon 100 déi tong. Bang dui day la nhGing déi tugng co ban trong Microsoft Excel theo sy phan cp ti lon dén bé. Mdi déi tong c6 doi séng riéng cla nd. N6 cé nhiing dac diém ma ta goi la thudc tinh (properties) va nh&ng chtre nang riéng biét ma ta goi la phuong thie (methods). Cac déi tong chinh trong Excel sé dug dé cAp riéng tai Chuong 8. 7.2- Cac phwong thtre (Methods) Phuong thtrc la mot dang chuong trinh gan lién voi déi g thy ign mot hay nhiéu hanh dong. Phuong thtre khong tra vé gid tri nhu 62 tnudc tinh. Ban khéng thé gan gid tri cho phuong thre nhung cé thé truyén cac gia iri (tham s6). Méi diéu khién cé nhieng phuong thie khdc nhau, nhung van cé phuong thire rat théng dung cho hau hét cdc didu khién, Ngoai ra, phuong thc cé nhiing tham sé Iva chon riéng dé chi dinh hanh dong nhu the Cac phuong thire cé thé dug coi la déng tir. Néu phuong thtrc khéng co tham sé thi ct phap nhu 6 dudi day: Object .Method Con néu phuong thtrc c6 cac tham sé thi cd phap nhu sau: Object .Method (argumentl1, argument2,..., argumentN) di twong Range cé rt nhiéu phuong thtrc, du6i day la mot sé phuong the chinh thong siv dung - Phuong thie Select Phuong thtre Select dling dé chon mdt khoang nhiéu 6 (giéng nhu the hién b6i den trong Excel). Vi dy sau day chon vung "A1:A12" cla worksheet dang hoat déng (active) Range ("Al:A12") Select Cho y rang true khi chon mét ving thudc worksheet nao dé thi phai am worksheet dé dug kich hoat true. Néu khéng, dong lénh trén sé chon mat vung trong worksheet nao dé dang kich hoat ngoai y mudn, hoac c6 161 xay ra néu VBA khong xac dinh déi tweng chon. Vi dy dé chon ving "A1:A12" trong Sheet1 thuéc Bosung. xls, ban thyrc hién cdc déng lénh sau: Workbooks ("Bosung.xls") Activate 'Kich hoat workbook Bosung. xls Sheets ("Sheet1") .Activate ‘Kich hoat sheet Sheet] Range ("Al:A12") Select ‘Chon ving AL:A12 Tai dong lénh tht 2, cé thé thay phuong thir Activate bang phuong thtrc Select. Phuong thtre Select khng thyc hién duge voi déi tugng workbook. Ngoaii ra c6 thé chon duge nhiéu ving cung mét Ide bang phuong thtvc Select. Vi dy nhu’ dé chon ving "C2:D5" va "G10:K20", ban st dung doan ma sau: Range ("C2:D5, G10:K20") .Select 63 ~ Phwong thirc Copy va Paste Ban cé thé sao chép hay dan trong VBA bang cach dling phwong thtrc Copy hay Paste. Phuong thirc Copy dug ap dung cho déi tong Range nhung phuong thc Paste thi ding cho déi tong Worksheet. Vi dy dui day sé sao chép ving “A1:A12" va dan tai vi tri 6 C1 Sub CopyRange() Range ("Al :A12") Select Selection.Copy Range ("C1") .Select ActiveSheet. Paste End Sub Vi du trén dug ghi lai khi thao tac boi cht’c nang Recorder Macro. fan c6 thé viét ngan lai nh sau: Sub CopyRange () Range (“A1:A12”) .Copy Range (“C1”) End Sub Ban cé thé tim hiéu sau hon vé hai phuong thtrc nay trong phan Help. - Phuong thtre Clear Phuong thtrc Clear x6a ton néi dung, dinh dang, ghi chu (comment) trong mét vung xac dinh, tra vé mac dinh ban dau. Vi du ban muén xéa ndi dung va dinh dang cia c6t D & worksheet hién hanh thi ding Columns (“D:D”) .Clear Ngoai ra, ban o6 thé Iya chon cac phyong thive chi tiét hon - ClearContents: chi x6a noi dung vung Iva chon ~ ClearFormats: x6a dinh dang vung Iya chon. - ClearComments: xoa ghi cht trong 6. - Phwong thtrc Delete Phuong thuc Delete dling dé xoa toan b6 déi tyong duge chon. Khac phuong thuc Clear chi xoa néi dung va dinh dang nhung van git? nguyén vung lua chon, con phuong thirc Delete lam bién mat han ving lua chon dé 64 va Excel sé tyr dng dua cac 6 nam bén dui khoang nay Ién (hay tty bén phai sang bén trai) dién day vao khodng vira bi x6a. Rows ("6:6") .Delete Khi xda mat khodng cht khdng phai IA xéa han mét hang hay mt cdt, Excel can biét ban muén di chuyén cdc 6 con lai vao dién day cdc 6 viva bi xéa theo hinh thie nao. Vi du sau khi x6a khoang C6:C10, Excel sé di chuyén cac 6 bén phai qua bén trai Range ("C6:C10”) .Delete xlToLeft Trong vi du trén, xIToLeft la hang s6 cho phuong thtvc nay. Ban cé thé tim ra cdc hang s6 khac bang cach ghi lai theo tac ban thye hién. Vi du: - xIDown: Hang sé 4é chuyén xudng dudi. - xIToLeft: Hang $6 dé chuyén sang trai. - xIToRight: Hang sé dé chuyén sang phai xlUp: Hang sé dé chuyén lén trén. Tuy nhién, co mét sé hang sé ma ban khéng thé stv dung duge trong diéu kién cu thé. Nhu 6 vi dy trén, néu thay x!ToLeft bang xIToRight thi khong duge vi khong thé di chuyén 6 theo kiéu nay. Con déi voi phwong thir cé tham sé nhu GoTo thi cd phap nhu sau Object.GoTo (Reference, Scroll) Phuong thirc GoTo gitp ban nhanh chéng chon cac khdi 6 (ving) trong workbook. Tham sé Reference chi ra 6 hay khéi 6 tham chiéu dén. Néu tham s6 Scroll dat la True thi man hinh sé duc cuén (ving chon sé nam & phia trén bén trai ctva s6), con néu dat la False thi man hinh sé khéng duoc cudn (ving chon sé nam & phia duoi bén phai ctva 84). Vi dy ban stv dung VBA dé chon 6 P100 trong Sheett va cuén man hinh nhw sau: Application.Goto Reference: =Worksheets(“Sheet1”) .Range(“P100"), Seroll:=True (cing 1 déng) Déi tung Workbook cé phuong thie c6 tén ld Close. Ban co thé dong cac workbook khi str dung phuong thtre nay. Néu cé su’ thay déi trong cac work- book d6, Excel sé hién thi thong bao vé viéc cé Iu nhing thay déi hay khong? Ban cé thé str dung phuong thre Close véi tham sé SaveChanges dat thanh False (mac dinh la True) dé dong workbook 6 va bé qua nhéing thay ddi trong nd, vi du nhu & dui day: 65 Workbooks (“Chapter01.xls”) .Close SaveChanges :=False 7.3- Cac thuéc tinh (Properties) Méi déi tong déu cé cdc dac diém riéng va dug goi la thudc tinh (hay ac tinh). Thudc tinh tr vé gia tri dugc thiét lap séin trong Excel hoac do ta khai bao. Thong thuong thuéc tinh digu khién hinh dng va vi tri xuat hién olla déi turging bang cach gan gia tri cho thuge tinh. Vi du nhu' dong chér trong mot 6 c6 thd duge canh [8 trai, phai, trén, du6i, 6 mau nén, dudng vien chinh Ia cac thuéc tinh cia déi trong Cell. Déi vdi déi tugng Range, mot so thudc tinh dac trung nhu Font, Formula, Text, Value, Name, Row, Column, ColumnWidth. Cac gid tri thudc tinh cla déi tung cé thé due dat theo y muén nhung chi cé mét gid tr riéng trong mét thoi diém. Vi dy nh workbook dang kich hoat khdng thé c6 hai tén tai mot thoi diém Thudc tinh cé thé dug coi nhu’ la tinh td va du9c thiét lap sir dung trong cau lénh nhu sau Object.Property = Value hay Noun Adjective = Value Vi du vé gan gia tri cho 6 dang duoc kich hoat: ActiveCell.FormulaR1Cl = “Nguyen Van Hung” Range("C3").ColumnWidth = 14 sé thiét Ip chiéu rong cua c6t cheva 6 C3 rng 14. Excel mac dinh chidu rng clia cot la 8,43 diém (point) Phan kho nhat a tim hidu duc su kién nam ngoai thudc tinh cua cac déi twong. Vi du nhw v6i déi tugng Range, ban cé thé thay font chi etia ving chon bang dat thudc tinh Font. Nhung Font cé thudc tinh Name voi cac tén khac nhau (Time New Romand, Arial,...), thudc tinh size voi co chit khac nhau (10, 12, 14,...) va cdc kiéu thudc tinh khac nhau (Bold, Italic, Un- derline,...). D6 chinh la nhding thudc tinh eta Font. Néu Font 6 cae thudc tinh, Font cling dug coi la déi tuong Range ("B4”) Select Chon 6 B4 dé lam viée Selection.Font.Name = “Times New Roman” ‘pat Font cho 6 B4 Selection.Font.Bold = True ‘Cho chi dam Selection.Font.Size = 10 ‘Cho cd cha 1a 10 Chiing ta sé tim hiéu chi tiét hon vé mdt sé thudc tinh hdu ich cla déi tuong Range trong muc 8.5.1 va 8.5.12 Chuong 8 MOT SO B01 TUONG CO BAN TRONS EXCEL Nhu Chuong 7 da dé cap, Excel chiva nhiéu déi tong 6 bén trong. Mai déi tvong cé tén, thuéc tinh va phuong thie thuc hién khdo nhau, Cac ai tuong cd suv quan ly theo dang phan cp, ttre la déi tuong lon chtra cac déi twong bé, d6i twong bé chiva cdc déi tong bé hon,... Ban 6 thé str dung VBA dé truy cap dén tiyng déi tong, thay ddi thudc tinh cling nhw diéu khién chéng bang phuong thie. Cac déi tuong phd bién thudng gap la Application, Window (Windows),’ Workbook (Workbooks), Worksheet (Worksheets), Range va Cell. Day la nhiing déi tvong thudng xuyén duge stv dung duoc dé cp riéng & chong nay. Trong qua trinh thy hién, ban co thé cd duoc sy tro’ gidp truc tiép khi bam phim F1 tai clra sé VBE hoac trong Microsoft Visual Basic Help 8.1. Bdi tuong Application Nhu da gidi thiéu trong Chuong 7, cac déi tuong dug té chic theo cau tric dac biét, duc goi Ia déi twgng va lap hop. Déi tuong i6n nhat chinh la lng dung Microsoft Excel (the Excel Application), goi tat la Application. Béi tugng Application la dai dién cho toan bé wng dung cia Excel va la mdi trvdng lap trinh VBA. Dé diéu khién déi tong Application, ban co thé thi hanh nhiéu thao tac. Viéc tac d6ng lén déi tugng Application sé anh huéng tye tiép dén toan b6 déi tyeng & bén trong Vi du nhu, Excel cho phép lu nhing cai dat ctia man hinh bang cach sw dung Save Workspace tty menu File. Thao tac Iyu gil? ving lam viée (workspace) cé thé thyc hién dé dang voi VBA: Application.SaveWorkspace “Bai tap” Doan ma lénh trén sé Ivu gid nhieng cai dat cla man hinh trong ving 1g file twong ty thi don gian nhat la mé file “Bai tap”, Excel sé dua [én nhing file hiu chinh va phuc hdi ctra sé cita ban dang lién két lam viéc voi tén la “Bai tap". Sau do ban can lam viée voi nh 67 Bang 8-1: Xdc dinh mét s6 théng sé cua ung dung (Application) Cau lénh trong Immedi ate “Thue hien 7Application.Name Xde dinh ten cla ing dung dang Kich hoat Application.Caption = "Phan mem” di tiéu dé eta mg dung cel thanh "Phan mem". Application Caption = "Microsoft Excel” Application. OperatingSystem Hien ra he diéu hanh dang sir dung ?Application.Path Hién va dung din cha Excel.exe Application. Quit ‘Thodt ra khéi tmg dung (thot khéi Excel) Ngoai ra déi tuong Application con cé mét sé thuéc tinh hu ich sau: 8.1.1- Thuéc tinh Calculation oe aos International | © | Eror Checking. Speling Security Cleulstion di Tran Custombists | Chart 2) Automatic (catctow fF © Automatic except tables | Ettertion Maxisnum iterations: {100 exer change: Workbook options update remote refer ] Save external [nk values [Clseciion as deplayed {7 cept labels in formulas [J 1904 date system Hinh 8-4: Ciza sé Options cua Excel Khi lam viée véi bang tinh c6 nhiéu céng thtic tinh toan, viéc thay déi sé ligu dau vao sé lam thoi gian tinh toan lai dang ké. Bé rut ngan th gian tinh todn, ban st? dung thuéc tinh Calculation trong cau lénh dudi day 6 dau mat thi tuc 68 Application.Calculation = x1CalculationManual Dong lénh trén co tac dung lam tam thoi ding tinh todn trong Excel. B Excel lam vige binh thuong thi 6 cudi thi tuc ban-ding quén dong lénh sau Application.Calculation = x1Calculationautomatic Dong lénh trén khdi phuc ché d6 tinh toan tw dong cila Excel khi thi tuc da the hién xong. Hai dong [nh trén lm thay déi ché d6 tinh todn trong menu Options/Calculation (hinh 8-1), 8.1.2- Thuge tinh ScreenUpdating Trong qua trinh tinh toan, cla s6 man hinh Excel ludn duoc cap nhat lai gay hién twong khé chiu (nhdp nhay). Khi dé, ban str dung thude tinh ScreenUpdating voi déng lénh & dau va & cuéi tha tue: Application. ScreenUpdating=False ‘Huy cap nhat man hinh Application. ScreenUpdating=True ‘KhOi phuc cap nhat man hinh CGng nhu doi véi thuéc tinh Calculation, thudc tinh ScreenUpdating gitip bang tinh ctla ban tinh todn nhanh hon 8.1.3- ThuGc tinh DisplayAlerts Khi lam viéc trong Excel, ban thong bat gap nhiing thong bao ty dong nhu “Do you want to save this file...”, “Data may exist in the sheet(s) selected for deletion...” khi thy hién mdt s6 céng viéc nao d6. Bidu dé gay can tro €én su hoat dong lién tuc ctia thd tue bang cach yéu cau ban phai xc nhan lai hanh dong, Thudc tinh DisplayAlerts sé giup ban diéu khién ché ¢6 tw dang théng bao. Ban hay stv dung hai dong lénh 6 dudi day & dau va cué! tha tue: Application .DisplayAlerts=False ‘Huy bé théng béo ty déng cBa Excel Application.DisplayAlerts=True ‘Khédi phyc théng bdo tw déng cia Excel Vi du vé cach xoa Sheet3 ma khéng bi théng bdo ty dong cia Excel Sub Xoa_Sheet () Application.DisplayAlerts = False Sheets (“Sheet3”) .Delete Application.DisplayAlerts = True End Sub Ngoai ra, ban con gap mét sé thudc tinh khac dug st dung trong cdc vi du 69 8.2- BGI tuong Window Déi tuong Window dai dién cho cia 86 teng dung hién thi trén man hinh: Nhiing dac tring cia worksheet nhu thanh scroll bar, 1w6i 6 la nhting thudc tinh cia ctva sé dé. B4i twong Window la mét thanh phan trong tap hop Win- dows. Tap hop Windows ctia déi tong Application chia toan bé cdc cra sb trong ting dung, nhung ngu¢c lai tap hop Windows ctia déi twong Workbook chi chtva nhiing civa sé trong workbook duge chi dinh. Window nao dang lam viéc (chtva con chudt) thi duoc goi ActiveWindow. Khi lam viéc v6i mot sé workbook, néu ban can so sanh hoac hyp nhat di? ligu hay muén nhin thay céc workbook dang mé, ban siv dung phuong thivc NewWindow, Arrange. Bang 8-2: Xac dinh m3t sé thong sé cia ng dung (Window) CAu lénh trong Immediate ‘Thue hign’ Active Workbook.NewWindow Windows. Arrange Windows(1).DisplayGridlines= False Windows(2).Activate *2ActiveWindow.Caption 2ActiveWindow.ActiveSheet. Name ActiveWindow. WindowsSt; x1 Normal ActiveWindow.Caption = "Vida" Hién workbook duge kich hoat trong cita sé moi Hién toan bd workbook dang mo trén man. hinh 86 tht nhat. Khong cho hign hudi 6 tai et Kich hoat cra sé Window the hai. Xéc dinh tén cla cia sé Window dang kich hoat. Xde dinh ten cia sheet hién hAnh trong ActiveWindow Thay déi kich c& cia s6 cha ActiveWindow nhu xINormai (binh thutmg), xIMaximized (dn hét c&), xIMinimized (nho hei e) Déi tén cia ctta s6 Window dang kich hoat thanh "Vidu". Truong hop lam vig oi cdc clra Sd Window trén man hinh, ban co thé quyét dinh cach sp xép chung. Thuéc tinh Arrange voi mét s6 tham sé sé giup ban thuc hién céng viéc nay. Tham sé nay cho phép diéu khién kiéu vi tri cac ctra sé trén man hinh, kiéu sdp xép dé duge ggi la phuong thc ArrangeStyle. Néu ban bé qua phuong thtrc ArrangeStyle, cac ctra s6 duge sp xép kiéu in ké (kiéu mac dinh). 70 Bang 8-3: Cac kiéu sdp xép trén ctra sé Window Hang so xlArrangeStyleiled 1 xlArrangeStyleCascade 7 xlArrangeStyleHorizontal 2 xlArrangeStyleVertical 3 6 sip xép theo hang ngang Cie cita sé sip x€p theo hang doc Tiled Vertical Cascade Hinh 8-2: Cac kiéu sip xép trén cifa sé Window Ngoai cach str dung gia tri haing sé trén dé s4p xép kiéu ctva sd, ban co thé stv dung gia tri tong tng. Vi du dé sap xép cac ctva sé theo kiéu tang, énh VBA sau ban viét doan ma Windows Arrange ArrangeStyle:=xlArrangeStyleCascade hoac Windows Arrange ArrangeStyle: 8.3- Ddi twong Workbook Nhu cac ban da biét, Workbook la déi tong quan ly, lu trie cac worksheet, Béi twong Workbook dai dién cho workbook trong Excel {a mét thanh phan trong cla tap hop Workbooks. Tap hop Workbooks chiva toan bé céc déi 'wong Workbook hién dang durgc mé trong Excel. Lam thé nao ban diéu khién workbook? Ban khéng thé kam vide tren worksheet néu ban khong biét cach mé workbook moi. Ban khdng thé dong workbook trén man hinh néu khdng biét cach thy hién. BS thu hién cac C6ng viéc trén, ban stv dung hai phuong thivc cla VBA, dé la Add va Close. Moi cc ban xem bang dudi day: ” Bang 8-4: Lam viée véi déi trong Workbook Cau iénh trong Immediate Thuc hién Workbooks.Add Them mot workbook mdi. 2Workbooks(1).Name Xde dinh tén workbook du tién ?Workbooks.Count Xée dinh s6 workbook dang mi. Workbooks(2).Activate Kich hogt workbook thit hai (dang md) Workbooks("Baitap.xls").Activate , Kich hoat Baitap.xls, ActiveWorkbook Saves Lita workbook dang kfch hoat véi tén fi Filename:="Baitapmoi.xls" "Baitapmoi.xls” Workbooks(1).Close Dong workbook dau tin. ActiveWorkbooks,Close Déng workbook dang dufse kich hoat vi SaveChanges:=False Khong luu nhimg gi thay déi Workbooks.C Déng todn bo workbook dang md, 8.4- Ddi tu@ng Worksheet Worksheet fa déi twong quan ly, Iwu trir cdc 6, hang, cdt va cdc déi trong d6 hoa nam bén trong (nhu cac hinh dug tao ra trong Drawing hay di khién nam trong Form, Control Toolbox). Béi trong Worksheet dai dién cho worksheet va la thanh phan cua tap hop Worksheets. Tap hop Worksheets chi#a toan bé déi tong Worksheet trong Workbook Nhu vay, cdc déi tung mang tinh phan cp, déi tong nay chtra déi kia. Vi vay, mot s6 thudc tinh, phuong thire ctia’déi tong nay cling ce thé thuc hién duoc déi voi déi tuong kia. Sau day, ching ta tim hiéu vé cach didu khién déi tong Worksheet 8.4.1- Xae dinh cdc théng tin trong Worksheet Ban c6 biét bang tinh Worksheet trong Excel lon nhu thé nao khong? Worksheet 6 bao nhiéu 6, cét va hang? Néu ban c6 quén thi hay st? dung thudc tinh Count. Két qua thé hién 6 hinh dudi Bang 8-5: Xac dinh cdc thong tin trong Worksheet Cau Jénh trong Immediate Thuc hién ?Cells.Count Nae din ton bé 6 trong mot worksheet ?Rows.Count Nae dinh s6 hang tong mot worksheet 2Columas.Count Nac dinh $6 cot 6 trong mot wor 72 367772 Hinh 8-3: Xac dinh cdc théng sé cua Worksheet va gan gid tri vao trong Worksheet 8.4.2- Nhdp di liéu vao trong Worksheet Nhérng di ligu duoc nhap vao worksheet co thé la chudi, sé hodic cong thu Dé nhap dé ligu vao 6 hoac khdi 6, ban c6 thé str dung hai thuéc tinh cia Range. 86 chinh la thuéc tinh Value va Formula Str dung thuéc tinh Value ActiveSheet .Range("A1:C4”) .Value St dung thudc tinh Formula: 4 * 25” ActiveSheet .Range("A1:C4”) .Formula Trong ca hai vi du trén, cdc 6 trong vung A1:C4 déu hién 100, dé chinh ‘a két qua cla cong thre 4 x 25. Ban c6 thé thay cong thuc bang gid tri cu thé nhu bang 8-6. Bang 8-6: Nhap du’ liéu vao trong Worksheet Cau lénh trong Immediate Thue hien Ra ‘2").Formula Nhap vo 6 C2 chudi "Excel Range(( ‘ormula = 24 hodc Nhap s6 24 vao 6 AL Value = 24 2").Formula= "=K5 * 4" Nha 6 B2 céng thife: =K5 * 4 8.4.3- Diéu khién Worksheet ‘Trong qua trinh lam vic véi céc worksheet, ban cé thé cdn bé sung them worksheet moi vao workbook, chon worksheet nao dé hodc mat nhom clla worksheet, di ten worksheet, sao chép, di chuy&n, xoa worksheet,... Mot sé Phuong thir trong bang dudi day sé gitip ban thy hién cdc céng viée dé 73 Bang 8-7: Diéu khién Worksheet en a Cau lénh trong Immediate Thyc hien Worksheets.Add ‘BS sung them worksheet méi. ?Workshcets(1).Name_ Xac dinb ten worksheet dau tién Worksheets(3) Select Chon worksheet thtt 3. Worksheets(Array(1,3,4))Select Chon uh6m worksheet thi what, thit 3.va thit 4 Worksheets("'Sheet").Activate Kich hoat bang tinh c6 tén "Sheet]" Worksheets(""Sheet2").Move Sheet? dimg trude Sheet Before:=Worksheets("Shect!") heets("Sheet3").Move Chnyéu Sheet3 dime ngay sau w orksheet du Works After:=Worksheets(1) wien Worksheets("Sheet2").Name= "BP 1" D6i ten Sheet? thank "/3T 1". Worksheets. Count Xéc dinh sO worksheet trong workbook. Worksheets. Add ‘Them 1 worksheet 6 cudi cling trong workbook ‘After=Worksheets(Worksheets.Count) ign hanh. Workshects("Sheet4") Visible = False Lam du Sheet4 trong workbook bign binh Worksheets(Array("Sheet Lam fin Sheet], Sheet trong workbook hign "Sheet4")). Visible = False hanh Worksheets("BT 1") Delete Xoa worksheet BT 1 trong workbook hign hank Nhw vay, ban sé thac mae vé cach sv’ dung phuong thtrc Select va Activate, c6 nhiing gi giéng va khac nhau? Dudi day la sy giong va khac xnhau gitva chung - Phuong thie Select va Activate oo thé hoan Géi cho nhau néu chi mot worksheet duge chon - Khi tién hanh nhom worksheet, phuong thie Activate sé quyét dinh work- sheet nao trong nhém duoc kich hoat. Nhu ban da biét khi lam viee trong Excel, chi mét worksheet duge kich hoat tai mot thoi diém Trong bang 8-7 & trén, thudc tinh Visible c6 tac dung lam hién/an worksheet bang gid tri “True” hoac “False”, cong viée nay la can thiét khi ban khéng muén ai do lam thay déindi dung cla worksheet do nhu’ bang tra, danh muc. tigu chuan,.. Tuy nhién voi cach nay, ngudi khac van cé thé phuc hoi nhiing worksheet bi 4n bang cach vao menu Format/Sheet/Unhide (hinh 8-4). Nhu vay, lam thé nao dé an worksheet ma khéng bi hien nhu tal hinh 8-4? Khi do ban phai str dung gia tri xIVeryHidden (siéu an) thay vi False. Vi du dé lam siéu an Sheet1, ban ding cau lénh sau Worksheets ("Sheet1”) .visible = *1VeryHidden hap Unhide Sheet p khac nhu dong é phuc héi nhu’ ban dau, khong thé str dung phurong pl thong thuong nhu & hinh 8-4 ma phai stv dung phuong pl fénh sau: 74 Worksheets (*Sheet1”).Visible = True ‘Hin Sheet1 Ngoai ra, ban 06 thé g& bé thudc tinh siéu dn bang cach vao civa so VBE (trong trong hop dur an khéng bi bao vé), chon déi tuong Sheet bi siéu an va tim dén thudc tinh Visible cia chting. Gia tri ca thuéc tinh Visible nhu sau (hinh 8-5) - xlSheetVisible (hoac -1) Hién sheet duoc chon. - xISheetHidden (hoac 0) : An sheet duoc chon - xlSheetVeryHidden (hoac 2); Siéu An sheet duoc chon | Sheet1 Worksheet ‘Alphabetic [categorized | Sheet False [DisplayRightToLeft False EnableAutoFiter False True False False 0 - xiNoRestrictions fo- xisheetHidden 2 - xiSheetVeryHidden Hinh 8-5: Gan tr] xISheetVisibie cho thugec tinh Visible cia Sheet 75 8.5- Di twong khéi_ 6 (range) va 6 (cell) Dé lam viéc véi déi tuong 6 hay khdi 6 trong qua trinh xt? ly hay tinh toan, VBA giip ban tham chiéu dén (chon) cdc khéi 6 dé nhanh chdng, thuan tién, Co nhiéu thudc tinh c6 thé gidp ban thy hién cdng viée nay nh Range, Cells, Offset, Rows, Columns, 8.5.1- Thuéc tinh Range Ban cé thé str dung VBA dé tham chiéu dén 6 hoc khéi 6 trong worksheet. Néu muén gan dé liéu vao worksheet, ban sé phai sir dung dén thudc tinh Range. Thudc tinh Range sé tham chiéu dén 6, khéi 6 trong bang tinh. Kiéu tham chiéu khi str dung thuéc tinh Range cé dang A1 (tén cét va hang). Dia chi 6 1u6n phai nam trong dau ngoac kép (vi dy: "A1"). Ban co thé tham chiéu dén khdi 6 khi ste dung dau hai cham (vi du: “C3:G8") hoac tham chiéu tivng 6 riéng Ié khi stv dung dau phay (vi du: “A3, C5"). Bang 8-8: Su dung cdc thude tinh Range Thuc hién Chon 6 don BI Range(""BI:B6") Select Chon kh6i 6 tit BI dén BG F4:K30").Select Chon 2 khdi 6 B2 dén B7 va F4 dén K30 Chon 6 riéng 18 C1, D2, G6 Chon cot C Chon hang 7 Range("D:G") Select Chon cot D dén cot G Range(""2:6") Select Chon hang 2 dén hang 6 Ranget 5:5, 8 lect Chon hang 2 ing 5, hang 8 Range("B:B, D:D, G:G") Select Chon co B,D va Vi du: Voi workbook cé tén Popupmenu, trong worksheet Sheet, ban gan néi dung “Trudng DH Mo Dia chat” vao 6 B3. Sau do, cho néi dung ch 6 dAm, nghiéng, mau do va nén mau vang Sub Thunghiem() Workbook (*Popupmenu.x1ls”). Activate Sheets ("Sheet1”) .Range ("B3”) Select ActiveCell.FormulaR1Cl = “Truéng DH Mo Dia chat” Selection. Font.Bold = True Selection. Font.Italic = True Selection. Font.ColorIndex = 3 With Selection. Interior ColorIndex = 6 -Pattern = xlSolid End With Range ("B4”) .Select End Sub Dé hiéu rS hon mét sé thuéc tinh da str dung trong thi tuc trén ctia déi iwong Range, ban xem muc 8.5.12. Khi ding voi kiéu khéng xdc dinh, Range tra vé mét day 6 trén sheet dang hoat déng. Dé tranh kiéu “Rau éng no cém cam ba kia”, ban hay kich hoat mdt bang tinh bang phuong php Activate truéc khi dung thuée tinh Range ma khéng cn chi ra gidi han cu thé, Dui day la cach dién vao ving “A1:H8" cac s6 ngau nhién bang cach dat céng thire cho mdi 6 trong ving ma trudc d6 Sheet! da duge kich hoat Worksheets ("“Sheet1”) .Activate Range (“Al:H8”) .Formula = “=Rand()” Ban cling 6 thé dat tén cho vung va chi cho VBA tham chiéu dén tén nay. Vidu, ban ra lénh x6a ngi dung cla mét viing cé tén “Criteria” bang cach Worksheets (1) .Range (“Criteria”) .ClearContents Néu stv dung mét tham sé (argument) ma tham s6 dé [a dia chi day 6, ban phai dinh ré dia chi do theo kiéu A1 (ding kigu R1C1 sé bi bao 16i) Ngoai ra, ban co thé thy hign déng thoi déi voi nhiéu ving tach biét nhau khi str dung phuong thtrc Union. Vi du vé su hop nhat gitta hai khéi 6 Range1 ("B5:C 10") va Range? ("F30:H32") khi sir dung phuong thtrc Union, nh@ing 6 trong vung do duoc dién day bdi céng thtrc =RAND(). Dim Rangel As Range, Range2 As Range, Vung As Range Worksheets ("Sheet1”) Activate Set Rangel = Range(*B5:C10”) Set Range2 = Range ("F30:H32”) Set Vung = Application.Union (Rangel, Range2) Vung.Formula = “=RAND()” Ghi chi: Ban cé thé ding ngo: vudng [] 48 chon khdi 6 thay vi () Vi dy [A1:A3].Select la céch chon khéi 6 giéng nhu Range("A1:43") Select 77 8.5.2- Thu6c tinh Selection Thuéc tinh nay tra vé déi tuong due chon trong ctva sé duoc kic hoat (active window). 846i tuong duoc tra vé phu thudc vao su Iva cho” hién tai. Vi du nhu hién tai cdc 6 dang duoc chon, thudc tinh Selection s@ tra vé déi tuong Range. Thuéc tinh Selection sé tra vé Nothing néu khond co su Iva chon Vi dy dui day sé xd toan b6 néi dung dang dug boi den trong Sheet Worksheets (“Sheet1”) .Activate Selection.Clear Vi dy tiép theo sé hién thi kidu déi twong VBA duoc chon Worksheets ("Sheet1”) .Activate MsgBox “Kiéu déi tugng duoc chon 14” & TypeName (Selection) Ki€u di tung duoc chon la Range { OK i Hinh 8-6: Kiéu d6i tugng Range dang duige chon. 8.5.3- Thu6c tinh Cells Thug mang la 6 don. Trong dé row Ia tinh Cells stv dung ctt php Cells (row, column) dé tra vé déi tuo sé hang va column la chi sé cot cua 6. CM" sé cét (column) cé thé la sé thiv ty cdt hay 1a tén ctia cot. Thudc tinh cell? 6. Ngoai ra, ban co tt? ay duoc tng dung nhidu khi viét cae vong 2 st dung thudc tinh Cells the ih (xem thém & muc sav ing 8-9: Str dung thuée tinh Cells Cau lenh Thuchien Cells(S, 1) Select hoae Cellst Select Chon 6 don AS Range(Cells(6,1), Cells(10, 1)).Select Chon khéi 6 AG:AL0 Cells. Select hoac Cells() Select Chon toan bd 6 trong sheet é tra vé gid tri 2000 trong 6 B3 tai Sheet2 trong workbook hién hanh, ban stv dung cau lénh Worksheets ("Sheet2”) .Cells (3,2) .Value = 2000 Va gan mét céng thie cho 6 A2 trong worksheet hién hanh: ActiveSheet.Cells(2, 1).Formula = “=SUM(B1:B5)” Cho dui cé thé ding thudc tinh Range(“A1") dé tra vé 6 A1 (khong hé nhung dung thudc tinh Cells thi tién loi hon béi ban co thé st? dung mét bién sé dai dién cho hang hoac cét phuc vu yéu cau lap trinh. Ban hay tham khao vi dy tao tiéu dé cot va hang trén Sheet! sau day. Luu y sau khi bang tinh da dugc kich hoat, thudc tinh Cells c6 thé duoc stv dung thoai mai ma khéng can khai bao mét Sheet cu thé nao vi no tra vé mét 6 trén Active Sheet Sub SetUpTable(} Worksheets (“Sheet1”) .Activate For theYear = 1 To 5 Cells(1, theYear + 1).value = 1990 + theYear Next theYear For theQuarter = 1 To 4 Cells (theQuarter + 1, 1).Value = "Q” & theQuarter Next theQuarter End Sub Khi stv dung ci phap Expression.Cells (row, column), voi Expression la mOt biéu thc tra vé mét déi tung Range va row, column [a vi tri twong déi So v6i géc trén trai cla ving, két qua tra vé la mot b6 phan ctia vung. Trong vi dy dudi Gay, VBA chi dén Cells(1,1) tire 1a 6 C5 trén bang tinh 1) .Formula = “=Rand()” Worksheets (1) .Rang.("C5:C10") .Cells 79 Ngoai ra, ban co thé két hop gitva Range va Cells dé tham chiéu dén mat ving. Ban hay st? dung cu phap Range (Cell 1, Cell 2), voi Cell 1 va Cell 2 1a 6 bat dau va 6 két thuc cia vung. Dé dat kiéu dung vin cho cac 6 trong ving, ban ding lénh sau: With Worksheets (1) Range(.Cells(1, 1), .Cells(10, 10)) .Borders.LineStyle = x1Thick (cing 1 dong) End With Ban co thé stv dung cac kiéu duong vién khac theo y muén nhu xiContinuous, x!Dash, xlDashDot, xlDashDotDot, xlIDot, xlDouble, xiSlantDashDot, xlLineStyleNone 8.5.4- ThuGc tinh Offset Thuéc tinh Offset thuong duoc stv dung dé tham chiéu dén 6 co quan hé voi 6 tly chon. Thuéc tinh nay gitip ban linh hoat trong céng vie, dac biét déi voi bang tinh cé nhiéu tham chiéu. Cong thtrc dang téng quat Offset (no_rows_down, no_cols_to_right) no_rows_down la s6 nguyén va duoc hiéu ia xuéng duéi bao nhiéu hang. Néu co gia tri am thi huéng ngug lai. no_cols_to_right a s6 nguyén va duc hiéu chuyén sang phai bao nhiéu cét. Néu 66 gid tri am thi huong nguoc lai Bang 8-10: Su dung thuéc tinh Offset ‘au lénh Thue hién Range("A1").Of (1, 3),Select 6 D2 sé duoe chon Range("D1S").Offset(-2, -1).Select O CI3 sé duge chon ActiveCellOftve Chon olen wren 1 g phai 1 cot so v6i ActiveCell Vidu 1: Nhu 6 hinh 8-7, gid thiét 6 B1 [a 6 hién hanh. Bay gio ban dung Offs 46 chir trong 6 C2 cé mau dé, C5 dam, CB nghiéng, C 9 C6 ndi dung “Xi nghiép khao sat dia ky thuat’ Sub Offset () Range ("B1”) .Activate \ Xae dinh 6 kich hoat géc ActiveCell Offset (1, 1).Font.ColorIndex = 3 ActiveCell Offset (4, 1).Font.Bold = True ActiveCell Offset (8, 1).Value = “Xi nghiép khao sat dia ky thuat” (cing 1 déng) ActiveCell.Offset (8, 1).Font.Size = 12 Range (“E9”) Activate’ Xae dinh 6 géc khac ActiveCell .Offset(-1, -2).Font.Italic = True End Sub “Format Toole dung ha Trung tam nghién cir dia ky thuat 5 Lien higp khio sat dia chat Céng ty tu van tnén khai cdng aghé va XD Mo dia chat . COng ty TNHH Nha nurcte 1 thanh vign kha sat va XD g ty Khai thé. rad nghigp knao se dia ly Mat Xi nghig 4) W\Danhsach {Sheet £ Shao / Duan J awstapes: S Ready Hinh 8-7: Sir dung Offset dé tham chiéu dén cic 6 Trong Khi lam viéc voi thudc tinh Offset, cé fic ban cn thay déi kich cé cla khdi 6 da chon. Gia dinh lic dau ta cd khdi 6 chon la AS:A10, Lam thé nao dé dich chuyén khéi 6 chon xuéng hai hang va sang bén pI Ai hai cot, sau do lam thay ddi kich oO ctia khdi 6 chon m@i? Thudc tinh Offset chi cd thé thuc trong phan dau cia thao tac, phan thr hai sé phdi stv dung thudc tinh hi khac. Excel c6 thude tinh dic biét tén la Resize. Ban cé t thudc tinh Offset, Resize dé thu hién céng vi phéi hop hai > tren Range ("A5:A10”) Select Bt Selection.Offset (2, 2) .Select Selection.Resize(2, 4) .Select Dong tht nhat phia trén sé chon khéi 6 “A5:A10", 6 AS la 6 kich hoat (active cell). Dong tht 2 s8 dich chuy&n khéi 6 chon sang “C7:C12”. O C7 c6 vi tri cach 6 A5 2 hang phia dudi, 2 cét phia bén phi. Bay gid’ 6 C7 da kich hoat. Dong cudi cing la thay ddi kich c& ctia khdi 6 chon. Thay cho khéi 6 “C7:C12", khéi 6 “C7:F8” duge chon. Giéng nhw thuéc tinh Offset, thudc tinh Resize c6 hai tham sé. Tham sé thir nhat la sé hang, tham sé tht hai la s cét. Nhu vay, dong thi ba & trén lam thay déi khéi 6 Iva chon thanh 2 hang va 4 cOt. Hai dong cudi co thé ghép thanh mét dong nhu sau Selection.O£fset(2, 2).Resize(2, 4) Select Trong vi du trén, thudc tinh Offset sé tinh toan chon khéi 6 chon méi, thudc tinh Resize xac dinh kich e& moi cia khdi 6 va phuong thire Select sé chon (boi den) khdi 6 do. 8.5.5- Thuéc tinh Rows va Columns Cap thudc tinh Rows va Columns gidp ban co thé lam viée véi toan bd hang hoae cot Bang 8-11: Sw dung thuéc tinh Rows va Columns Cau lenh Thuc hién Rows(4) Select Chon bang 864 Rows Select Chon toan bd hing trong sheet hign hanh Columns(4) Chon cot D (cot tht 4} Columas("D"). Chon e6t D Columns Select Chon toan b6 cot trong sheet hign hank Vi du vé str dung thudc tinh Rows (tuong ty d6i voi Columns) Worksheets (“Week4”) _Rows (2) .Font.Bold = True cho két qua hién hanh. Ngoai ra, ban cling cé thé str dung thuéc tinh nay dé xéc dinh sé cét hay hang ctia ving duoc chon (Selection) khi két hop voi thuéc tint toan bé hang 2 trong sheet Week4 chir dam cla workbook Count. Msgbox “Ving ban chon gém” & Selection.Rows.Count & “hang.” 8.5.6- Cac kiéu thuéc tinh khdc trong tham chiéu + Thuéc tinh Item Truong hop nay, mdi 6 trong sheet dugc coi la mét Item (muc) va lan luot c6 gia tri 1, 2, 3, 4,... cho dén 6 cudi cUing cla sheet. O dau tién cla hang dau tién (A1) cé Item =1, sau d6 cac cét tiép theo vei hang tuong wing sé nhn 2, 3, 4,... Sau khi hét toan bé cét (256 cot) thi sé xudng hang tiép theo (hang 2). © A2 6 Item = 257, cac cét tiép theo vi hang 2 sé c6 gid tri 258, 259, 260,... Cac Item duge xdc dinh tuan ty nhu vay cho dén khi hét cac 6 trong sheet. Két qua nay thyc hién trong Excel 2003, con Excel 2007 do co s6 lvong hang, cot nhiéu hon nén két qua sé khac di, nhung nguyén tac thre van nhu vay. Bang 8-12: Sw dung thuéc tinh Item (Cau lénh ~____Thuct Si Chon 6 AL Chon 6 Cl ct hoac Cells.Jtem(256)Select. Chon 6 IVI m(257).S Thon 6 A2 ct hoge C ct Kiéu tham chiéu Item it dugc st dung vi viée xac dinh tht ty tleng 6 kho khan va phu thudc vao phién ban Excel. Néu sé long cét, hang trong Sheet thay déi thi két qua sé khéng chinh xac. - Thude tinh R1C1 Khi stv dung thudc tinh R1C1, Excel sé tham chiéu dén 6 ma duge xac dinh boi sé hang (Row) va cdt (Column). Vi du 6 tham chiéu R4C2 sé truy cap dén 6 B4. Khi siv dung kiéu tham chiéu nay, méi quan hé gidva cac 6 trong tinh ton sé dug thé hién trong céng thie. R[m]C[n] sé tham chiéu dén (truy cAp dén) 6 cd m hang phia c6t phia bén phdi so voi 6 kich hoat (hién hanh). Gia tri m,n c6 thé la s6 am, khi dé hwong sé nguoc lai, [én trén va sang bén trai Vi dy 1: Nhap vao céng thre Sum("B2:B4”) trong 6 BS. O BS cé dia chi hang 5 va cét B, cé gia tri la tong cac 6 ctia 3 hang true a6, gdm hang ther 2 dén hang th 4 nhung cting cot. Ter do xay dung cdc dong lénh nh sau: 83, Range (“B5”) .Select ActiveCell.FormulaRICl = “=Sum(R[-3]C:R[-1]c)” Vi dy 2: Nhap vao c6ng thie = D2-D4 trong 6 DS. Néi dung R1C1 trong FormulaR1C1 cé thé khéng can dung dén va néu ban muén, 2 dong trén co thé ghép thanh 1 nhu sau: Range (“B5”) .Formula = R[-3]C[2]-R[~1]c[2]” Vi du 3: Thay déi céng thie thanh gia tri két qua. O G6 cé céng thc la =G5*G4. Vi du 6 G5 c6 gia tri la 2, 6 G4 c6 gid tri la 3, nhu vay gia tri nhan duge cla 6 G6 la 6. Ta sé thay ndi dung ham thanh gia tri la 6. Range (“G6”) .Select ActiveCell.FormulaR1Cl = "=R {-1]c*R[-2]c” Selection.Copy Selection. PasteSpecial Application.CutCopyMode = False Cau Iénh cudi cing 1a lénh huy bd ché do trang thai Cut/Copy (dueng gach nhdp nhay bao quanh 6 da chon). - Thuéc tinh EntireRow va EntireColumn Excel stv dung hai thugc tinh trén dé xac dinh ca hang hay cét. Bang 8-13: Sw dung thuéc tinh EntireRow va EntireColumn Cau lénh Thue hién cRow Select Chon toan bd hing tai vi ni khOi 6 chon Selection EntireColumn Select — Chon bo cot tai vi i khdi o chon - Nhom thuéc tinh End C6 nhi#ng Itic ban can phai xac dinh nhanh chéng di chuyén dén 6 nam cach xa cac 6 hién hanh trong sheet, nhu' di chuyén dén 6 ctia cét dau tién, cét cudi clung, hang dau tién, hang cudi cing cila 6 kich hoat Théng thuong trong Excel, ban thudéng phai si dung nhém phim tat: End+Up, End-+Down End+Left va End+Right Trong VBA, ban ¢6 thé sr dung nhém thude tinh End dé di chuy&n nhanh chéng dén nhiéng 6 trén. Bang 8-14: Str dung nhom thu6c tinh End() Cau lénh Thue hién ActiveCell End(xIPoRight) Select Chou 6 iia cot cudi cing so v6i 6 hign banb, ActiveCelL End(xIPoLef) Select Chon 6 cita cot dau tign so v6i 6 hign hank. ActiveCell. End(xlUp) Select Chon 6 cia hang diu tién so véi 6 hign haub ActiveCell End(xIDown).Select Chon 6 cita hing cudi cing so véi 6 bien hhh 8.5.7- Xdc dinh théng s6 cua 6 va khéi 6 Cé nhieng Itc ban can phai xac dinh mat sé thong sé cla cc déi tuong Vi du nh can xdc dinh tht ty hang, cét, s6 6, s6 hang hay sé cét, dia chi... cla khéi 6 ban chon. Trong ctra sé Immediate, khi g6 ky tw ? truée cau lénh, khi Enter sé tra lai két qua ctia cau lénh do (in ra man hinh). Vi du: Ban béi den khéi 6 "B2:B9", sau dé g6 doan ?Selection.Row (J), két qud sé hién ra & hang dui. Ban tiép tuc thyrc hién déi voi cau lénh khac (Hinh 8-8) Bang 8-15: Xéc dinh théng sé cuia 6 va khéi 6 Cau lénh trong Immediate Thue hign ?Selection.Row Tra vé sO thir ur hi ju tién cla Khoi o chon Selection Column ‘Tra vé 86 thit ur hang cot dau tien cita khoi 6 chon. *Selection Rows.Count Tra vé s6 hang eta khdi 6 chon ?Selection.Colums.Count Tra vé s6 cot cla Khoi O chon. 'Selection.Address ‘Tra vé dia chi khdi 6 chon ?Selection.Cells. Count Tra vé s6 0 trong ki 6 chon ’Range("B3"). NumberFormat Tra vé kiéu dink dang sé 6 A3 ?Range("B3"). Formula Tri vé cong thife trong 6 B3 ?Range("B3"). Value Tra vé gid tri hign tai 6 B3 ?Range("B3") Style ‘Tra vé kigu Style eta 6 B3 2selection.& 2 23elect ion. Column 2 ‘ 2Se lection. Rows .Count, 3 | aselection.columma.count ff af | 15 | y a €> i \ Sheett \Sheet2 (Sheers / jee | Hinh 8-8: Cifa sé Immediate véi vige x4c dinh két qua thudc tinh 6 (khdi 6) 8.5.8- Tao ving trurc tiép (khéng su dung VBA) Voi mét sé trvéng hop ban phan chia vung cac 6 voi tén xac dinh dé dé truy cap va stv dung. Théng thong, cdc div liéu trong mét vung (dugc tao tiv khdi 6) cling c6 nhtong dc diém chung. Vi du nhu' ving tén céng ty, ving san pham, vung gia tri, vung tén nguoi thc hién,... Co hai phvong phap tao vung, dé Ia tao vung truc tiép va str dung VBA. Khi chon tén nhiing vung do thi Excel sé truy cap dén ving ma ban chon. Ban phai dat tén nhing ving do true khi viét thi tuc hay ding chinh VBA dé tao tén clia vung. Ban co thé thu hién céng viéc voi toan viing da chon Bé tao ving theo y muén, dau tién ban chon nhiing 6 d6 bang cach béi den, sau do bam vao phan Name Box (phan goc trén bén trai, cling hang voi thanh cng thir). Cach thu hién trén la cach tat cla chive nang dat tén cho khdi 6 trong Excel (xem trong menu Insert/Name/Define...). Sau do, dat tén ctia vung do roi bam Enter. Gia thiét rang ban dat tén Congty cho khéi 6 “C2:C8" trong sheet Danhsach ctia workbook Quanly (hinh 8-9) Vi dy 4: Lam cc 6 trong Congty (la khdi 6 "C2:C8”) dam lén Range (" [Quanly.xls]Danhsach!Congty”) .Font.Bold = True Vi du 2: Néu worksheet Danhsach trong workbook Quanly dang hién hanh, thi Range (" agty”) . Fo: Bold = False sé lam C8” khong dm (chi? binh thudng) trong khéi 86 dng dan dung v8 eéng nahigp Bact i C3 Danhsach (Swe f EheetS 7 : Dat tén cho vung 8.5.9- Tao vung bang cach sw dung VBA Tén ving c6 thé dug gan theo y muén khi str dung macro, vi du du6i day: Workbooks ("Congty.xls”) .Names.Add Name:= “Congty”, _ RefersTo:= ‘=Danhsach!D1:D10” Range (“Congty”) .Font.Italic = True Thi tuc trén dat khéi 6 “D1:D10" trong sheet Danhsach cé tén la Congly Két qua 1a chi trong khéi 6 “D1:D10" sé bi nghiéng. 8.5.10- Lam viée voi nhiéu ving Cé nhiéu trudng hop, ban phai tham chi Ban c6 thé xo sach noi dung khéi dén nhiéu khdi 6 trong macro. do hay thay déi dinh dang chung. Range ("A1:C3,H4:L8,P14:234”) .ClearContents sé xoa sach ni dung nhiing khdi 6 da chi dinh. Con déi voi nhing tén vung ban dat (nhu & trén), cd thé thu hién nhu sau Range(“Danhsach1, Danhsach2, Danhsach3”) .ClearContents Ngoai ra, ban cé thé lam thay déi dinh dang chi? trong cac vung: Range(“Danhsach1, Danhsach2, Danhsach3”) .Select 87 With Selection.Font -Name = “.VnArial” -Size = 12 ColorIndex = xlAutomatic End With Ghi chu: Trong macro, cac ving cé thé dug xac dinh, dat tén va duoc phéi hop khi st dung phuong thtrc Union. Xem thém tai muc 8.5.1 8.5.11- Di chuyén, sao chép va xod 6 (khéi 6) Trong qua trinh viét chwong trinh tng dung bang VBA, ban thudng xuyén sé gap truéng hop di chuyén, sao chép hay xoa 6 (khéi 6). VBA da thiét 4p mot cach ty déng cho viéc thy hién cong viée kia voi phurong thire Cut, Copy va Clear. Bang 8-16: Su dung nhém phuong thie Cut, Copy va Clear Cau lénh trong Imn Thue hién. Range("AS") Cut Chuyén toin bd 0 AS sang Ad Destination:=Range("/ Range("A3") Copy Sao chép toan bo 6 A3 sang khoid Destination =Range("D5:E5") DS:F5 ) Clear Xo toan boo At Ghi chu rang ca hai phyong thtre Cut va Copy déu str dung déi twong Range voi tham sé dac biét cé tén la Destination. Tham sé dé sé chi ra dia chi ctia 6 (hay khdi 6) ma ban muén di chuyén hodc sao chép dén. Trong vi du cudi cling ctia bang trén, phuong thtee Cut due str dung khong can tham s6 Destination sé cat bd di? liéu tai 6 A4. Phuong thirc Clear sé xoa tat ca moi thir trong 6 (khéi 6), gém ca dinh dang ciing nhu' ghi cht trong 6. Néu ban muén chon didu kién xoa, ban stv dung céc phuong thtre sau - ClearContents: Xoa toan bé dif liéu trong 6 (khéi 6). - ClearFormats: Xoa toan b6 dinh dang, tra vé nguyén géc ban dau - ClearComments: Xod toain b6 cc Idi chi dan trong 6 (khéi 6) dug chon. 88 8.5.12- M6t 86 thuée tinh hiu ich cuia déi twong Range Tai sao lai lam viéc voi doi twgng Range? Néu cac ban doc nhiéu sach vit vé VBA, khéng it thi nhiéu cae téc gia déu chi trong dén adi tong Range. Ciing dé hiéu théi, vi khi lam viée véi VBA trong Excel thi day la déi ivong ban phai thuéng xuyén lam viée. Néu hiéu ro déi tuong nay thi ban dé dang gidi quyét duoc nhiéu van dé lién quan. Nhu da dé cap qua & muc 7.1, déi trong Range cé rat nhiéu thudc tinh. O' day ching ta lam quen mét sé thuéc tinh hiru ich va hay st? dung. Chui: M6t sé thude tinh 1a read -only (chi doc), diéu nay cé nghia la ban kh6ng thé thay d6i duge. Vi du, mdi d6i tong Range c6 thude tinh Address dé ban cé thé tham chiéu dén nhung khéng thé thay déi dia chi. Thudc tinh read-write cé nghia 1a vira xac dinh dug théng tin gia tri viva c6 thé thay adi gid tri ctia thudc tinh do - Thuéc tinh Value Thuéc tinh Value dai dién cho gid tri dug chwa trong mét 6. Day la thuéc tinh read-write. Vi dy sau thé hién gid tri chtra trong 6 At tal Sheet Msgbox Worksheets ("Sheet1”) .Range (“AL”) .Value Ban chi cé thé xdc dinh dug gia tri tai mat 6, do dé néu viét nhu doan ma sau sé gay ra Idi Msgbox Worksheets ("Sheet1”) .Range(“A1:C3”) .Value Tuy nhién, ban cé thé gan gia tri cho nhiéu 6 cling mét luc nhu sau Worksheets (“Sheet 1”) .Range("A1:C3”) .Value=123 Day Ia thudc tinh mac dinh cia déi tvong Range, do dé hai dong ma sau sé cho gid tri nhu nhau: Worksheets ("Sheet1”) .Range ("AL") .Value=75, Worksheets ("Sheet1”) .Range (“Al”) =75 + Thuéc tinh Text Thuéc tinh Text tra vé mét chudi dai dién cho cht duoc thé hién trong mét 6, chil y rang gid tri text nay da due dinh dang, Day la thudc tinh read-only. Gia sb 6 A1 chwva gia tri 12.3, nhung da duoc dinh dang dé thé hién $12.3. Vi dy sau sé théng bao gid tri $12.3 cilia At Msgbox Worksheets ("Sheet1”) .Range (“Al”) .Text 89 Nhung déng lénh dui day chi thé hién gid tri 12.3 Msgbox Worksheets (“Sheet1”) .Range (“AL”) .Value - Thuéc tinh Count Thuéc tinh nay tra vé gia tri la s6 lung 6 trong mat khoang (tat ca cac 6 le khéng phai chi cac 6 rng). Day [a thudc tinh read-only. Dong lénh dudi sé xAc dinh sé c6t ban chon: MsgBox “Ving ban chon cé” & Selection.Columns.Count & “cét.” - Thudéc tinh Coiumn va Row Thudc tinh Column tra vé gia tri dug dai dién cho cét cla mot 6. Tuong ty thudc tinh Row tra vé gia tri dug dai dién cho hang ctia mot 6. Hai thuéc tinh nay thudc dang read-only. Vi du sau thong bao gia tri la 6: Msgbox Sheets (“Sheet1”) .Range (“F3”) .Column Vi du sau sé thong bao gid tri la 3: Megbox Sheets ("“Sheet1”) .Range("F3”) .Row y: Néu cé nhiéu 6 trong mét khoang thi thudc tinh Column sé tra vé cia tri cOt dau tién cia khoang do. Tuong ty voi thudc tinh Row trong trudng hop nay. Ban ding cé nham [an gidva thudc tinh Column va Columns, hay Row va Rows - Thuéc tinh Address Thudc tinh Address la thudc tinh dang read-only, thé hién dia chi cla 6 déi voi dai tuong Range. Vi du sau day sé cho két qua la $AS1:$E$5 Msgbox Range (Cells (1,1) ,Cells(5,5)) .Address Vi du tiép theo thé hién kiéu dia chi mét 6 khi str dung them cdc tham sé, dong nhac la két qua ciia két qua hién thi kiéu dia chi: Set mc = Worksheets ("Sheet") .Celis(1, 1) MsgBox mc. Address () » Sagi MsgBox mc. Address (RowAbsolute :=False) . Sal MsgBox me. Address (ReferenceStyle:=x1R1C1) » RIcL 90 x mc. Address (ReferenceStyle:=xIRIC1, RowAbsolute:= MsgBo: yalse, ColumnAbsolute:=False, (cing 1 déng) - nelativeTo:=Worksheets (1) .Cells(3, 3)) ‘ R{-2]C{-2] _ Thuéc tinh HasFormula Thude tinh nay thudc dang read-only, thudc tinh nay tra vé gid tri True gu 6 dure chon cha cong thtrc, nguoc lai tra vé False Néu mét ving co miu hon mét 6, thi VBA sé chi tra vé True néu tat ca cdc 6 trong vong nay dgu co chtra cong thirc. Néu cé 6 trong mét vung la céng thtre va 6 khadc khong phai Id céng thie, thuéc tinh nay tra vé Null. Chi y khi khai bao bién dang cho thudc tinh nay, néu kh6ng sé bj Idi sai kiéu dé gu. Thi tue duoi day dinh xem toan bé cac 6 ban chon 6 phai la céng thtre khong? sé xac Sub Congthuc() worksheets ("Sheet1") .Activate Set rr = Application. InputBox(prompt:="Chon ving trong worksheet”, Type:=8) If rxr.HasFormula = True Then MsgBox “Toan b6 céc 6 dugc chon chia céng thic.” End If End Sub - Thuéc tinh Font Nhu ban da biét, thudc tinh co thé tra vé mét déi tung. Ddi tong Font cé nhigu thudc tinh hiru ich cho viéc dinh dang Vi du sau tra vé déi twong Font cia 6 A1: Range (“Al”) . Font Vi du sau thiét lp thuéc tinh Bold (kiéu ch in dam) cia déi tung Font cilia ving A1: C5: Range ("A1:C5”) .Font.Bold = True - Thuéc tinh Interior Thuéc tinh nay cing tong ty nhu thudc tinh Font & trén, tra vé déi tuong Interior (bén trong). Vi du sau sé thay di mau nén (background) cla 6 A1 sang mau dé (mau d6 co gia tri ColorIndex = 3) o1 Range ("Al") .Interior.ColorIndex = 3 Colorindex sé C6 gia tri tir 1 dén 56 tuong tw voi cdc mau trong bang mau clia Excel. D8 dé nho, ban cing 66 thé ding cdc gid tri hang sé nhuy vbBlack (mau den), vbRed (mau dé), vbGreen (mau xanh [a cay), vbYellow (mau vang), vbBlue (mau xanh da trai), vbMagenta (mau hdng), vbCyan (mau luc lam) hay vbWhite (mau trang) - Thuéc tinh Formula Thu6c tinh Formula dai dién cho céng thire trong mot 6. Bay 1a thude tinh dang read-write. Vi dy sau dua céng thie tinh tang vao 6 A13: Range ("A13”) .Formula= “=Sum(A1:A12)” Chu y rang c6ng thive fa chudi ky ty va nam trong dau ngoac kép (“"). - Thuéc tinh NumberFormat Thudc tinh NumberFormat dai dién cho dinh dang sé cla déi tong Range (chi y 1 chudi ky tw) nhu vi dy sau Columns (“A:A”) .NumberFormat="0.00%” Bay la thudc tinh dang read-write. Ngoai ra c6n 6 rat nhiéu thudc tinh khadc ma ban c6 thé khai the. Bang chic nang ty dong Auto List Members (chi tiét 6 muc 11.1), ban cé thé tim hiéu chi tiét nhieng thu tinh cing nhu phuong thle cia déi tuong Range. f a [Range ("a1") e@ Width | e@ Worksheet j eG! WrapText Hinh 8-10: Chic nang auto List Members hién thi danh sch thudc tinh, Phuong thife cua déi tudng Range 8.6- Tra ctru va tham khao déi twong é tra ciru va tham khdo déi tuong, ban sir dung chwc nang trinh duyét r). Che nang trinh duyét d6i trong duoe str dung déi twong (Object Brow dé tim hidu cac déi tong, cdc phuong thre va nhiing thudc tinh cla chung Ngoai ra, chtre nang nay con quan ly cdc ham (functions) v hh (state- menis) due xay dyng trong VBA. Cach the hién nhu sau 1. Vao clva 8 Visual Basic Editor dang me 2. Ti menu View, ban chon Object Browser (hoa bam phim F2) [Hop | sdch dw an, thy vig Hop chi tim kiem @ / va chon, Excel (hinh 8-12). Khi d6 cac nhom thudc Excel sé xuat hién wo & . Trong vung Classes, ban cun xuéng va chon Range 5. Trong Members of ‘Range’ ban bam vao ClearContents. 6. & bén canh ClearContents ma cé ky hiéu mau xanh (vi du: conieris] ) cho biét déi twong dé la phwong thtc (method). 7. Néu muén biét thém théng tin vé ClearContents, ban bam vao nut Help (hinh dau ? mau vang) 8. Dé xem vi du, ban bam vao Example (dau héi mau xanh, hinh 8-13). 9. Dong clea sé hwong dan sty dung ClearContents va tiép tuc cudn dé tim cac thanh phan khac trong Members of ‘Range’. 10. Chi dn ma co biéu tong ban tay chi & bén canh (vi dux& Text ) cho biét d6i tong do 1a thudc tinh (property). 411. Dong clra sé Visual Basic Object Browser vao. {cat Livres VBAProject (Book1.xls) =) Gy Microsoft Excel Objects ‘* W sheets (sheets) | B Abs GB) sheet2 (Sheet2) | ActiveCell BY sheets (Sheets) ActiveChart $8) This Workbook {std Adjustments les? ActivePrinter 23 Modkies 2 Moduler Af Modulez S24 Allo 2 Allowet 8) Answervvizard 2 Answer G23 Application Ik Areas 3 Assistant e Autocorrect {68 AutoF iter G8 AutoRecover 52 Axes eS Axis LO) avioTilte Range [eS ActiveSheet [eS Activewindow le ActiveWorkbook [eS Addins. Appactivate les? Application Asc © ASCH ASC IeS# Assistant © ain ‘% Beep & Lalenite Hinh 8-12: Tim hiéu d6i tugng Excel trong Object Browser 94 an Bh VaaProject (Book xls) © is murosttercel copes, |C188565 | ernonrs of Ranger ; fy sheets (sheet) |S Phonetic A [se cateutate x“ 1B) sheete sheet) | Phonetics ® sheet3 (sheets) PitureFormat . TheWerkbook (GY PiotCache 8 ChackSpeting 4 © 53 Moos |[@ Photcaches © Clear 2 Maries 12 PivotCau * ClearComments 2 Mode & PivrFicts 5 12 PivotFiokds 18 ClearFormals [3 Pit oma ClearNotes 14d Pivotfarmulas 8 ClearOuline 12 Pivotiom Column [6 Pivoteratist ‘8 ColumnDitferences | Pivotterns Coluenns 2) Pivot Lén hou =6>3 True < Nho hon True > Lén how hoae bing Palse Nhé hon hoae bing Tie ° Khéc ahaw =1<29 True Aud Kin wa hai bidu thie, ui vé True nou =3>2 And 4>1 Tre dling toan b6 Or Kiém tra hai biéu thie, wr vé ‘True néu 2 Or 36 True ding mou Not ‘Thue hién phir nhan diéu kien logic =Not(3>1) False Xor Thue hign loai trirlogie trong 2 bidu thite =3>2 Nor2>1 False Like So sul hai ehudi abe" Like ‘True Eqv So sinh mite do twong duong pitta 2 bid =2>3.Eqvis4 ‘True thite Imp So séuh d6 dink liv giita 2 biéu th =S>4 Imp 1>3__ False 8 Ngoai ra, ban sé thurong xuyén st» dung toan tir so sénh don 18 hodc két hop voi And, Is, Not va Or dé thyc thi logic trong cdc vang Kip (loop) hay if. Then 9.3- Biéu thie Biéu thirc la mét day cdc toan hang va toan tir kat hop véi nhau dé tinh ton mot céng thire todn hoc nao d6, Ton hang c6 thé [a dia chi 6 hay khdi dn 66, hang, bién hay l& biéu thro. Cach thé hién biéu thize trong VBA tuong ty nhir trong Excel Bang 9-3: Thé hién biéu thir trong VBA Cong thie t Cong thtic trong VBA DaSCHCSICS Range("D4") Formula =” SUM(C4:C6)* 15 Range("DS"}. Formula ax? + bx +¢ akx*xab +e / Vx + VK -ins tere? CHICO” IM(C4:C6y* 1.5" sqe(x)#x4(1/4)-log(x)+exp(x)exA6 bo= x And x>=c x50 Or ye=12 9.4- Gan gid tri cho bién, hang va déi twong 9.4.1- Gan gid tri cho bién Bién dung dé chwva dif ligu tam thdi trong viéc tinh toan, so sénh,... Ta ding toan tue = dé gan gid tri vao bién va tinh toan. Vi du dui day sé gan gia tri 3 cho bién Number va gia tri 9 cho bién | Number2, bién Mynumber la tich cia hai bién tren Numberl = 3 Number2 = 9 Mynumber = Number*Number2 Cae vi du khac vé thii tue khai bdo va gan gid tri cho bién Vi du 1: Khai bao tlrng kiéu gia tri cho bién va hién gia tri ca bién. Sub Kieudulieu () Dim Ten As String ‘Khai bao tén nguéi 1a chudi Dim Tuoi As Integer ‘Khai bao tudéi 1a sé nguyén Dim Chieucao As Single Khai béo chiéu cao 1a sé thap phan 22 ‘Gan ting gid tri Tuoi, Cacdo, Ten Tuoi Chieucao = 1.74 Ten = “Nguyén Van Dic” MsgBox “Ho va tén: “ & Ten & Chr(13) & “Tudi la“ & Tuoi & _ ’ tudi” & Chr(13) & “Chiéu cao “ & Chieucao & “ (m)” End Sub Kat qua thé hién & hinh duéi day: Microsoft Exce 6) Ho va tn: Nguyén Van Btic Tudi la 22 tuoi Chibu cao 1.74 (rn) Hinh 9-3: Két qua thé hién ting kigu dif figu. Vi dy 2: Trong thii tuc didi day, ltic ban dau bién m dug gan la 4. Sau qua trinh lp, bién m nhan cac gia tri la 5, 6 va cui ciing la 7. Nhu vay, bién m co thé thay ddi theo y muén. Sub VD_Do() m=4 ‘m nhan gia tri ban dau la 4 Do ‘bat dau voéng 14p m=m4il ‘dit gid tri m tang (+ 1) MsgBox m ‘Wién théng bdo gid tri m If m > 8 Then Exit Do ‘néu m > 8 thi sé thoat khdi Do Loop ‘Tiép tue véng lap End Sub bién trong suét o Vi du 3: Str dung khai bao Static dé twu gia tri cd trinh tinh toan. Sub VD_Static() Static Giatri As Integer ‘Bién Giatri co kiéu sé nguyén On Error GoTo Sai ‘Léi gép phai thi nhaéy sang nhan Sai 102 Laplai: ‘Nhap gid tri méi cho bién Giatri Giatri = Application. InputBox(*Nhap gia tri cho Gia tri:”,, Giatri) (cing 1 dong) Exit Sub \Néu gia tri dang quy dinh thi thodt sai ‘Cae lénh thyc hién trong nhan Sai MsgBox “Co 16i khi nhap gia tri cho bién Giatri.” & vb- NewLine & vbNewLine & “Bién Giatri hién tai 14” & Giatri (cing 1 déng) . Resume Laplai End Sub | dp 9 echo bin itt (a) (b) Co 16i khi nh§p gia t! cho bién Giatri, Bién Giatri hién tai [a 12 oC Hinh 9-5: Bao 16i khi ban nhap gia tri méi cho bién khéng ding quy dinh kém theo gia tri hién tai cha bign Giatri Tht tuc trén hoat dong nhw sau: Ban dau, khi chay thti tuc thi gid tri cla bién Giatri mac dinh 1a 0 (hinh 9-4a). Ban nhap mdt gia tri moi la 12 trong ctra sé nhap gid tri (hinh 9-4b), thd tue sé két thtic, Tiép tuc cho chay tht tuc trén, cia s6 nhap gid tri hién ra nhw hinh 9-4b. Ban tht khai bao gi tri moi a mot chudi nao dé, Excel sé théng bao Idi kém theo gid tr hign tai otta bién Giatri Didu dé c6 nghia fa gid tri cudi cling cla bién Giatri duoc Ivy lai va kh6ng bi thay déi néu ban thuc hién sai. 103 9.4.2- Gan gid tri la hang 36 cho bién Voi nhéeng gia tri khéng thay dai thi ban nén thiét lap la hang sé (constant). Biéu dé ngan can chuing bi bién ddi do nham lan. Dé gia tri khng bi thay déi do tht: tuc tac dong, ban thém tr Khoa Const dung truéc bién, sau dé str dyng toan ter = d& gan gia tri la hang sé vao bién dé tinh toan. Vi du vé viée gan gia tri cho hang Pi Const Pi = 3.14159 Const Ten As String = “Lé Van Ding” Nhu khai bao 6 trén, bién Pi va Ten khéng thé thay ddi. Néu ban vé tinh hay ¢6 tinh thay d6i gid tri bién hang thi sé nhan dug bdo Idi nhu hinh dui day: | Object a\ Compile error Sev Marks ~ Range ("B1:B10") const D = 0 Assignment to constant not permitted For Each C In Marks If C.Value < 40 Then Next MsgBox "Gia tri moi cua bien D le" £D Hinh 9-6: Bao Ii khi ban thay dai bign hing é tao bién hang trong pham vi cia chuong trinh don, ban hay khai bao chting & phan trén, t6t nhat nam ngay dudi tén cia chong trinh. Vi du nhu Sub Vidu() Const Tuoi As Integer = 25 Const Ten As String Lé Van Dang” MsgBox Ten & “co tuéi” & Tuoi End Sub 9.4.3- Gan gid tri cho bién déi twong NhGing bién thong thuong 6 trén dur dung dé luu di? fiéu. Ngoai ra, con c6 mét loai bién dac biét dug goi la bién déi tun! khong lwu duoc diy liéu ma chi bao cho ta biét vi tri clia dé ligu. Dé khai bao “Object” nhu la kiéu dir hai bao bién déi tong myRange: bién déi tuong, ban str dung tl khoa As va gé ¢ ligu. Vi du vé viée Dim myRange As Object 104 Banc a Object bang tén déi twoing da due dinh nghia s&n trong Excel. Tén mot n déi tong chinh ova Excel duoc trinh bay trong bang 9-4 dui day: Bang 9-4; Cac kiéu bién déi twong chinh trong Excel i | Commandiar [Bicn doi “Ty at [Ten bien doi tugn re dow. Ot ving, This Workbook Window Workbook Worksheet etFunetion | Biew doi twong 1a | wong VBA Céng viée trén chug that su ati khi khai 1 déi tuong Ban can phai gan gid tri cho bién didi tweng trude khi si” dung trong thd tue. Mac du nau hét phuong phap str dung toan tt =, két qua tra vé la gid tri Nhung déi voi bién déi tugng ban khéng thé nhu vay duoc. Khi dé ban phai str dung ti khoa Set, sau d6 [a loan tl = va gid tri ma bién sé dé cap toi. Vi du vé khai bao bién déi twong Set myRange = Worksheets ("Sheeti”) .Rangs("C1:C5”) Gia tri ca bién myRange sé tham chiéu dén ving “C1:C5" trong Sheet Néu ban bé qua tir khoa Set, VBA sé bao 16i “Run-time error 91; Object variable or With block variable not set.” Vi du 4: Sty dung bién déi tuong la khéi 6 Sub VD_BienDT() Dim Vung As Range Dim C As Object Set Vung = Range (“B1:B10”) D=0 For Each C In Vung If C.Value < 40 Then eee End If Next ¢ MsgBox “Gia tri moi bién Dia“ &D Set Vung = Nothing End Sub khai bdo 6 gia tri ban dau bang 0, sau khi st dung phuong phap dem trong khéi 6 "B1:810" thod man diéu kién gia tri (value) trong 6 dé nho hon 40, bién D bi thay adi (trveng hop nay D = 10). Khi ban thye hién xong tha tuc, nén dat lai bién déi tugng la Nothing dé giai phdng bién khdi b6 nho. Vi du 2: Bién déi tong Doituong hop !é voi thudc tinh Text Sub BienDoiTuong() Dim Doituong As Object, Noidung As String Set Doituong = Range("B2") ‘Gan bién déi tuong 1a 6 B2 Noidung = Doituong.Text ‘Gan thuéc tinh Text cia bién MsgBox Noidung ‘wign gid tri thugc tinh Text Set Doituong = Nothing 'Xoa bd bién déi tugng End Sub Tai thi tuc trén, bién déi twong Doituong duge gan la 6 B2. Khi duoc gan, bién déi tuong nay co day du thudc tinh, phuyong thie nhw véi déi twong Range trong Excel 9.4.4- Hong dan truyén tham sé bang gid tri Trong mét sé thu tue khi khai bao bang Dim théng thuong, Visual Basic c6 thé thay déi gid tri clla cdc bién. Vi du Sub Thay_doi() Dim i, Giatri As Integer ‘Lic dau thi bién Giatri la 20 Giatri = 20 For i = 110 4 = Giatri + 1 Next MsgBox “Gia tri bay gid 1a " & Giatri ‘sau 4 1An véng 14p, Giatri co gid tri moi 1a 24 End Sub 106 Hinh 9-7: Gia tri cudi cing cia bién Giatri 8 khong lam thay déi gia tri ciia bién, ban phai khai true tén cia bién dé véi tt Khoa ByVal. Méi ban xem vi dy sau dé ré hon: Sub ThreeNumbers () Dim numl As Integer, num2 As Integer, num3 As Integer numl = 10: num2 = 20: num3 = 30 MsgBox “Gia tri trung binh 14 " & MyAverage(numl, num2, num3) MsgBox “numl=" & numl & Chr (13) & “num2=" & num2 & Chr(13) & “num3=" & num3 & Chr(13) (cing 1 déng) End Sub Function MyAverage (ByVal numi, ByVal num2, ByVal num3) numl = numl + 1 MyAverage = (numl + num2 + num3) / 3 End Function Tha tue ThreeNumbers sé gan gid tri cia ba bién va sau dé goi ham MyAverage tinh toan, tr vé gia tri trung binh cia cac sé da dugc luu git trong cac bién d6. Cac tham sé cla ham [a nhGng bién num1, num2 va num3, ton bé tén tham sé déu co tie Khoa ByVal dieng truéc. Thi tuc ThreeNum- bers da truyén tham sé cho num1, num2, num3 cia ham MyAverage. Khi linh gid tri trung binh, ham MyAverage da thay ddi gia tri cla bién.num1. Bién num1 66 gia tri bang 11 (10+1) & trong ham. Do vay, khiham tinh gia tri trung binh cla thi! tuc ThreeNumbers, hdp thong bao MsgBox sé hién thi két qua 20.333 va chur khdng phai la 20. S én. Cac gid tri d6 dug luu gi 30). Xem cac hinh duoi day: 1 d6, MsgBox sé hién thi toan bé tyng gia tri gdc gan cho chuing (10, 20 va 107 Hinh 9-8: Gia tri cla bién MyAverage va numi, num2, num3 gi sé xay ra khi ban bé tir khod ByVal true bién num1 trong khai bao ham MyAverage? Két qua tinh toan cia ham van fa gia tri trén, nhung bién num1 sé hién thi bay gio 1a 11. Ham MyAverage tra vé két qua 20.3333333333333 va thay adi gid tri gdc cla sé liéu lwu trong bién num1 Function MyAverage(numl, ByVYal num2, 8yVal num3) numl = numl + 1 MyAverage = (numl + num2 + num3) / 3 End Function Két qua ctia sy thay déi: Hink 8-9: Két qua cac bién khi khéng khai bio 2 Nhu vay, dé ngain can sw thay déi dung tiv khoa ByVal Ghi cha tinh sw quan trong cla v VBAcé hai tt khoa 1 phép dura ra hoac phé b6 gid tri bién, dé [a ByRef va ByVal. Mac dinh VBA truyén thong tin te (ByRei p tOi d& liéu gd Hon nia, néu ha Ban sé co duge két qua trén néu bé qua tir khoa ByVal dirng trudc bién um trong ham MyAverage trong phan khai bao bién. Né ham thay déi gia tri géc, ban khéng can thiét phai thém tir khoa ByRef vao, vi VBA da mac dinh truyén tham s6 la ByRef, Khi str dung ty khoa ByVal true tén bién, VBA sé truyén tham gia tri cho bién nay. Diéu dé 6 nghia la VBA sé tao ra mét ban sao ctla dir ligu géc. Ban sao d6 sé dug truyén toi ham. Néu ham thay déi gia tri cla pién duoc truyén toi, gid tri géc sé khéng thay doi - chi la copy su thay d6i d6. Biéu dé giai thich tai sao khi ham MyAverage da thay déi gid tri cua bién num, nhung gia tri rigée ctia bién do van nhw cil. 9.5- Khai bao va str dung mang (Array) Mang [a kiéu dif liéu dac biét va hay duoc eng dung trong viée théng ké, tinh toan,... nén duge trinh bay & muc ring. Mang chia cac bién duge sp xép theo trinh tu quy dinh. Mai bién duc goi la phan tly cla mang. Mang co bién trén va bién du6i, cdc phan ti trong mang [a lién tye. Vi dy nhu danh sdch hoc sinh trong mét I6p, gid tri chi tiéu don 1é trong déi voi mot chi tiéu trong mau. Cé hai loai bién méing: mang co kich thudc c6 dinh va mang déng (khong cé dinh, co thé thay ddi duge). 9.5.1- Mang c6 kich thee cé dinh Thu tyc Dim 6 thé str dung dé khai bao trong mang cé kich thuoc c6 dinh (khOng nhét thiét phai dua gia tri nao vao). Vi du: Dim Arr (4) Dim Myfriends(1 to 30) As String Dim Noisuy(1 to 20, i to 30) As Single Mang Arr (4) tao ra-mang 1 chiéu cha 5 phan ti. V6i kidu khai bao nay (4), phan tt dau tién (bién dui) 1a Arr(0). bé phan tir dau tién bat dau tu 1 thi ban phai khai bao Option Base 1 trén dau ctia tht: tuc (Sub) Mang Myftiends (1 to 30) tao ra mang 1 chiéu chiva duoc 30 chudi Mang Noisuy (1 to 20, 1 to 30) tao ra mang 2 chiéu v6i kich thuée canh 20 x 30 (tuong Ung 600 gid tri la sd). Ham co tén la Array & dui c6 thé tao nén mang tir cdc bién trong né Dim Array(“Michael”, “David”, “Peter”, “Jackson”) Khi str dung ham Array, bién mac dinh cé kiéu Variant Dé xac dinh thang s6 ctia ham Array, phd bién dung 2 ham sau - Ham UBound: tra vé phan tly cudi cling cla mang. 109 - Ham LBound: tra vé phan tir dau tién cla mang Vi dy 4: Hinh 9-10 la két qua ctia thi tuc duoi day: Option Base 1 Sub assignArray() Dim Arr(4) As String Arr(1) = “Thang 1” Arr (2) “Thang 2” Arr (3) = “Thang 3” Arr(4) = “Thang 4” MsgBox Arr(1) & Chr(13) & Arr(2) & _ vbNewLine & Arr(3) & vbCrLf & Arr(4) End Sub Thang 1 Thang 2 Thang 3 Thang 4 Hinh 9-10: ‘4c phian ti trong mang tv dung ham UBound (béi den khdi 6 A2:B8 truéc khi thyc hién Vidu thd tuc): Sub So_O_chon() MsgBox “Sé hang dugc chon 1a ” & UBound(Selection.Value, 1) MsgBox “Sé cét dugc chon 1a ” & UBound(Selection.Value, 2) End Sub i Binh 9-11: Sv dgng him UBound trong mang 110 Ham Msgbox sé cho hién hép thoai thong bao & hinh 9-11, cdc ban sé lam quen véi ham nay & muc 15.1. Ngoai ra, cdc ban cn thay ham Chr (13), ybNewbine, vbCrL# C6 cling tac dung ngt dong trong khi thé hién néi dung (giéng nhur chic naing bam phim Enter trong Word) 9.5.2- Mang déng Trong qua trinh tao mang, c6 nhiing truong hop ban phai thay ddi sé lwong cae phan ti trong mang dé. Ban co thé stv dung mang voi kich thudc lon, Sau d6 c6 thé xod bd dé tra vling nh cho hé thang. Khi do ban c6 thé stv dung Redim dé dat lai kich thuoc cla mang Trong vi dy trén, sé phan ti trong mang Arr(4) la 4 va ban 6 thé thay d6i thanh 6 phan tt bang cach st? dung khai bao nhu sau: Redim Arr (6) MGi lan str dung Redim, tat cd phan ter trong mang hién hanh bién mat. VBA khoi tao gia tri cho chung (Empty d6i voi mang Variant, 0 cho mang sé, chudi réng cho mang chuéi, Nothing cho mang la déi tong). Cach nay tién ‘oi khi ta cho thém phan tr moi hoac muén xoa bot ving nhé. Trong trvong hop ban muén thay ddi kich c ctia mang ma khéng muén mat dé liéu, ban ding Redim Preserve. Vi du 1: Tht tuc Re_Array cho két qua tai hinh 9-12 Sub Re_Array() ReDim Arr(4) As String Arr(1) = “Thang 1” Arr(2) = “Thang 2” Arr(3) = “Thang 3” Arr(4) = “Thang 4” ReDim Arr(6) As String ' Cac phan ti ci sé bi mit di Arr(5) = “Thang 5” Arr(6) = “Thang 6” MsgBox Arr(1) &“—- “ ¢ arr(2) @*-" @_ Arr(3) &“-" & een eee ree eee ee Arr (6) End Sub Vi dy 2: Thu tuc Re_Array cho xem két qua tai hinh 9-12 Sub Re _P Array () ReDim Arr(4) As String Arr(1) = “Thang 1” 441 Arr(2) = “Thang 2” Arr(3) = “Thang 3” Arr(4) = “Thang 4” ReDim Preserve Arr(6) As String Arr(5) = “Thang 5” Arr(6) = “Thang 6” MsgBox Arr(1) & Chr(13) & Arr(2) & vbNewLine & Arr(3) & vbCrLf & _ Arr(4) & Chr(13) & Arr(5) & Chr(10) & Arr (6) (cng 1 déng) . End Sub Hinh 9-12: Két qua si dung ReDim va ReDim Preserve Ghi chai: di voi nhivng dong ma lénh ngan, ban cé thé dén chting thanh 4 dong bang cach thém tiv khoa “:" 6 gita chung Hai dong lénh dui day Arr(1) = “Thang 1” Arr(2) = “Thang 2” c6 thé chuyén thanh Arr(1) = “Thang 1”: Arr(2) = “Thang 2” 9.6- Sr dung Type dé khai bao bién ngudi ding Ban c6 thé str dung chtrc nang nay dé khai bdo bién déi tugng cho riéng minh. Vi dy bién d6i tong ctia ban [ap la Thongtin. Trong Thongtin cé thuéc tinh Ten, Diachi, Tuoi, Quequan. Sau 6, ban khai bao nhu sau (ndm ngoai thu tue, 6 tren): 112 Type Thongtin Ten As String Diachi As String Tuoi As Integer Quequan As String End Type Sau do, ban x4y dyng thi tuc chtra bién déi tong, ban sé tao ra mét déi iwong Danhsach thuéc kiéu div ligu Thongtin Dim Danhsach As Thongtin Khi xay dung thu tuc, dé twong Danhsach sé duoc gan cac thudc tinh ty dong Ter, Diachi, Tuoi, Quequan (hinh 9-13). Khi d6, ban dé dang thuc hién nhur cdc déi twong sn c6 trong VBA. Besa | | end Type $) thse 5 Feirs Sub Hienthongtin() 5 Usecrerif Dim Danheach As Phongtin 3 Module vor i= 2 902 eb Nocuet With Danhsach eR Nodea fen = InputBox(Ten ngucd th Ipiachi = Inputox("Dia chi cus Teuoi = roputbox( "tuoi + = InputBox("Que quan cu 2 eon | Aiptc | coticed | OS RERTHEBPiong tin ve " Gv ten Ten lc tuoi 6 che (10) & chet iF Tuol [Module2 Module Melee | | - | Hinh 9-13: c thudc tinh ty dong xuat hién khi khai bao bign theo Type Sub Hienthongtin() Dim Danhsach As Thongtin For i=1To 1 With Danhsach 113 Ten = InputBox("Tén ngudi thi” & i) -Diachi = InputBox(“Dia chi cia” & .Ten) Tuoi = InputBox(*Tudi cia” & .Ten) -Quequan = InputBox("Qué quén cla” & .Ten) MsgBox (“Théng tin vé” & .Ten & Chr(10) & Chr(9) & _ “pia chi:” § .Diachi & Chr(10) & Chr(9) & “Tudi: " & Tuoi & Chr (10) & Chr(9) & “Qué quén: ” & .Quequan) End With Next End Sub Tubman Hinh 9-14: Két qua khi thy hién thd tuc Hienthongtin 9.7- Xac dinh kiéu bién bang ham TypeName Trong qua trinh xay dung chuong trinh, ¢6 luc ban can phai xac dinh kiéu bién ma minh chuan bi lam vide toi. Mai kiéu bid cé thuéc tinh, phuong 14 thc hoai dong khac nhau. Vi dy nhu ban gan mét gid tri Am hoc lén hon 255 cho bién kiéu Byte, hay cé gang lam tron bién kiéu String hoac ldy cn bac hai cla bién kiéu aéi twgng (Object),... Nnieng céng viéc dé déu khong thé thc hién duc va VBA sé bdo Idi (hinh 9-15). Ngoai ra, trong khi tinh toan, kiéu cia bién bi thay déi sang dang khac ma ban khéng Ivong hét duoc. Chinh vi vay ma ban khé tim dug Idi khi cém thdy ma lénh cla minh a hoan chinh Sub KieuFien() Set Yung = Range ("a2:CS") B = Sqr (Vung) Range ("D2") Value = 5 Rurctine errar‘t3' Type mismatch Hinh 9-15: L&i xay ra khi ban {Sy cSn bic 2 cua bign déi tugng Ban khOng phai ban khoan vi VBA da cung cap cho chiing ta ham Type- Name dé cé thé kiém tra duoc kiéu cia bién trong qua trink xay dung chuong trinh. Ham nay rat hivu hiéu khi ban kiém tra kiéu bién trong suét qué trinh tinh todn. Cu phap cia ham nay nhu’ sau: TypeName (varname) Ham nay sé tr duoc khai bao bang Typ tra vé 115 Bang 9-5: Kiéu bién tra vé boi ham TypeName Chudi tra vé Mota Byte Gié tri kiéu Byte (56 nguyen tir 0 dén 255) Boolean Gid tri kiéu logic (True hoe False) Integer Gid tri kiéu s6 nguyén dang Integer Long Gid tri kiéu s6 nguyén dang Long Single Gid tri kiéu s6 Single Double Gia tii kigu s6 Double Currency Gid tri kidu tign te Date Gid tri kidu ngay swing. | Gidwikiéuchudi Decimal Gia ti kiéu s6 thap phan Error Gia wi 16i Empty Cho biét rang khong 6 gid tri bat du gin cho bign. Bién Empty tong ting v6i 0 trong ngit cdinh 36, hoae chudi c6 chiéu dai bing khong trong ngi canh chudi, Null Di lieu khong hop Ie | Object Gid ui di wong “| Object type. Kiéu déi tung duge thé hién béi tmg dung Automation, vi dy nhu: Application, File, Range hoac Sheet Unknown Doi tugng khong xée dinh duroe ten. | Nothing Bién déi tugng ma da khong cdn — Néu varname la mang, chudi dug’ tra vé la Variant voi dau ngoac don & dang sau - Variant(). Con déi voi mang chwa cdc sé, TypeName tra vé “Integer()". Duoi day [a vi du ch stv dung ham TypeName dé xac dinh tén bién Trong bang tinh ban nhap cac kiéu dé? liéu trong mang "A1:A6" (hinh 9-16a) Sau dé, ban xay dung thi tuc TenBien 66 trinh duyét tteng 6 va xdc dinh kiéu gid tri clia 6 dO. Phuong thire Debug.Print ctra sé Immediate 6 in kiéu gia tri cla bién trong Dim Vung As Range Set Vimg = Range ("21:46") ‘Vung. Select Suring For Each cell In Selection Empty Debug. Print TypeName (cell Vad exe Debug.Print TypeName ( Enc Sub J Bate (a) (b) (©) Hinh 9-16: Sir dung ham TypeName dé xc dinh tén bin Ngoai ra, khi da khai bao tén bién tuong tng voi kiéu gia tri nao dé thi bién khéng c6 su thay adi, trir trvéng hop ban ding ham chuyén dai! tri nhu trong hinh 9-17. ien() i as Single ] Sab chuyen J | bim cial | Debug.Print Typetfame (Giatri) Debug. Print TypeName (CStr (Giatri) } End Sub fiinh 9-17: Kiéu bign Giatri bi thay 46i Kkhi str dung ham chuyén dai CStr §.8- Vong doi ctia bién Bién trong thi tuc cé vong doi nhat dinh. Vong doi cia bién duoc xac dinh bang khodng thoi gian ma bién nho due gia tri cla nd. Bién ding chung trong module hay trong dy 4n dug duy tri gid tri due gan chivng nao ma dy an dé dang duge md. Bién cuc bd dug khai bdo bang lénh Dim & trong thii tus sé mat di cdc gid tri khi thd tuc két thuic. Bién cuc bd 66 vong doi én chiyng nao ma tht tuc dang duoc chay va chung 6 thé thay déi gid tri trong suét théi gian chong trinh chay. VBA cho phép ban co thé mo rong a bang cach thay ddi kiéu khai bao. Diu quan trong ¢ loai bién va pham vi hoat dong cla bié voi céng viée ctia minh: 47 Chuong 10 si puts TR GIP TRONS YEA Trong qua trinh viét macro, chdc chan ban phai dén tro gitip. Khong 6 sach nao cé thé vit duorc hét vé ngén ngi VBA noi riéng va cac ng6n ng lap trinh néi chung, vi nhéng kién thie trong dé rat rong l6n. Trong qua trinh xay dung macro trong ctva sé Visual Basic Editor, chac chan ban phai stv dung cac déi tong, thudc tinh, phwong thtre hay ham 6 san trong VBA. Tat nhién sé co ma lénh co thé ban chua biét hodc da quén cach str dung, Itic d6 Microsoft Visual Basic Help (g9i tat la Help) sé phat huy tac dung. Diéu co ban nhat dé sty dung duoc Help la ban phai bist ti &ng Anh dé doc va hiéu duoc cac hung dn do. Nhéng nguoi co trinh dé vé lap trinh tét déu chil yéu sir dung sach tiéng Anh va doc trong Help. Néi dung trong Help ta day du nhat dé ban tha hé tra ctru. N6i dung trinh bay dui day sé cho cac ban hiéu duoc mc dé tién dung cla Help trong VBA nhu thé nao. 10.1- Tro gitip truc tiép trong mdi truéng VBA Dim T As Taceger Activecell.offset (2, 3) Select rrethad.o apps to the ChartObject, Chartobjects, f Oteubject, ars OLLObIeet ‘de DataTable and Leadertines she Chart, charts, sbaps set, ne Worksheet oe: objectsin be ual Basic Hel Trong Itie'viét ma lénh, khi cn tim higu mot ma Iénh nao dé (vi dy nh phwong thie Select), ban cé thé truy cp vao Help nhw sau: - Chon muc cu thé (ban phai di chuyén chust vao chi Select). - Sau do bam phim F1. Khi dé civa sé Microsoft Visual Basic Help hign ranhv hinh 10-1 voi huéng dan si dung phwong thtrc Select. 10.2. Siv dung hép thoai tre gitip voi chi dé é st? dung h6p thoai tre’ gitip voi cha dé (topic) cy thé, ban thc hién cac buée sau: - Vao clva sé Visual Basic Editor dang mo (néu chua mé thi ban vao menu Teo!s/Macros/ Visual Basic Editer hoc phim tat Alt + F11). - Ty menu Heip, ban chon Microsoft Visual Basic Help (khdng chon phim t&t F1). - Ban cé thé thuc hién bang cach str dung chite nang Search hodc c6 thé chon chi dé dang can tim trong danh muc. Cach nay hé tro rat tich ce Khi ban tim hiéu vé van dé nao dé trong VBA. Nhu hinh 10-2 dui day, vi du muén tim hiéu vé cach str dung ham cla worksheet trong VBA, ta gé néi dung "Worksheet function in VBA” vao trong Search. Sau khi An Enter hodc bam vao mtii tén xanh phia bén phai thi nhan duge 6 két qua cé lién quan. Luc d6,ta chi cn chon chit dé nao chinh xac nhat, ndi dung cht dé sé thé hién & hinh 10-3, 10-4. Trenspose:=False Selection. Pastespecial Past: Stesuts ena secon Eunolees seu [OW inet watshoot hacas haahe Selection, PasteSpecial Pasty | | 7 to visual Basic | 21a veasheerutun Popaty Selection. Pascespecial Past jalues, Gpecacion: | @ wotkshest wxituitaply, SkipBlank= Palos, Tranepoce: _ © Schesove acem. Maghox "Trong truoag hop - Searchtieip ‘Worsheet function EA, ‘You can use most Mirosoft Excel worksheet functions your ‘worksheet functicns you car use, see List of Worksheet Funct Hote Sone xorksheet furesons aren't useful in Vue! Bas ple, the Concatenate fincto isn needed because Visual Gasc you can use the & operator te join multiple text vawer, Calling 3 Worksheet Function from Visual Baste [| Tnvisual Bacic, the Merosoft cel worksheet Rincbons are avaiable through the Worksheetfunction obect. following Sub procedure uses the Hin worksheet funcbon to detertnne the en cals. Fist, the veristle ttyRange s declared as a Range obicct, and then i's set lo range Al i assigned the cesuit of soplying the Min fancto to 2 nf anauia + i dicted ma meceare hee Hinh 10-4: Che dé vé sir dung ham cia Excel rong VBA 10.3- Sw dung vi du mau ctia Excel Excel dua ra mot sé file vi du c6 tén la Samples.xls, file nay d& cap dér kha nhiéu Ging dung chuyén sau cla Excel va nhGng tién ich moi, das biét la trong finh vue VBA. Hau hét déi voi m ban Excel khae nha 120 cnhau, Tuy ahién, tir Exce! 2002 tré di, khang thay uu Trong Excel 2000, ban co thé tim thay file nay C:\Program Files\Microsoft Office\Officel0\Samples.xls Trong Samples.xls, méi sheet huéng dan mét dang céng viéc. Ndi dung c6 lién quan dén VBA Ia Chart Labeling, Repeaiing Tasks, Arrays, API examples, Events, Automation, ADO,... Cac ban cd thé kham pha dugc nhidu didu bo ich trong Samples.xis. 10.4- Sir dung Internet Day la cch str dung tre gilip hién dai nhdt trong thoi dai Internet toan cau. Internet i c cu rat hiu hiéu trong viée tim hiéu moi van dé trén thé gidi. Ban c6 thé st dung tiéng me dé hay tiéng Anh dé tim kiém ndi dung co lién quan trong céc trang web chuyén vé tim kiém nhu thém ca trang web tim kiém Viet Nam: www.monava.vn, _http:/Awww.google.com.vn hoac http://www.google.com. Vi dy khi ban md trang http://www.google.com.vn thi cia sé trang web hién ra nhu hinh 10-5. Hinh 10-5: Ctra sé http://wwwr.google.com.vn 124 é tim hiéu vé thuat ngi hay ndi dung lién quan, gé ndi dung cn tim kiém (vi dy nhu' “inpuibox Excel”), ban co thé tim kiém trén toan bé trang web hay chi 6 Viét Nam. Trong truéng hop nay, chon “nhétng trang tw Viét Nam" va bam vao nit ‘Tim vi Google”. Va chi sau khong thdi gian rat ngdn, ban d C6 théng tin vé ndi dung muén tim kiém 6 cdc trang web 6 Viét Nam. Nho c6 cong cu tim kiém nay, ban moi biét bén ngoai ngudi ta d& nghién ctru vé ndi dung nay nhu thé nao? Nhirng néi dung lién quan dén kién thtre VBA dé ban g6 vao tim kiém nhu “VBA, Excel, macro, free code VB”... Cé rat nhiéu trang web, dién dan lin quan dén Excel va VBA, ngudén kién thie trong dé rat rong dé ching ta hoc hdi, MS Excol Tat 68 2 bai InputBioxi"Please ei © = inpantox. Je ue il Chuong 11 THET LAP MGI TRUONG LAM VIEC Cling nhu VB, VBA co kha nang tuy chon méi trudng lam viée. Tinh nang nay giip ban tich cue trong qua trinh nghién ctu VBA. Ban cé thé tuy bién thay ddi nhing tinh nang diéu khién, bang thong bao hoc giao dién cia clra s6 Visual Basic Editor. ea [tools [acdins window | Help: 8 vaAProject (Popupmen: Microsoft Excel bee B) sheett (Sheet) Sheet2 Sheet a1 = ey mt 8 Moduet Bux maProject Proper gital Signature. i] MsgBox Aun(t) & Chi(13) & Arr) & vbNewd MsgBox "He so ban dau la" & Heso, . Dut Hes | End Sub Edict | Edi Format} Geneia! Docking | Code fara Simtox check bit inde 1 neue Variate eclsation enters Tawa: [a 9 Auto Guch fo M sto Data Tes Windom Settings crag-and-Drep Text Edtrg 1 ofa to Ful Medile Yew % procedure Separator | Cae Hinh 11-2: Cifa sé tab Editor trong Options 123 Editor Editor Fosmat | General | Docking | © Code Colors [Syntax Error Execution Poi Breakpoit Text Kemenroe i Marain Indicater Bar Saige ABCRYZabexyz | Hinh 11-3: Cita sé tab Editor Format trong Options 11.4- St dung Options Ban vao menu Tools, chon Option (hinh 11-1), civa sé Options hién ra nhu Hinh 11-2. Trong tab Editor co cac Iva chon chinh sau: + Auto Syntax Check: Trong truong hop khéng chon, ma khi ban thuc hién ma lénh sai thi ding ma d6 c6 mau dé, khéng xuat hién hdp thong bao. ("D2") £9 SetPronetic iveSheet «lg gho bpplication.Cg 4 | | fs | ShowDependents ef ShowDetall | a ShowErrors 1owPreredents ¥ | - Require Variable Declars judn xudt hién & Hon: Khi dug chon \gOption Explicit Module dé ban khdi mat céng khai bao. - Auto List Members: Khi dug chon, VBA sé iv déng cho hién dann sach toan b6 cac doi twgng, thugc tinh va phu« thre cla mét diéu k khi ta g6 tén ctia diéu khién do (hinh 11-4). - Auto Quick Info: Tvong tyy nhw trén, nhung hién thi théng tin cui phap clia 1 ham hay thd tue, tham s6 dau tién duge in dam Hinh 11-5: Civa sé Auto Quick Info - Auto Data Tips: Hién thi danh sach cac gia tri cla trong trudng hop Break mode (xem thém trong phan b: chi duing duoc \6i trong Excel). - Auto fndent: Chive nang nay cho phép thut dau dong vao dung bang dau dong ctia lénh 6 bén trén khi ban bam Enter. Néu huy bé chive nang nay thi con chudt luén & trang thai 1 dau khi ban bam Enter. - Tab Width: sé ky ty khi bam Tab, mac dinh la 4 ky tu khi bam Tab. sub YD_Do() T£m > 100 Then hoop | End Sub Trong ctra sé tab Editor Format (hinh 11-3) cé cdc Iva chon chinh sau: - Code Color: Ban c6 thé Iva chon mau chir, mau nén ctia tivng loai ma fénh, mac dinh la Auto. - Font: Chon loai font chi tuy y thich, mac dinh la font Courier New ~ Size: Lua chon kich cé font chi phu hop. ~ Foreground: Chon mau chi? cla ma lénh, mac dinh Auto. - Background: Chon mau chi nén, mac dinh Auto. Ngoai ra con mét sé Iya chon khac, cac ban ty tim hiéu Ghi chit: VBA co rat nhiéu déi tung cing véi phuong thie va thudc tinh cia ching. Ban khéng thé nao biét dug Hét hoc sé bi quén. VBA cung cp cho ban nhiing tinh nang goi nhé Auto List Members gitip cdc ban 6 thé khai thac tét hon VBA. 11.2- Sw dung VBAProject Nhiing ham va thi tuc duge xay dung trong VBA thude VBAProject VBAProject c6 cdc déi tveng Excel Objects, Forms, Modules. Trong menu Tools, chon VBAProject Properties, clra sé VBAProject hién ra nh hinh 11-7. B Sih aa 1 ‘ise he hn rome | Hinh 11-7: Sw dung VBAProject Properties 126 - VBProject: B& nhan dang du 4n ctia ban khai bao trong Window) va trong Object Browser. Diéu quan trong la dy an do phai co tén riéng (khong duoc tring nhau) - Project Description: Mé ta tén dy an cla ban trong kiéu thu vién (Type Library). Thu vién Type Library chtva toan bé nhiing mé ta vé ddi tung va giao dién diy an cla ban. ifinh 11-8: Dy én Su_dung_VBA trong va bao vé code trong Protection Cé nhiing du an (project) cia ban lap ra ma khong mudn ngudi khac xem ma lénh, ban c6 thé khoa lai. Bé thurc hign cdng viéc nay, trong tab Protection ban ya chon nhu sau: - Lock project: Khoa code trong module, khong cho nhin thay va khong cho stra chira. Ban phai chon muc Lock project for viewing - Password to view project properties: Ban phai go néi dung ma khoa trong hép Password, néi dung ma khod bién thanh cdc dau sao *. Sau dé, phai xac nhan n6i dung ma khoa trong Confirm password bang cach gé lai ngi dung ma khod viva vao. Néu gé khéng diing, VBA sé bao Idi va ban phai g6 lai cho ding. Ma khod c6 tdi da 24 ky tu, co thé Ia sd, chi? va cé dac biét ky ty Sau dé, mdi khi mé file trén, dé co thé xem duc code, ban vao menu Tools/Macro, chon Visual Basic Editer (hoac bam Alt + F11). Civa s6 Visual dung code déu khéng hién ra (hinh 11-9). Dé xem dug ni dung code, ban nhay kép vao Su_dung_VBA Project, clra sé Su_dung_VBA Password hién ra. Ban phai khai bao duing Password Basic Editor hién ra, tuy nhién toan bd thi néi dung cae ma lénh mdi hién ra 127 Ghi cha: Luu y khi sty dung ma khoa, néu ban quén thi sé khong thé mé dugc project. Vi vay, ban phai luén nho néi dung ma khod va nén chon néi dung nao dé nho. Néu muén ddi ma khoa thi ban vao ctva sd Password dé thay doi. Chuong 12 PHUONG PHAP TU XAY DUNG MACRO Luc dau khi chua hiéu biét v8 macro, ban siv dung chive nang tu ghi macro dé hiéu cach xay dung, cau tric va cach thure hoat dong cla macro Khi da c6 kién thtrc nhat dinh vé VBA, ban hay tur xay dng macro cho minh. Viéc tu’ viét macro giip ban nang cao tinh dgc lap trong cong viéc, phat trién tv duy cling nhw han ché phu thuge vao chire nang ty ghi macro. Ngoai ra 6 bat budc ban phai bat tay thy hién bang chinh kién thc cua minh. Lc dau ma lénh 06 thé dai va long vong, nhung dan dan v6! kinh nghiem duge hoc, ma lénh ca ban sé ngan gon va dé hieu hon Khi tién hanh ghi (record) macro, Excel sé ty déng tao module va bd sung né vao trong workbook va viét lai nhérng hanh dong ban da ghi thuéc vé module a6. Khi ban mudn ty’ viét macro trong workbook, ban cé thé tu b6 sung module trong workbook dé. Sy ghép néi cho phat trién macro dug goi la Visual Basic Integrated Development Evironment (IDE). Macro cé trong module due hién ra trong IDE thay thé cho bang tinh trong workbook (nhw Excel 97) 12.1- Xay dyng macro Trude ién ban tao workbook mdi, cong vic ban thyc hién tiép theo nhu sau 1. Bam chudt vao nuit New trong thanh cong cy (toolbar), hodc vao menu File réi chon New. 2. Bam chudt phai tai tén cla Sheet va chon Rename trong menu tat 3. Go noi dung Text réi Am Enter. Cach xay dung macro’ 1. Ty menu Tools/Macro ban chon Visual Basic Editor. 2. Trong civa sé VBE ban vao menu Insert va chon Module (hinh 12-1). 3. Néu can, ban 06 thé thay ddi tén ctia module theo ¥ muén. Trong ctva 86 Properties, bén canh (Name) ban chon Module1 va siva thanh Chuonatrinh 4. Bam vao ving tréng cia ctra sé Chuongtrinh (phan ma lénh) 5. Gé Sub MyFirst rdi bam Enter, Khi dé Excel sé tw dong dign () va End Sub, thé hién nhw hinh 12-1 6. G6 cdc [énh tt¢ng bude mét theo sy mé ta & dudi. Ban cé thé tham khdo mé trong thi tuc Sub Address_abs() tai Chuong 4 va hinh 4-1 Trwéc d6, macro cila ban chira cac lénh don gian - Bue 1: Chon sheet co tén Text. - Buc 2: Dién ndi dung "Téi biét viét macro” & 6 B2 trong sheet do. - Buc 3: Dién ndi dung “trong céng viéc" trong 6 B4 - Bue 4: Gan céng thivc trong 6 C3 la ghép néi cia hai 6 B2, B4. - Buc 5: BGi dam, lam nghiéng ch@ trong 6 C3. ‘Aphatetc |categnized | | Hinh 12-1: Buéc dau xay dying thu tuc MyFirst trong module Chuongtrinh Dé thuc hién cac buée trén, dau tién ban cé thé khai bao bién la dung trén. Sau dé gdn ngi dung clia bién, ch ¥ néu néi dung bién la chudi thi phai cé dau ngoac kép (") & hai dau. Tuan tu cdc buéc thuc hién nhu & dui day, nhtrng cau ghi chu cng viéc thyc hién déu cé ddu & dau Sub MyFirst () ‘Khai bao bién Dim Noidungl As String Dim Noidung2 As string ‘Gan néi dung cho tung bién Noidung] biét viét macro” Noidung2 = rong céng viée” ‘Chon sheet cé tén ia “Text” 130 Sheets (“Text”) .Select ‘Gan ni dung cho hai 6 B2 va B4 Range ("B2”) .Value = Noidungl Range ("B4”) .Value = Noidung2 ‘chon 6 C3 va gan céng thi cho 6 C3 Range (“C3”) .Select Range (“C3”) . Formula {-1]c{-1]sR[1}c[-1]* \Cho chi trong 6 C3 dam va nghiéng ActiveCell.Font.Bold = True ActiveCell.Font.Italic = True “tu déng giadn cét C via khit chi bén trong Columns (“C:C”) .AutoFit End Sub Cuédi cing, ban kiém tra sw lam viéc cla macro MyFirst: - Quay tro vé sheet Text. - Tir menu Tools/Macro chon Macros. - Trong cira sé Macros, ban chon macro cé tén la MyFirst va chon Run. That [a tuyét, tha tuc cla ban lam viée nhu y mudn. Ban da thanh cong trong viée xy dung thi tuc dau tién cho minh (hinh 12-2). San pham nay la bude dau trong céng cudc chinh phuc VBA day gian nan voi nhiéu ly tha Hinh 12-2: Két qua thy hign macro MyFirst 12.2- Ngat dong khi ma lénh qua dai Mot dang ma !énh trong VBA cé thé chira toi 1024 ky ty. Nhu vay, voi doan ma lénh dai trén mt dang thi ban phai cuén man hinh moi xem duoc hét, nhu vay rat bat tién va kho kiém tra. Khi d6 ban co thé ngat doan ma lénh dai do thanh hai hoc nhidu dong dé ching thé hién day du trén man hinh, nhung van hiéu la cau [énh lién tuc. Visual Basic c6 slr dung ky ty dac biét & cudi dong dé cho biét dong tiép theo van la néi tiép cla dong trude. Vi du nhu sau: Selection.PasteSpecial _ Paste:=xlValues, _ Operation:=xlMultiply, _ SkipBlanks: =False, _ Transpose:=False Thu'c té, doan ma lénh trén (nam trén 1 dong) nhu sau Selection.PasteSpecial Paste:=xlValues, Operation:=x1Mul- tiply, SkipBlanks: =False, Transpose:=False Ky ty dac biét dé ndi lién trén 1a ky ty gach dui (_). True ky ty gach du6i phai cé khodng trong (bang cach gé thanh space bar). Viéc ngat cdc dong ma Iénh khéng phai [a tuy tién ma co quy dinh cy thé. Ban cé thé st dung ky tu’ gach dui trong cdc truong hop sau! - Trudc hoac sau cdc toan tly, vi du nhu &, +, Like, Not, And - Truéc hoc sau dau phay (,) - Truc hoac sau dau hai cham (:) va ky hiéu bang (:=) Ban khdng thé sir dung ky ty gach dui ¢ gitra dau hai cham va ky hiét bang. Vi du trong hop ngat dong dui day sé khéng dug chp nhén (doar mé lénh sé cé mau dé va hién théng bao 16i) Selection. PasteSpecial Paste =xlValues, Operation =xlMultiply, SkipBlanks: _ =False, Transpose =False Ngoai ra, ban khéng ding dug ngat dong trong chudi da dug khép kin (bang ngoac kép). Truéng hop nhw sau la khéng dug (doan ma lénh sé c6 mau 46): Msgbox “Trong truéng hop lénh qué dai, ban cé thé ding ky tw gach duéi dé ng&t dong.” Ban phai slva lai nhu sau: Msgbox “rong truéng hop lénh qué dai, ban co” & _ “thé ding ky tu gach duéi dé ngdt dong.” Hinh 12-3 phia dui thé hién 161 khi ngat dong khéng dting quy dinhy home Hinh 12-3: L6i khi thuc hién xudng dong khéng ding 12.3- Cac 16i xay ra khi x4y dung macro Cho du la nguoi chitng tim hiéu vé VBA hay nhitng chuyén gia lap trinh VBA, nhung chac chan rang ban sé khong tranh khdi gap Idi (bug) trong qua trinh xAy dung thi tuc, Chae han ban da tirng nghe cau “computer programs are full of bugs”. Trong lap trinh, Ii xay ra duoc goi & bug (con bo) va debug (stra 16i) fa qua trinh foai bo Idi tly chong trinh cia ban. L8i xay ra c6 thé do ban gd ma lénh sai chinh ta, sai vi tri dau phay, don.... Nhiing Idi trén duoc hiéu nhu la quén dau cham hay dau ng nhiing Idi cu phap. May man sao, VBA cung ep kha nhiéu tinh nang dé ban c6 thé stra Idi. Dé VBA ty dong kiém tra cl phap sau khi nhap dong ma \énh, ban vao menu Tools\Options trong ctra sd VBA. Ban hay danh dau vao hdp kiém tra Auto Syntax Check trong tab Editor (hép kiém tra mac dinh duge danh 133 Edict | Editor Fomat| General] Docking | -Code Settings ~~ 2 W fino Stocchecy T™ Require Variable Declaration, | auto List Members 1 Auto Quick Info o “ Auto Data Tips oe Window Settings = _W Drag-and-Drop Text Editing "1% Default to Full Module view | Procedure Separator Expected: Then or GoTo Houline vail he called | Shoot Sub Test) ] 8) stoct2 (Sheet! MsgBox "Test | I) sheets (Sheet 4] | Reset the menus i B) theworktooe || Application. CommandEiars(‘Cell”) Reset | © Sy Modes 2 2 odd lication CommandBars(‘Plot Area") Reset lel | ry Hinh 12-5: Li Compile error khi viét ma len 134 Khi ban go m6t dong ma Iénh trong macro va g6 Enter, VBA sé ty dong kiém tra dong dé. Néu tim duge nhing ky ty ma VBA hiéu duoc. , vi dy nh range, thi sé tré thanh Range (chi dau tién tu déng chuyén thanh chav hoa). Néu ma lénh dé thiéu hodc bj Idi, Excel sé bién ndi dung dong dé thanh mau a6 hoaic mau khac nhu dug biéu thi trong tab Editor Format (trong civa sd Options) va hién ra bang théng bao Idi (hinh 12-5). Co nhidu toai 161 khac nhau, tuy vao Idi cy thé ma co téng kiéu ndi dung bang thang bao. Trong qua trinh xay dung thi tye MyFirst & trén, néu ma lénh bi I8i thi VBA sé bao ngay. Vi dy truéng hop dong lénh Columns("C:C’).AutoFit bj viét nham thanh Columns(*C: eg thi Excel sé bao !6i nh hinh 12-6. forte ee 10 Pork eed ce deed ce L6i Run-time khi chay macro Bé biét thém nhGing thang tin vé Idi xdy ra, ban bam vao nut Help. Néu may tinh cua ban duge néi mang thi ban sé nhan dug sy gidp dé try tuyén Microsoft, néu khéng thi bam nut OK dé quay tré lai thd tye dé kidm tra c 16i trén tir dau dén cudi dong va stra lai cho ding. Buds dau tién cla i ci php. VBA cung cép vo s6 cong cu kiém tra va huéng dan loai bé 16i, Qua trinh tim 161 c6 thé [am ban mét méi va mat thdi gian, nhung danh phai chap nhan vi khdng thé tranh khdi [3 khi xay dung tha tye va ham ci sta di cho thu tuc la stra toan bé Nguyén tac co’ ban dé ban stra !6i nhu sau! 1, Bam vao nut Debug va tim kiém 18i dé sta lai. LOi cla cau tenh dau tién sé duoc bdi nén mau vang (hinh 12-7). 435 2. Siva nhiing cau Iénh sai trong doan ma bi bai vang dé 3. Mii t@n vang 6 Ié sé cho biét rang macro dang 6 ché dé divng (Break mode). 4, Ngoai ra ban cé thé bam vao Run, sau do chon Reset dé xac lap lai (hinh 12-7) hoac chon Design Mode dé xac lap ché dé thiét ké. Khi da stra xong Idi, dé macro thc hién tiép thi chon Continue (hoadc bam phim F5) 5, Quay tré’ vé sheet Text va xem macro lam viée ¢6 chinh xac khong. FS RE vonProject(Gookt) =. | SAR Meron Exel Obje | ) steer (Tex) we seazcs gbbete | caeaeaed | [chosngiirh Hinh 12-7: Siva 16i gap phai khi viét ma lénh, Cé nhéng trudng hop ban gap phai nhieng [di ma khéng duge théng bao cho dén khi Visual Basic bién dich no true khi th n. Truong hop ma ban gap dé la |6i compile-time. Visual Basic sé cho biét vi tri ctia 161 dé va sé gti cho ban théng bao vé |i do Con cac I3i khdc chi xudt hién khi macro thy hién (chay) that sy. D6 duoc goi la Ii run-time. Kiéu I6i run-time thueng xuat hién khi khong chdp nhan trang thai (hay vj tri) ma nguéi lap trinh khdng nghi duc 6 qua trinh viét ma lénh. Vi dy nhu thu tuc truy cap vao duéng dan hoac file khdng t6n tai trong may tinh ctia ban, hay khi sao chép file ma khdng chi 13 dung dan. Ngoai ra ban con gap mt sé “16i” gap phai khdng han [a do lap trinh, 161 46 chi xudt hién khi macro thy hién mat céng vide cy thé nao do. Vi dy nhu’ chia mét s6 cho khéng cé thé xdy ra ngoai y mudn, Dua vao hoan canh dé ma ban co thé sw dung cau lénh On Error dé “bay Ii” (chi tiét xem & 136 Chuong 13 SU bUNG VA XAY DUNG HAM TRONG VBA Trong VBA, ban cé thé str dung 3 loai ham. Do fa ham san 06 clia Excel, ham trong VBA va ham ty lap (User - Defined). Co thé ndi ring Excel da xay dyng duoc nhiéu ham theo ting nhém voi tinh nang khdc nhau. Ngoai mat s6 ham théng dung thi con nhiéu ham ma chuing ta khong bidt duo hét Copyright © 1987-2006 Mix asoft Corp, Warning: This computer program is protected by Copyright law and international treaties of Unauthorized reproduction or distrisution of this rogram, of any’ portion of it, may result in severe Civil and criminal penaties, and willbe prosecuted to the mavzinum ssible under law. Version 1020 VBA Retail 6.5.1020 .Forms3: 12.0.4518.104 ‘6p thong bao phign ban ciia Visual Basic Editor 6.5 cua Office 2007 Vi vay viéc khai thac ham sn o6 trong Excel tir VBA la mét Iai thé, ban khdng phai mat c6ng xay dung ham nhu cdc ngén ngir lap trinh khac. Ngoai r ban cén ¢6 thé st» dung cac ham dug xay ding sn trong VBA. Tai mai pl ban Office, mt sé ham moi dugc bd sung trong VBA. Bé biét duoc phién ban VBA, (ai cla so VBE, ban chon menu Help/About Visual Basic Editor... hop thong bao About Visual Basic Editor nhu hinh 13-1. Mét sé ham trong VBA & phién ban ci khéng c6 nén cain chil y khi str dung san pham cilia minh trong Of- fice doi cl hon. D6 cé thé la nguyén nhan gay Idi chuong trinh, Va cudi oling ti xin gidi thigu cach xay dyng ham theo muc dich riéng cla minh. Ngoai nhéng chong trinh con (thi tue), day la san pham ung dung rat hay va higu qua cia VBA. Tuy theo cong viéc chuyén man, ban 6 thé xy dung cac loai ham khdc nhau, c6 thé ta don gidn cho dén phite tap. Viée str dung ham nay tong ty nhu cdc ham s&n co trong Excel 13.4- Sty dung cdc ham s4n cé trong Excel Ban 6 thé st dung hau hét cac ham s&n cé trong Excel vao trong cau 'énh cla VBA. Cé mot sé ham trong Excel khong céin thiét khi st? dung trong 137

You might also like