You are on page 1of 78

PHN I: M u

1. Tng quan v thit k v t ng ha thit k cng trnh giao thng


Cng tc thit k lun c mt v tr quan trng t khi lp d n cho n khi thi cng, hon thnh v a cng trnh vo s dng. T trc n nay, cng tc kho st thit k c bit n nh mt qu trnh gm nhiu cng on khc nhau, m mc ch cui cng l xc lp cu to ca cng trnh, cch thc thi cng ch o to ra cng trnh trn thc a v phng php khai thc cng trnh mt cch hiu qu nht. Kt qu ca cng tc thit k c th hin di dng h s thit k, ngha l qu trnh thit k nhm n vic to ra mt b h s thit k, m trong n m t mt cch y ton b mc ch ca qu trnh thit k. Thng thng h s thit k bao gm nhng thnh phn c bn nh sau: Bn thuyt minh: ni th hin nhng c s cho cng tc thit k, lp lun ca ngi thit k v gii thch nhng vn c bn ca phng n thit k. Cc loi bng tnh, bng thng k: ni trnh by cc kt qu tnh ton trong qu trnh thit k, l c s cho vic lp bn v v xc nh chi ph u t cho cng trnh. Bn v: ni th hin chi tit nht cu to ca cng trnh cng nh phng php ch o thi cng cng trnh. D ton: ni th hin cch thc xc nh tng mc u t cho cng trnh. Mc chi tit ca nhng thnh phn trong h s thit k ph thuc vo yu cu trong tng giai on ca qu trnh u t cho cng trnh. V d giai on lp bn v thi cng i hi mc chi tit cao nht. Nu xem xt k hn bn trong ca h s thit k cng trnh giao thng th ai cng nhn thy rng chng c mi lin h cht ch vi nhau theo mt quan h logic kh r rng, v d cc kch thc hnh hc trong bn v s phi ph hp vi kt qu tnh ton c trnh by trong cc bng tnh. iu ny ni ln rng, khi m t mi lin h trn thnh mt chui cc lnh th ta c trong tay thnh phn c bn nht ca t ng ha thit k cng trnh giao thng. Vn cn li l tm kim gii php thch hp thc hin t ng ha. T ng ha mt cng vic c hiu l cng vic c thc hin t ng hon ton hay mt phn nh c s tr gip ca cc thit b. V d nh qu trnh ch to xe hi c t ng ha nh h thng robot trong cc dy truyn sn xut. Trong lnh vc thit k cng trnh giao thng, do sn phm ca cng tc ny l h s thit k, cho nn thit b tr gip ph hp l cc h thng c kh nng to vn bn, tnh ton kt cu, v cc i tng hnh hc, dng m hnh.... H thng thng tin, bao gm phn cng (my tnh, my in, my qut...) v phn mm (cc chng trnh ng dng), v ang c trin khai rng ri trong khp cc cng ty t vn thit k cng trnh giao thng bi chng c nhng c im rt ph hp cho vic lp h s thit k cng trnh: My tnh cng vi cc phn mm chy trn chng cho php thc hin nhiu cng vic khc nhau nh: phn tch kt cu, v i tng hnh hc, to vn bn, dng m hnh... Tc tnh ton nhanh, iu ny cho php a ra nhiu hn mt phng n thit k vi thi gian c th chp nhn c. Kh nng lu tr v tn dng li d liu t hiu qu rt cao, iu ny cho php ngi thit k c th tn dng li ti a d liu c t trc. V d, vi h thng cc bn v in trn giy, vic tn dng li t hiu qu rt thp, hu nh ch mc tham kho thng tin, trong khi , nu nh cng cc bn v ny c lu tr trong my tnh, ngoi vic cho php

tham kho tng t nh bn v in trn giy, n cn cho php tn dng li chnh cc thnh phn trong bn v chnh sa, k tha, v kt qu ta s c c mt bn v mi t nhng d liu c. C th ni rng mc t ng ha thit k cng trnh hin nay ang nhiu cp khc nhau, ty theo tng cng vic c th, iu ny c th hin r trong cch thc to ra tng thnh phn trong h s thit k. V d, trong thit k cu, phn phn tch kt cu c mc t ng ha rt cao, nhng vic to bn v li c mc t ng ha thp hn nhiu. Tuy vy, xu hng nng cao mc t ng ha ang ngy cng r nt bi s pht trin rt mnh ca cc phn mm chuyn dng, chng ang l cng c h tr khng th thiu cho cc k s thit k, ng thi l thnh phn ch cht cho qu trnh t ng ha. Nh chng m vic phn tch kt cu cng trnh tr nn nhanh chng v chnh xc, nh chng m vic a ra cc phng n thit k ca tuyn ng cng nh vic to m hnh ba chiu ng tr thnh hin thc.

Hnh 1 T ng ha thit k hnh hc ng t vi Civil 3D 2008

Hnh 2 T ng ha phn tch kt cu vi Midas Civil

2. i nt v cc phn mm dng cho thit k cng trnh giao thng


Cc phn mm dng trong thit k cng trnh ni chung rt a dng v h tr hu ht cc cng on trong qu trnh thit k. Ngay t cng on kho st a hnh, ton b qu trnh t x l d liu (bnh sai, chuyn i nh dng) n dng m hnh b mt u c t ng ha mc cao, hu ht cc ni dung lin quan n s l s liu kho st u c t ng thc hin nh: v ng ng mc, phn tch dc b mt, xc nh ng t thy, xc nh lu vc, v mt ct v dng m hnh ba chiu. Da vo cng nng ca cc phn mm c th chia chng lm hai nhm: Nhm cc phn mm a nng: l nhng phn mm c th dng cho nhiu mc ch khc nhau, i din cho nhm ny l AutoCAD v Excel, ta c th s dng chng trong hu ht cc giai on ca qu trnh to h s thit k. Tuy nhin, c th s dng a nng, cc phn mm ny c thit k khng tp trung vo mt lnh vc c th no, khin cho mc t ng ha cho tng cng vic khng c cao khi thc hin trc tip trn cc phn mm ny. Ta c th dng AutoCAD to cc bn v k thut cho ngnh c kh cng nh cng trnh, bi nguyn tc to bn v trong AutoCAD l lp ghp t nhng i tng hnh hc c bn. Vi Excel, ta c th dng lp d ton hay to bng tnh duyt kt cu, bi mi trong bng tnh ca n u c th nhn bt c ni dung no.

Hnh 3 AutoCAD v Excel Nhm cc phn mm chuyn dng: l cc phn mm ch dng c cho mt mc ch c th no . Bi ch nhm n ca chng l r rng cho nn mc t ng ha l rt cao. V d trong phn tch kt cu, sau khi nhp xong s liu, phn mm phn tch kt cu s t ng hon ton trong vic tnh v xut kt qu. Bi s a dng ca cc bi ton thit k, cho nn cc phn mm loi ny cng rt a dng v chng loi v ngun gc, chng c th c to ra t nhng cng ty sn xut phn mm chuyn nghip nh Hi Ha, AutoDesk, MIDAS IT, ... hay t chnh nhng cng ty t vn thit k, v thm ch t chnh nhng k s thit k. Cng bi tnh a dng ny m vic la chn tm c mt phn mm ph hp i khi l mt bi ton kh i vi ngi s dng. Da trn mc ph bin trong s dng, c th k ra mt s phn mm chuyn dng sau: Trong lnh vc phn tch kt cu: MIDAS/Civil, RM, SAP, ANSYS, LUSAS, ABAQUS. Trong lnh vc a k thut: Geo-Slope, Plaxis, MIDAS GTS. Trong lnh vc a hnh, bn : Land Desktop, Topo, MapInfo, CAD Overlay. Trong lnh vc thit k hnh hc ng t: Nova-TDN, Civil 3D. Do cng trnh giao thng lun ph thuc vo rt nhiu yu t xung quanh n, cho nn qu trnh thit k lun gp phi nhng bi ton ring, c bit v khng th khi qut c. Nhng bi ton ny hu nh khng c li gii tng qut, v cng bi iu ny khin cho khng c mt phn mm chuyn dng no c th gii quyt c mi vn , nht l trong thit k ng t. Bn cnh , do c s khc nhau trong cch trnh by v th hin bn v, nn thng thng cc phn mm chuyn dng ch c th p ng vic to bn v mc c bn, cn vic b sung thm chi tit hon thin bn v thng c lm th cng. Nhng nhc im ny ca cc phn mm chuyn dng li l iu kin cho s ra i cc phn mm dng Add-in1, chng thng c pht trin bi cc k s cu ng trong cng ty t vn thit k cng trnh giao thng v chy cng vi cc phn mm chnh, chng tc ng trc tip ln kt qu do phn mm chnh to ra vi mc ch l hon thin chng theo yu cu ring ca chnh cng ty .

3. La chn phn mm dng cho thit k cng trnh giao thng


Vi s a dng v chng loi v xut x ca cc phn mm chuyn dng, khin cho vic chn mua phn mm gp nhiu kh khn, nht l i vi nhng n v t kinh nghim trong vic trin

Add-in: y l cc chng trnh dng ph tr hoc tin ch c thit k cng hot ng vi chng trnh chnh. Mc ch dng m rng cc kh nng cho chng trnh chnh. Cc chng trnh dng Add-in ny c th do chnh ngi dng to ra bng nhiu loi cng c khc nhau. Khng phi chng chnh chnh no cng chp nhn Add-in, AutoCAD, MS.Office l hai phn mm cho php s dng Add-in in hnh.

khai cc h thng phn mm. Do , trang b c phn mm ph hp vi cng vic ca mnh cn phi thc hin mt s cng vic chnh sau: Chun b v nhn lc: khai thc hiu qu phn mm, nht l cc phn mm chuyn dng, cn c nhn lc p ng c c hai yu cu: C kin thc tin hc c bn: s dng tt h iu hnh Windows (hoc tng ng), in n, tm kim ti liu trn Internet. C kin thc chuyn mn ph hp. Phn tch cng vic cn t ng ha xc nh r cc yu cu cn c tha mn khi trin khai ng dng phn mm. V d, t ng ha cng tc thit k kt cu, nhng yu cu sau cn c tha mn: Tnh c ni lc v chuyn v ca kt cu di tc dng ca cc loi ti trng (cn nu c th, v d nh cc trng hp t hp ti trng). a ra c m t v phn b ng sut ti mt s v tr (cn nu c th, v d ti cc ni c cu to hnh hc thay i t ngt). C th tnh duyt c mt ct. C th to bn v (cn nu c th mc chi tit ca bn v) v h tr in ra my in. C th kt ni d liu vi cc phn mm khc (cn ch r nh dng kt ni, v d yu cu nhp/xut cu to hnh hc ca kt cu t/sang nh dng *.DXF). C th thm cc tnh nng mi cho phn mm bng cc cng c dng Add-in (yu cu ny c th khng bt buc phi c). Tm hiu, cng nhiu cng tt, cc phn mm chuyn dng m c th p ng c nhng yu cu trn. C nhiu cch thu thp thng tin: Kinh nghim ca cc n v, c nhn s dng. Gii thiu t nh sn xut phn mm v tnh nng, gi c v ch h tr trong qu trnh dng sn phm ca h. nh gi phn mm ca cc tp ch chuyn ngnh. Tm thng tin lin quan trn Internet.

Hnh 4 Tm kim thng tin trn Internet vi Google.com S dng phin bn dng th min ph ca phn mm t kim chng.

m phn vi nh cung cp phn mm tm ra mt gii php hp l nht trc khi quyt nh mua sn phm.

4. Chuyn bit ha phn mm


Khi c trang b phn mm vi mc ch t ng ha cng tc thit k th ta mi gii quyt c cc bi ton c bn trong qu trnh thit k, bi khng c phn mm no, m ngay t u, li c th p ng c mi vn s xut hin sau ny, cn rt nhiu vn mi s lin tc pht sinh trong qu trnh thit k nhng cng trnh c th. Ni cch khc, vic trang b phn mm no ch l bc u cho qu trnh t ng ha, nhng y l bc i quan trng nht. C nhiu cch gii quyt cc vn pht sinh ny, m c bn v tt nht l hai gii php: Phn hi nhng vn pht sinh cho nh sn xut phn mm h nng cp phin bn, sau cp nht li. Gii php ny thng mt nhiu thi gian v trong nhiu trng hp l khng kh thi. T b sung thm nhng kh nng mi cho phn mm ang s dng chng c th gii quyt c vn pht sinh. Gii php ny i hi phi c nhn lc am hiu v chuyn mn cu ng v cng ngh thng tin, ng thi phn mm ang s dng phi cho php cp nht tnh nng mi t pha ngi dng. Nhn lc p ng c yu cu ny chnh l k s xy dng cng trnh giao thng c trang b thm nhng kin thc v tin hc ph hp, y l mc tiu chnh ca mn hc T ng ha thit k cu ng v cng l mc tiu ca chnh gio trnh ny. Phn mm, m ngi dng c th t to thm cc kh nng mi cho n, phi c mt s c im sau: Cung cp tnh nng cho php ngi dng c th t mnh b sung thm chc nng cho chnh phn mm . V d phn mm AutoCAD cho php ngi dng s dng cng c lp trnh, nh AutoLISP hay ObjectARX, t xy dng thm nhng chc nng mi trong AutoCAD.

Hnh 5 B sung tnh nng mi cho AutoCAD Cho php nhng cc phn mm dng Add-in vo bn trong, v d nh cc chng trnh trong b MS.Office (Excel, Word, Power Point ...). Cc chng trnh dng Add-in c th c xy dng t mt s cng c lp trnh (v d ta c th dng VSTO - Visual

Studio Tools for Office - xy dng cc chng trnh dng Add-in nhng vo trong b Office)

Hnh 6- B sung thm chc nng lp d ton cho Excel S liu u vo v kt qu c lu tr trn tp vi nh dng c th hiu c. Nhng chng trnh dng ny ch cho php ngi dng to ra nhng tnh nng mi phc v cho vic nhp d liu (cc chng trnh dng Wizard1) hoc trnh by kt qu.

1 Wizard: thng c hiu l mt chng trnh c chc nng tr gip ngi dng nhp d liu (nhanh v trnh sai st), n c bit hu ch khi dng nhng phn mm a nng, bi nhng phn mm ny thng hay yu cu ngi dng a vo rt nhiu loi d liu m nhiu khi chng khng thc s cn thit cho mt bi ton c th. Chng trnh dng Wizard s t ng lc nhng thng tin cn thit cho bi ton c th ( ngi dng ch cn nhp nhng d liu cn thit cho bi ton ca mnh) cn nhng s liu khc m phn mm yu cu s c chng trnh Wizard t ng b sung. Bn cnh chng trnh Wizard cn c chc nng dn dt ngi dng thc hin bi ton theo mt trnh t nht nh trnh nhm ln.

Hnh 7 Wizard tr gip nhp d liu cho kt cu cu c hng ca MIDAS/Civil Cng c lp trnh to ra cc tnh nng mi cho phn mm hin c rt nhiu v kh d dng. Hu ht chng tp trung h tr cho AutoCAD v Office, bi hai phn mm ny c dng rt ph bin trong cng tc thit k. Vi AutoCAD ta c th s dng nhng cng c sau: Cc cng c lp trnh nhng sn bn trong AutoCAD: AutoLISP: l mt ngn ng lp trnh dng thng dch, cho php ngi dng tn dng ti a nhng lnh sn c ca AutoCAD t hp li nhm to ra nhng tnh nng mi c mc t ng ha cao.

Hnh 8 Visual LISP: cng c h tr cho lp trnh vi AutoLISP trong AutoCAD VBA: l mt cng c lp trnh da trn Visual Basic, n cho php ngi dng kt hp tnh d dng v hiu qu ca mi trng lp trnh Visual Basic vi cc tnh nng v h thng i tng sn c trong AutoCAD. Hin nay y l cng c c dng rt ph bin xy dng thm nhng tnh nng mi, vi quy m khng ln v khng qu phc tp trn AutoCAD. Trong lnh vc thit k cng trnh giao thng, cng vic chim khi lng ln nht v mt nhiu cng nht l to bn v k thut. Mc d hu ht ngi thit k u dng AutoCAD to bn v k thut nhng mc t ng ha vn rt thp, ch yu s dng cc lnh n ca AutoCAD (thng qua dng lnh hay nt bm trong AutoCAD) cng vi cc thng s hnh hc tnh ton c (c th bng cc phn mm khc, v d phn mm tnh kt cu) xy dng bn v. Vn ny hon ton c th t ng ha c khi ngi dng bit kt hp quy tc v i tng thit k vi s liu hnh hc tnh c trong mt chng trnh VBA do chnh h to ra.

Hnh 9 Mi trng lp trnh VBA trong AutoCAD Cng c lp trnh bn ngoi: bao gm bt c ngn ng lp trnh no m c h tr cng ngh COM (Component Object Model) ca Microsoft nh: VB, VC++, Delphi.... Cng c lp trnh ObjectARX (AutoCAD Runtime Extension): l mt cch m rng AutoCAD hiu qu nht v phc tp nht. Cc phn m rng AutoCAD c xy dng trn VC++ vi vic s dng cc th vin lp trnh m rng ca AutoCAD (chnh l ObjectARX). Bi vic cho php iu khin trc tip nhn v cu trc d liu ca chng trnh AutoCAD, cho nn nhng chng trnh c vit vi ObjectARX s c tnh linh hot rt cao, tc chy nhanh v nh gn hn so vi chng trnh cng loi vit bng cng c lp trnh khc, nhng mc phc tp ca vic lp trnh s tng ln. Hu ht cc ng dng ln chy trn nn AutoCAD u c xy dng da trn ObjectARX: Land Desktop, Civil 3D, Nova-TDN...

Hnh 10 M rng kh nng cho AutoCAD dng ObjectARX

5. Kt chng
Nh vy, trong chng ny, ton cnh v vic ng dng cng ngh thng tin t ng ha cng tc thit k cng trnh giao thng c cp n. Vn ct li t ng ha thit k bao gm: Qu trnh thit k cng trnh giao thng v sn phm ca tng cng on. Kh nng ca phn cng my tnh v cc h thng phn mm, bao gm c cc phn mm chuyn dng. S a dng ca cc bi ton thit k cng nh nhng hn ch trong cc phn mm chuyn dng. Nhng c im ca phn mm v cc cng c pht trin, t c c nh hng trong vic gii quyt cc vn pht sinh, vn thng gp sut qu trnh thit k. Trong khun kh gio trnh ca mt mn hc, nhiu mng kin thc s c k tha t nhng mn hc khc l iu ng nhin, v do , ch c nhng ni dung mi, cha c cp n trong nhng mn hc khc, mi c trnh by chi tit y. Vi cc chng tip theo trong gio trnh ny, nhng kin thc chi tit thc hin t ng ha thit k cu ng s c a ra theo nhng chnh ca chng u tin ny.

PHN II: Lp trnh trn ng dng nn


CHNG I: Khi nim
Trong h s thit k, phn ti liu c trnh by di dng bng biu (bng tnh kt cu, bng tnh khi lng, ...) v bn v (m t cu to hnh hc ca cng trnh) chim mt khi lng ng k. Ni dung ca nhng ti liu trong phn ny li lun c mi quan h r rng v cht ch vi phn tnh ton trong qu trnh thit k, chnh v vy, kh nng thc hin t ng ha cng on ny l hon ton kh thi v mang li hiu qu cao. Nhng cng vic c th c th t ng ha bao gm: tnh ton, lp bng tnh, lp bn v, trong , phn tnh ton to tin cho qu trnh thc hin lp bng tnh v bn v. Phn tnh ton c th c tch ra thnh mt m-un ring v thc hin c lp vi bt c cng c lp trnh no, v hin nay, cng ngh lp trnh cho php d dng kt ni cc m-un loi ny vi cc ng dng khc. Phn lp bng tnh v bn v, thc cht s dng kt qu thc hin ca m-un tnh ton v th hin kt qu ny di dng bn v k thut v bng tnh, bng biu ph hp vi cc quy nh v trnh by ti liu trong h s thit k. Trong nhiu trng hp ngi ta c th kt hp m-un tnh ton vo cng vi qu trnh to bng tnh hay bn v, cch lm ny rt hiu qu i vi cc bi ton khng qu phc tp v tnh ton (nh thit k hnh hc ng t hay tnh duyt mt ct kt cu). Nhng i vi cc bi ton c phc tp cao trong tnh ton (nh bi ton tnh kt cu hay n nh trt mi dc) th m-un tnh ton thng c tch ring ra v kt qu tnh ton s c trnh by bi m-un to bn v v m-un to bng tnh ring. Trong khun kh gio trnh ny, do nhm n tnh ph bin ca cc bi ton thng thng c phc tp khng cao nhng a dng, cho nn vic nh hng gii quyt bi ton hng n vic hp nht phn tnh ton vo trong m-un to bng tnh hay m-un to bn v. Do bng tnh v bn v c cu trc ti liu rt khc bit, cho nn hu nh khng c phn mm no c th h tr tt cho c hai mc ch trn cng lc, m trong thc t, ngi ta s dng nhng phn mm ring to bn v hay bng tnh. V d trong lnh vc thit k cng trnh giao thng, Excel thng c dng nh l phn mm h tr to bng tnh chuyn nghip, trong khi , AutoCAD li thng c s dng trong vic to bn v k thut. Bn cnh AutoCAD v Excel, cn c nhiu phn mm chuyn dng khc, m kh nng ca chng tp trung vo mt s lnh vc hp, v d nh MIDAS/Civil tp trung vo lnh vc phn tch kt cu, Nova-TDN tp trung vo lnh vc thit k hnh hc ng t. Kt qu m cc phn mm chuyn dng ny mang li kh y , c th bao gm hu ht cc bng tnh v bn v lin quan n bi ton c gii quyt. Tuy vy, trong phm vi lnh vc ca mnh, khng phn mm chuyn dng no c th p ng c mi nhu cu, v do , chng thng c thit k theo hng c th kt ni vi cc phn mm khc nhm mc ch h tr ngi dng gii quyt c vn pht sinh bng cch kt hp vi phn mm vi nhau.

Hnh 1 Lp bng tnh kt cu mt ng trn Excel

Hnh 2 To bn v bnh tuyn ng t trn AutoCAD c th kt ni vi nhau, cc phn mm chuyn dng thng cung cp kt qu tnh ton di dng d liu c cu trc v c lu tr trong cc tp c nh dng TEXT, v d nh CSV hay DXF. Vi cc d liu c cu trc ny, ngi dng s t thc hin vic kt ni cc phn mm li vi nhau. Vic kt ni ny cng ch c th gii quyt thm mt s bi ton pht sinh, cho nn mt s phn mm cho php ngi dng c th can thip su hn na vo bn trong n bng cc cng c lp trnh, h c th t gii quyt cc bi ton pht sinh m ngi thit k phn mm khng th d kin trc c. Khi ngi dng xy dng nhng chng trnh ca h da

trn nhng ng dng c thit k theo cu trc m ny, h s tn dng nhng kh nng sn c ca chng lm nn, gip cho vic lp trnh c nhanh v hiu qu hn rt nhiu so vi cch lp trnh thng thng, v do , c th gi chng l cc ng dng nn, in hnh v c s dng nhiu nht lm ng dng nn trong lnh vc thit k l AutoCAD v Excel, ngoi vic ph hp vi nh dng ti liu trong h s thit k (bn v v bng tnh) chng cn cho php ngi dng xy dng cc chng trnh chy cng vi mc ch b sung thm cc chc nng chuyn bit. Nh vy, mt phn mm c gi l ng dng nn khi n tha mn ng thi cc tiu ch sau: Cho php mt chng trnh chy bn trong v cng vi n (tng t nh mt lnh). Cho php s dng cc tnh nng ca n thng qua cng c lp trnh thch hp.

Hnh 2 M hnh lp trnh trn ng dng nn Mt lnh mi hay mt chc nng mi c xy dng trn ng dng nn thc cht l mt chng trnh hon chnh, v vy, xy dng n cn c cng c lp trnh tng ng. Thng thng cng c lp trnh c hiu nh l mt tp hp bao gm: Ngn ng lp trnh. Mi trng lp trnh. Th vin h tr lp trnh. Mt v d v cng c lp trnh trn AutoCAD, l AutoLISP. Vi cng c lp trnh ny, khng nht thit phi c mi trng lp trnh v th vin h tr lp trnh, ta ch cn to ra mt tp dng TEXT cha cc m lnh vit bng ngn ng AutoLISP. Tuy nhin t phin bn AutoCAD R14, thun tin cho ngi lp trnh, mt mi trng lp trnh dnh cho AutoLISP c b sung, l Visual LISP. Vi mi trng lp trnh ny, vic lp v kim sot chng trnh tr nn thun li hn rt nhiu, bi Visual LISP c tch hp nhiu tnh nng h tr lp trnh chuyn nghip, trong khi , nu ta khng s dng mi trng lp trnh, th tuy ta c th vit c mt chng trnh AutoLISP hon chnh, song trong sut qu trnh xy dng chng trnh ny ta lun phi vt v t kim sot chng trnh.

Hnh 3 Xy dng chng trnh bng ngn ng AutoLISP khi khng s dng mi trng lp trnh, ta s lun phi t kim sot c php v cc lnh m khng c bt c h tr no v th kh nng nhm ln l rt ln.

Hnh 4 Lp trnh bng ngn ng AutoLISP trn mi trng lp trnh Visual LISP, ta lun nhn c s h tr t ng bng mu sc hay cc tnh nng khc trong mi trng lp trnh. Th vin h tr lp trnh c th rt a dng v thng l nhng phn b sung gip cho vic xy dng chng trnh c nhanh hn thng qua s k tha nhng th c lm t trc. Khi lp trnh bng AutoLISP th th vin h tr lp trnh l tp hp cc chng trnh hon chnh cng vit bng AutoLISP. s dng th vin h tr lp trnh th mi cng c lp trnh c mt quy nh v cch thc s dng ring, v d vi AutoLISP, s dng mt chng trnh con trong th vin, ta ch cn ti chng trnh AutoLISP cha chng trnh con thng qua mt cu lnh t chng trnh chnh.

Tng ng vi tng ng dng nn th s c cc cng c lp trnh ph hp. Mt ng dng nn c th h tr mt hay nhiu cng c lp trnh khc nhau, ty mc ch s dng. AutoCAD h tr cc cng c lp trnh trn ng dng nn sau: AutoLISP ObjectARX VBA (Visual Basic for Applications) Cn Excel h tr cc cng c lp trnh: VBA VSTO (Visual Studio Tools for Office) Mi cng c lp trnh lun c nhng c im ring v kh c th phn xt ci no hay hn hoc km hn mt cch tng qut. Do , la chn c cng c lp trnh thch hp khi lp trnh trn ng dng nn, cn da vo mc ch c th. V d khi lp trnh trn AutoCAD, to cc cng c tr gip v th AutoLISP l la chn hp l. Nhng xy dng nhng ng dng ln, phc tp, i hi phi can thip su vo bn trong AutoCAD th ch c th dng ObjectARX mi lm c. Trong lnh vc t ng ha thit k cng trnh giao thng, hu ht cc bi ton ln v c bn c gii quyt, nhng cn rt nhiu cc bi ton khc, tuy khng ln v khng qu phc tp, nhng li rt a dng v kh khi qut, vn cha c phn mm thc hin, v do , phm vi ng dng ca lp trnh trn ng dng nn l rt ln v c tnh hiu qu cao. Hn na, vi quy m ca cc bi ton ny, th vic la chn VBA lm cng c lp trnh l rt ph hp bi: Ngn ng lp trnh Visual Basic (VB) l mt loi ngn ng d s dng, c s lng ngi dng ng o v ti liu tham kho rt phong ph. iu ny cho php ngi dng trao i k nng, tm kim ti liu, m ngun mt cch d dng. Mi trng lp trnh thn thin, d dng v y nn vic xy dng ng dng s nhanh v khng cn thm cng c lp trnh no khc. Trn tt c cc ng dng nn h tr VBA, giao din lp trnh l ng nht, do ngi dng c th lp trnh m rng trn nhiu ng dng nn mt cch thun li. Th vin lp trnh c rt nhiu v a dng cho nn ngi dng c th xy dng ng dng ca mnh nhanh v chuyn nghip. Tc thc thi ca chng trnh nhanh. Khai thc c hu ht cc tnh nng sn c ca ng dng nn. Chng trnh VBA c th c nhng trong tp ca ng dng nn (chng hn nh tp bng tnh ca Excel hay tp bn v ca AutoCAD) hoc c th c lu di dng mt d n c lp. iu ny gip cho vic phn phi, chia s m lnh c thun tin.
Kt chng
T ng ha cng tc lp h s thit k cng trnh giao thng l hon ton kh thi v c th c thc hin theo nhiu cch khc nhau. D n VBA nn xy dng theo hng gp c phn tnh ton v xut kt qu vo mt m-un thng nht. S dng AutoCAD v Excel lm ng dng nn xy dng cc ng dng bng VBA nhm mc ch h tr thit k l la chn mang tnh kh thi cao v c nhiu u im. lp trnh vi VBA, cch tt nht, l lm ch tng phn. u tin cn nm vng ngn ng lp trnh Visual Basic v cch s dng VBA IDE vit m lnh cng nh thit k giao din. Sau nghin cu m hnh i tng ca ng dng nn (l nhng thnh phn ca ng dng nn m ngi dng c th s dng) cng nh cch s dng chng bng VBA.

CHNG II: Tng quan v VBA


1. c im ca VBA
T cc c im c bn c phn tch cui chng 1 ta c th thy rng VBA l mt cng c lp trnh cho php pht trin nhanh phn mm v c tch hp vo trong ng dng nn. V thc cht, VBA c xy dng da trn kin trc COM1, cho nn ngi dng c th s dng cc thnh phn sn c ca ng dng nn trong vic xy dng chng trnh ca mnh vi VBA. Mt d n c xy dng bng VBA da trn ng dng nn no th n ph thuc cht ch vo ng dng nn , bi theo mc nh, d n VBA s hot ng v s dng cc thnh phn trong chnh ng dng nn . iu ny c ngha l ta rt kh c th chuyn i mt d n VBA t loi ng dng nn ny sang mt ng dng nn khc cng nh to ra mt ng dng chy c lp. S khc bit c bn nht ca VBA trong cc ng dng nn (v d gia VBA trong AutoCAD v VBA trong Excel) l cch thc s dng cc thnh phn (i tng) ca ng dng nn. Cho nn khi xy dng ng dng bng VBA, vic u tin l phi tm hiu m hnh i tng ca ng dng nn v cch s dng chng. Nh trong chng trc trnh by, xy dng mt d n VBA, mt cch tng qut, ngi dng cn nm vng hai phn: Ngn ng lp trnh Visual Basic v giao din lp trnh VBA IDE. Phn ny s bao gm cc ni dung kin thc trong chng 2 v 3. M hnh i tng ca ng dng nn v cch s dng chng. Ni dung kin thc ca phn ny s c trnh by trong chng 4 v 5.

2. Trnh t xy dng mt d n bng VBA


V mt trnh t thc hin, vic xy dng mt d n VBA bao gm cc bc sau: 1. Xc nh r nhu cu xy dng chng trnh. Nhu cu ny c xc nh da trn hot ng thc t ca ngi dng v thng do chnh ngi dng xut. y l bc xc nh cc chc nng ca chng trnh. 2. Xc nh r mc tiu m chng trnh cn t c. Bc ny l phn c th ha ca bc 1, v d nh bc 1 c nhu cu hon thin bn v kt cu BTCT, cn bc ny s c th mc hon thin (n u v nh th no). 3. La chn ng dng nn v cng c lp trnh ph hp cho vic xy dng chng trnh. V d vi nhu yu cu tnh v to bn v ca cu kin BTCT, th ng dng nn thch hp l AutoCAD v cng c lp trnh c th l AutoLISP, VBA, ObjectARX. Ty theo mc phc tp ca bi ton m ta la chn cng c lp trnh ph hp. y VBA m bo s thun tin trong vic xy dng cc m-un tnh ton v to bn v i vi nhng bi ton thng thng. 4. Thit k h thng cho chng trnh (hay d n): bao gm vic lp s khi, xc nh cc m-un ca chng trnh, thit k giao din nhp xut d liu v kt qu, xy dng h thng c s d liu sao cho tha mn nhng xut bc 1 v 2.
COM (Component Object Model): l mt kin trc lp trnh c thit k bi Microsoft. Mc ch ca cng ngh ny l to ra mt chun cng ngh trong lp trnh, m cho php xy dng chng trnh theo m hnh lp ghp hay s dng li cc sn phm c hon thin t trc theo chun COM.
1

5. Vit m lnh (lp trnh): l vic s dng cng c lp trnh to ra chng trnh ph hp vi h thng c thit k bc 4. 6. Kim th chng trnh: l cng on hon thin v chun b a chng trnh vo s dng. Nhng cng vic chnh ca bc ny bao gm: Kim tra xem cc chc nng ca chng trnh tha mn cc yu cu ra t trc cha bng cch chy th tt c cc tnh nng ca chng trnh da trn mt kch bn c th. Kim tra hiu nng ca chng trnh: xem thi gian thc hin v quy trnh s dng chng trnh c hp l khng. Kim tra kh nng chu li ca chng trnh, v d nh khi nhp s liu sai. Mt chng trnh m bo kh nng chu li l n s khng b dng li t ngt do li thao tc ca ngi dng hay d liu sai. 7. ng gi, a chng trnh vo s dng: bao gm vic xy dng ti liu hng dn ci t v s dng chng trnh nhm mc ch gip ngi dng c th trin khai chng trnh vo thc t. 8. Tip nhn cc gp , phn hi ca ngi dng b sung hay hon thin nhng khim khuyt ca chng trnh m trong qu trnh thit k h thng hay kim th b qua hoc cha pht hin c. 9. Nng cp chng trnh: sau mt thi gian s dng, da trn nhng phn hi ca ngi dng, nu thy rng chng trnh cn b sung thm nhng tnh nng mi th ngi pht trin phn mm s thc hin s b sung ny da trn nhng thnh phn c t trc.

3. Cu trc ca mt d n VBA
Khi ni n cc thnh phn to nn mt d n VBA th cu trc ca n c th nh sau: M-un chun (Module): l ni cha cc m lnh khai bo, cc chng trnh con (hm v th tc). Vic to ra cc m-un chun thng cn c theo cc khi chc nng m ngi thit k h thng t ra. M-un lp (Class Module): l ni cha nh ngha cho cc lp ca d n. Userform: l giao din dng hp thoi gip cho vic giao tip gia ngi s dng v chng trnh c thun tin. Thng thng ngi ta s dng Userform nhp s liu, xut kt qu ca chng trnh. Trong mt s d n, nu vic nhp s liu v biu din kt qu c thc hin trc tip trn ng dng nn, th c th khng cn s dng Userform. Nhng thnh phn ny l b khung ngi dng xy dng chng trnh ca mnh ln trn , v d nh vit m lnh hay thit k giao din cho chng trnh. M-un lp v UserForm l hai thnh phn c th xut hin hoc khng thy thuc vo tng d n v tt c nhng thnh phn s dng trong d n u c hin th trn giao din ca VBA IDE (hnh 2-1).

Hnh 2-1: Cu trc ca d n th hin trn VBA IDE Tuy nhin, khi xy dng chng trnh (vit m lnh) c th th khi nim cu trc ca mt chng trnh l s b tr, sp xp cc cu lnh trong chng trnh . Nh vy khi nim cu trc ny ph thuc vo tng loi ngn ng lp trnh. i vi ngn ng lp trnh Visual Basic (VB), cu trc ca n ch tp trung vo chng trnh con (hm v th tc) ch khng c mt quy nh v cu trc no i vi chng trnh chnh. Chi tit ca cu trc ca chng trnh con s c cp n trong cc phn sau.

4. Mi trng pht trin tch hp VBA IDE


Trong mi cng c lp trnh trn ng dng nn, lun c mt mi trng lp trnh nhm h tr ngi dng c th xy dng, th nghim v hon thin chng trnh ca mnh. Trong AutoCAD v Excel, khi s dng VBA lp trnh, mi trng lp trnh c gi l Mi trng pht trin tch hp (vit tt l VBA IDE). Trn tt c cc ng dng nn, VBA IDE c cu trc v hot ng tng ng nhau vi giao din c bn nh hnh 2 v cch gi giao din VBA IDE t ng dng nn nh sau: Phm tt: t giao din chnh ca ng dng nn, nhn t hp phm Alt+F11. Menu: Tools Macro Visual Basic Editor.

Hnh 2-2: Giao din chnh ca VBA IDE 1. Thanh trnh n (Menu bar): cha tt c cc la chn cn thit thao tc vi VBA IDE 2. Ca s d n (Project Explorer Window): lit k di dng cy phn cp cc d n hin ang c m trong VBA IDE v cc thnh phn c trong tng d n nh cc ti liu thnh phn, cc m-un cha chng trnh con, cc m-un lp, cc ca s do ngi dng to.
Vic thm cc thnh phn mi vo trong mt d n c thc hin trong menu Insert ca VBA IDE. V d mun thm mt m-un chun vo trong d n, chn Insert Module

3. Ca s m lnh (Code Window): mi thnh phn c lit k trong ca s d n u c mt ca s m lnh ring, cha m lnh cho thnh phn . Ngi dng c th hiu chnh m lnh, to ra m lnh mi trong ca s m lnh. 4. Ca s tra cu i tng (Object Browser Window): hin th cc lp, phng thc, thuc tnh, s kin v hng s c trong th vin i tng v trong d n m ngi dng va to.

Ta c th s dng ca s ny tm kim, tra cu tt c cc i tng m ta va to ra cng nh cc i tng trong cc chng trnh khc. 5. Ca s i tng trc quan (Visual Object Window): khi ngi dng to cc i tng trc quan th ca s ny s cho php ngi dng thao tc trn cc iu khin mt cch d dng v thun tin. 6. Hp cng c cha iu khin (Tool Box): cha cc thanh cng c gip ngi dng c th chn cc iu khin vo ca s ngi dng (UserForm). 7. Ca s thuc tnh (Properties Window): ca s ny lit k tt c cc thuc tnh ca i tng, qua ngi dng c th tham kho v thay i cc thuc tnh khi cn nh mu ch, tn i tng

5. V d u tin vi VBA
V d ny c trnh by vi mc ch gip ngi dng lm quen vi VBA IDE trong Excel. Kt qu ca v d l hin th ni dung A1 trong Sheet1 ca bng tnh ln tiu ca mt hp thoi ngi dng (UserForm). Trnh t thc hin nh sau: 1. M ng dng Excel, nhn t hp phm ALT-F11 vo VBA IDE. 2. Trong VBA IDE, chn menu Insert trong d n. 3. Chn tip menu Insert UserForm thm mt hp thoi ngi dng vo

Module thm mt m-un chun vo trong d n.

4. Chn Module1 v son tho m lnh trong m-un nh sau:


Public Sub FirstPro() UserForm1.Show

UserForm1.Caption = Sheets("Sheet1").Range("A1").Value End Sub

Sau quay tr li Excel, v chy chng trnh theo trnh t: 1. G vo A1 ca Sheet1 ni dung Hello, World. 2. Chn menu Tools Macro Macros (hoc nhn t hp phm ALT- F8). 3. Trong hp thoi Macro, chn macro c tn FirstPro ri nhn nt Run. Kt qu chng trnh s hin th nh hnh di y:

Hp thoi Macro

Kt qu trn Excel

CHNG III: C bn v ngn ng lp trnh Visual Basic


Trong chng ny s trnh by nhng kin thc c bn trong ngn ng lp trnh Visual Basic (VB) nh: c php, cc t kho, cc kiu d liu, cc khai bo, Tt c cc v d s c vit v trnh by kt qu trong VBA IDE.

1. Nhng qui nh v c php


C php c hiu l mt mt tp hp bao gm cc quy tc, lut l v trt t v hnh thc vit ca mt cu lnh hay mt cu trc lnh. Trong ngn ng lp trnh Visual Basic (VB), cng nh cc ngn ng lp trnh khc, u c nhng quy nh v c php cho vic vit m lnh v ngi lp trnh cn phi tun theo cc quy tc ny trnh bin dch c th dch m lnh m khng pht sinh li. Sau y l cc quy nh c bn v c php ca VB: Cc cu lnh phi l cc dng ring bit. Nu c nhiu lnh trn cng mt dng th gia cc lnh ngn cch nhau bng du hai chm (:). Nu dng lnh qu di, mun ngt lnh thnh hai dng th s dng du cch v du gch di ( _ ). Nu mun chn thm ghi ch, phi bt u dng ch thch bng du nhy n (). Qui c khi t tn: phi bt u bng k t kiu ch ci thng thng; khng cha du chm, du cch hay cc k t c bit khc; khng qu 255 k t; khng trng vi cc t kho; cc bin c cng mt phm vi th khng c t tn trng nhau.

2. Cc tr gip v c php trong qu trnh vit m lnh


Cc quy tc v c php thng kh nh i vi nhng ngi mi hc lp trnh hay mi s dng ngn ng lp trnh mi, cho nn, thun tin cho ngi lp trnh, VBA IDE cung cp tnh nng t ng pht hin li c php trong qu trnh vit m lnh. Tuy nhin vic kim tra t ng ny c th gy kh chu cho nhng lp trnh vin chuyn nghip, nhng ngi rt him khi mc li c php khi lp trnh, cho nn chc nng ny ch hot ng khi c kch hot (hnh 3.1), cch lm nh sau: Chn menu Tools Options Editor Code Settings

Hnh 3-1: Bt / Tt tr gip pht hin li c php ca VBA IDE ngha ca hai ty chn ny nh sau: T ng kim tra li c php (Auto Systax Check): Ty chn ny cho php VBA IDE t ng pht hin li c php ngay sau khi ngi dng kt thc dng lnh (xung dng mi), mt hp thoi nh hnh 3-2 s thng bo v tr gy li cng nh nguyn nhn gy li. Nu ngi dng b qua khng sa ngay th dng lnh c li s c nh du.

Hnh 3-2: VBA IDE t ng kim tra li c php v thng bo cho ngi dng Kim tra cc bin (Require Variable Declaration): Trong VB, ngi dng c th s dng mt bin m khng cn khai bo. Trong trng hp ny bin s c khi to v nhn mt gi tr mc nh. Tuy nhin, nu lm dng iu ny, rt c th s lm cho chng trnh kh qun l v d nhm ln, v th VBA IDE cung cp ty chn ny cho php ngi dng thit lp tnh nng kim sot qu trnh khai bo bin. Khi ty chn ny c kch hot, tt c cc bin u phi khai bo trc khi s dng v VBA IDE s t ng thm vo u ca mi m-un dng lnh Option Explicit nh hnh 3-4.

Hnh 3-4: VBA IDE t ng thng bo li khi bin c s dng m cha khai bo

3. Tnh nng gi nh v t hon thin m lnh


M lnh, thng thng l mt tp hp bao gm cc t kha, cu lnh, tn bin hay ton t c sp xp theo mt trt t nht nh. Tn ca cc thnh phn ny c th kh nh chnh xc hoc qu di, cho nn VBA IDE a ra tnh nng ny bng cch hin th nhng thnh phn c th ph hp vi v tr dng lnh ang son tho trong mt danh sch v s t ng in vo chng trnh theo la chn ca ngi dng (bm phm Tab). kch hot tnh nng ny ta lm nh sau: Trong VBAIDE chn menu Tools Options Editor (nh hnh 3-5)

Hnh 3-5: Bt / tt tr gip hon thin m lnh t ng trong VBA IDE ngha ca cc ty chn ny nh sau: T ng hin th danh sch cc thnh phn ca i tng (Auto List Member): Vi ty chn ny, khi mt i tng ca ng dng nn hay ca chng trnh c gi ra s dng th mt danh sch cc thnh phn ca n (bao gm cc phng thc v thuc tnh) s c t ng hin th ngi dng chn, sau khi bm phm Tab, tn ca thnh phn ny s c t ng in vo v tr thch hp trong dng lnh (hnh 3-6).

Hnh 3-6: Danh sch cc thnh phn c t ng hin th. T ng hin th c php cho chng trnh con (Auto Quick Info): Vi ty chn ny, VBA IDE s hin th nhng thng tin v tham s ca mt hm hay th tc ( c xy dng t trc) khi ngi dng s dng n. Cc thng tin ny bao gm tn ca tham s cng vi kiu ca n (hnh 3-7).

Hnh 3-7: T ng hin th thng tin ca cc tham s trong chng trnh con. T ng hin th gi tr ca bin (Auto Data Tips): Vi ty chn ny, trong ch g li (Break mode), gi tr ca bin (c gn trong qu trnh chy ca chng trnh) s c hin th khi ngi dng t chut ti v tr bin. Ngoi ra, nu nhng tnh nng tr gip trn cha c kch hot, trong qu trnh vit m lnh, ngi dng c th kch hot tm thi chng bng cch nhn t hp phm Ctrl Space. Cn ch rng, khi danh sch tr gip hin ra, ngi dng c th s dng chut hoc phm mi tn la chn mc cn s dng trong danh sch ri bm phm Tab xc nhn.

4. T kho trong VB
T kho l tp hp cc t cu thnh mt ngn ng lp trnh. Mi ngn ng lp trnh u c mt b t kho ring, di y l danh sch cc t kho trong ngn ng lp trnh VB: As Binary ByRef ByVal Date Else Empty Error False For Friend Get Input Is Len Let Lock Me Mid New Next Nothing Null On Option Optional ParamArray Print Private Property Public Resume Seek Set Static Step String Then Time To True WithEvents

Cc t kha l nhng t c dng ring cho nhng chc nng khc nhau trong ngn ng lp trnh, v d t kha Private hn ch phm vi s dng ca bin hay chng trnh con. Do vic t tn (bin, chng trnh con) bt buc phi khc so vi cc t kha, nu khng s pht sinh li c php.

Hnh 3-8: VBA IDE bo li do tn bin trng tn vi t kha

5. Cc kiu d liu c bn
Khi mt chng trnh vn hnh, n s tc ng v lm thay i gi tr ca mt vi thng s trong chng trnh, v d trong chng trnh gii phng trnh bc 2, cc thnh phn trong phng trnh: y=ax2+bx+c s cn thay i gi tr khi chng trnh hot ng. Nh vy gi tr ca cc thng s ny c nhu cu thay i trong nhng ln hot ng khc nhau ca chng trnh cng nh trong mt ln hot ng no , v d gi tr ca y s thay i khi ta thay i gi tr ca a trong phng trnh trn. Chnh bi nhu cu thay i gi tr ny m ngi ta a khi nim bin m t s ng ca nhng thng s ny. Vi mi bin, gi tr ca n lun c quy nh l phi thuc mt kiu d liu no , v d gi tr ca y trong phng trnh trn phi l kiu s thc. Do ngn ng lp trnh c thit k thc hin nhiu nhim v khc nhau cho nn trong

ngn ng lp trnh no cng lun c nhiu kiu d liu thch ng vi nhu cu a dng ca vic lp trnh. Kiu d liu l loi gi tr m mt bin c th nhn, ni cch khc, khi mt bin c khai bo th ta buc phi gn cho n mt kiu d liu nht nh. V tng th c th chia cc kiu d liu trong VB ra lm hai loi: Cc kiu d liu c nh ngha sn trong VB: l nhng kiu d liu c bn v thng gp nh kiu s thc (Double), s nguyn (Integer), Chui (String)... Cc kiu d liu do ngi dng t nh ngha: l kiu d liu c t xy dng da trn nhng thnh phn d liu c bn trong VB. Cch xy dng kiu d liu ny c cp trong phn di.

5.1. Kiu logic (boolean)


Ch cha hai gi tr TRUE v FALSE (ng v sai). Khi chuyn t cc d liu dng s sang kiu logic, 0 s c chuyn thnh FALSE cn gi tr khc s c chuyn thnh TRUE. Khi chuyn t kiu logic sang kiu s, gi tr FALSE s c chuyn thnh 0 cn gi tr TRUE s c chuyn thnh -1.
Khai bo bin A l kiu logic Dim A As Boolean

Bin A lc ny ch c th nhn cp gi tr: True hay False.

5.2. Kiu s nguyn


Dng cha cc gi tr l s nguyn v c vi loi d liu kiu ny. S khc nhau ca nhng loi d liu ny l gii hn gi tr (ln nht v nh nht) m bin c th nhn c (tham kho bng di). Kiu s nguyn Kch thc
Byte Integer Long 1 byte 2 bytes 4 bytes

Phm vi
0 n 255 -32,768 n 32,767 -2,147,483,648 n 2,147,483,647

5.3. Kiu s thc


Dng cha cc gi tr l s thc. Cc kiu s thc thng dng c trnh by trong bng di y: Kiu s thc K.thc Phm vi
Single Double Currency 4 byte 8 bytes 8 bytes T -3.402823E38 n v t 1.401298E-45 n 3.402823E38 -1.401298E-45

-1.79769313486231E308 n -4.94065645841247E-324 v t 4.94065645841247E-324 n 1.79769313486232E308 T -922,337,203,685,477.5808 n 922,337,203,685,477.5807

5.4. Kiu mng (array)


Khi gp trng hp phi s l mt lot cc bin tng t nh nhau, v d cc phn t ca mt ma trn, nu ta phi t tn khc nhau cho tt c cc bin ny th rt bt tin, thay vo ta c th dng kiu mng t tn chung cho c nhm cc phn t v khi no cn s dng tng phn t ta s gi tn theo ch s ca chng trong mng.
Khai bo mng

Dim Matrix_1(10) As Double

Mng Matrix_1 trn c 11 phn t lin tc c nh s t 0 n 10 (ma trn c 1 hng v 11 ct). Khi s dng ta ch vic gi phn t cn dng theo ch s tng ng.
Gn gi tr 100 cho phn t th 2 Matrix_1(1)=100 Gn gi tr 100 cho phn t cui cng Matrix_1(10)=100

Ta cng c th c nh phm vi ch s ca mng bng cch khai bo nh sau:


Khai bo mng Dim Matrix_2(1 To 10) As Double

Lc ny ch s ca mng Matrix_2 s bt u t 1 v mng ny c 10 phn t.


Gn gi tr 200 cho phn t th 2 Matrix_2(2)=200 Gn gi tr 200 cho phn t cui cng Matrix_2(10)=200

V d sau khai bo v s dng (gn gi tr cho phn t) mt ma trn 3 hng 5 ct


Khai bo mng (3x5) Dim Matrix_3(1 To 3, 1 To 5) As Double Gn gi tr 100 cho phn t ti hng th 2 ct th 3 Matrix_3(2,3)=100

Trong VB, mng c th c mt chiu hoc nhiu chiu, kch thc ca mng c xc nh da trn s chiu v bin trn, bin di ca mi chiu. Cc thnh phn trong mng l lin tc gia hai bin. Trong cc v d trn, cc mng c kch thc (hay s lng phn t) l khng thay i trong sut qu trnh hot ng ca chng trnh. Ngi ta gi loi mng ny l mng tnh v thng c dng cho nhng bi ton bit trc s phn t ca mng hay kch thc mng khng ln. Ngoi loi mng tnh ny, trong VB cn cho php nh ngha mt loi mng khc m kch thc (hay s lng phn t) ca n c th thit lp li ngay trong lc chng trnh ang hot ng, ngi ta gi loi mng ny l mng ng. Vi mng ng, ngi lp trnh khng cn bit s phn t ca mng trong lc lp trnh, s phn t ny s c thit lp trong qu trnh chng trnh hot ng da theo nhu cu ca tng bi ton c th. Khi mt mng ng, m cc phn t ca n c gn gi tr, cn thay i kch thc, s c hai tnh hung cn xt n: Ton b gi tr ban u (trc lc thay i kch thc mng) s b hy b, cc phn t mng mi (sau khi thay i kch thc) s nhn gi tr mc nh.
Khai bo mng A l mng ng Dim A() As Long Xc nh kch thc cho mng ng A: mng 1 chiu c 5 phn t Redim A(1 to 5) As Long Gn gi tr cho phn t ca mng A A(1) = 100: A(2) = 200 nh li kch thc cho mng A: mng hai chiu vi 3x3=9 phn t Redim A(1 to 3, 2 to 4) as Long

Sau dng cui cng ny, ton b gi tr ca mng A c (c A[1]=100 v A[2]=200) s b xa b v tt c cc phn t mi ca mng A (9 phn t) s nhn gi tr mc nh (thng c gn bng 0). Gi tr c ca cc phn t mng s c gi li khi c hai iu kin sau tha mn: S dng lnh ReDim vi t kha Preserve. S thay i kch thc mng ch c thc hin bin trn ca chiu cui cng ca mng, ngha l cc phn t cn gi li gi tr c ch s khng i ngay c khi mng c nh li kch thc.
Khai bo mng ng A Dim A() As Long Gn kch thc cho mng A ReDim A(1 To 3, 1 To 3) As Long Gn gi tr cho phn t ca mng A A(1,1) = 100: A(1,2) = 200 A(2,1) = 150: A(2,2) = 250 nh li kch thc cho mng A, gi li gi tr ban u ca cc phn t, lu n phm vi ca mng mi ReDim Preserve A(1 To 3, 1 To 5) As Long

Hnh 3-9: Cc phn t c th gi li gi tr ban u v cc phm vi c th thay i kch thc ca mng ng Trong v d trn, cc phn t ca mng A c gi li gi tr sau khi kch thc ca mng c thay i li. Lu , ta ch c th gi li gi tr ca mng ban u khi s m rng c thc hin ra bin cui cng ca n nh trn hnh 3-9.

5.5. Kiu chui (String)


Chui l mt hng bao gm cc k t lin tc nhau, cc k t y rt a dng: c th l ch s, ch ci, du cch (space), k hiu. S lng k t trong mt chui l rt ln (216 k t). Mc nh trong VB, cc bin hay tham s kiu chui c chiu di thay i ty theo gi tr d liu c gn cho n.
Dim S As String S=ABCD 1234 @#$%

to iu kin thun li cho ngi dng, bn trong VB c sn mt s hm lin quan n x l chui, v d nh ct chui, tch chui, ghp chui, tm kim, Cc hm c bn ny c trnh

by phn sau trong gio trnh ny hoc c th tra cu ton b cc hm lin quan trong MSDN (Microsoft Developer Network) hoc Object Browser (th vin Strings) bng cch nhn phm F2 trong giao din lp trnh VBA IDE (hnh 3-10).

Hnh 3-10: Thng tin v cc hm trong th vin lp trnh ca VBA c hin th trong Object Browser

5.6. Kiu thi gian (Date)


Dng lu tr v thao tc trn cc gi tr thi gian (ngy v gi). nh dng ngy v gi ph thuc vo cc thit lp v hin th trong h thng ca ngi dng. Khi chuyn t cc d liu kiu s sang kiu ngy thng, cc gi tr bn tri du phy chuyn thnh thng tin v ngy cn gi tr bn phi du phy s c chuyn thnh thng tin v gi.
Dim D As Date Dim S As String D = Now() S = "Ngay: " & Day(D) & " - Thang: " & Month(D) & " - Nam: " & Year(D) Debug.Print (S)

V d trn s hin th thng tin v thi gian (ngy thng nm) trong ca s Immediate ca VBA IDE.

5.7. Kiu Variant


Kiu Variant l mt kiu d liu c bit c th cha tt c cc loi d liu, ngoi tr kiu chui c chiu di c nh. Kiu Variant cng c th cha cc gi tr c bit nh Empty, Error, Nothing v Null. Tuy kiu d liu Variant c v tin dng nhng khi s dng mt cch qu thoi mi th nguy c gy li ca loi bin ny l rt ln, c bit khi thao tc vi cc ton t.
Dim V As Variant Gn bin V vi mt chui V = String Gn bin V vi mt s V = 16 Gn bin V vi gi tr kiu logic V = True

Gn bin V vi mt d liu kiu thi gian V = #01/06/2007#

S dng hm VarType(vVariant) s cho ta m ca kiu d liu hin ang lu tr trong bin Variant. Gi tr VarType 0-vbEmpty 1-vbNull 2-vbInteger 4-vbSingle 7-vbDate 8-vbString 9-vbObject 11-vbBoolean Ch thch
Khng c g trong variant Khng c d liu hp l trong variant Variant cha Integer Variant cha Single Variant cha Date/Time Variant cha String Variant cha mt Object Variant cha Boolean

5.8. Kiu t nh ngha (user-defined type)


Kiu t nh ngha l kiu d liu do ngi dng nh ngha, tng t nh kiu bn ghi (Record) trong ngn ng lp trnh Pascal hay kiu cu trc (Struct) trong ngn ng lp trnh C. Kiu t nh ngha bao gm nhiu trng d liu, mi trng d liu c th l cc kiu d liu c bn hoc cc kiu t nh ngha khc. V d, khi o ton c bng my kinh v c, vi mi im o ta cn lu li cc thng tin sau: K hiu TrM STT DT DG DD H V MT ngha
S hiu trm t my Th t ca im o S c dy trn S c dy gia S c dy di Gc bng Gc ng M t c im ca im o

Kiu gi tr
Integer Integer Double Double Double Double Double String

Vi mt chng trnh x l s liu o ton c, cch tt nht l qun l theo im o, v do mi im o l mt bin c kiu d liu ph hp vi bng trn. chnh l kiu d liu t nh ngha.
nh ngha kiu d liu cho im o ton c Type DiemDo TrM As Integer STT As Integer DT As Double

DG As Double DD As Double H As Double V As Double MT As String End Type

Sau khi nh ngha kiu d liu DiemDo xong, ta c th s dng n nh nhng kiu d liu thng thng khc.
Khai bo bin s dng kiu d liu t nh ngha Dim P1 As DiemDo Dim P_Array(1 to 1000) As DiemDo With P1 .TrM = 1 .STT = 1 .DT = 2130 .DG = 2120 .DD = 2110 .H = 130.5 .V = 78.25 .MT = Goc nha C4 End With P_Array(1) = P1

T kha: With End With dng trnh phi nhp li nhiu ln tn bin kiu d liu t nh ngha. Du chm ( . ) c s dng thao tc vi cc thnh phn bn trong ca bin c kiu d liu t nh ngha. V d sau l tng ng vi v d trn, nhng khng s dng cp t kha With End With, ch l du chm ( . ) lun c:
Khai bo bin s dng kiu d liu t nh ngha Dim P1 As DiemDo Dim P_Array(1 to 1000) As DiemDo P1.TrM = 1 P1.STT = 1 P1.DT = 2130 P1.DG = 2120 P1.DD = 2110 P1.H = 130.5 P1.V = 78.25 P1.MT = Goc nha C4 P_Array(1) = P1

5.9. Kiu lp (Class)


Kiu lp (Class) l mt m rng ca kiu d liu t nh ngha, s khc bit c bn y l trong kiu lp cn c nhng on chng trnh dng x l chnh nhng d liu trong n. D liu bn trong lp thng c gi l cc thuc tnh (Properties), cn nhng on chng trnh trong lp x l d liu ny thc cht l cc Hm / Th tc (Function / Sub) c nh ngha bn trong lp v thng c gi l cc Phng thc (Methods). Mt bin c kiu d liu l lp c gi l mt i tng (Object) v cch s dng cc Properties, Methods ca i tng ny tng t nh cch s dng cc thnh phn ca kiu d liu t nh ngha. Lp cn c xy dng trong Class Module hoc ta c th s dng li cc lp sn c t cc th vin lp trnh. Nh vy lp c th gm cc thnh phn sau:

Cc thuc tnh (Property): l cc d liu m t trng thi ca bn thn i tng hoc cc quan h ca n vi cc i tng khc.V bn cht, thuc tnh l cc bin c khai bo trong lp . Kiu d liu ca cc thuc tnh c th l cc kiu d liu c bn hoc c th l mt lp khc (kiu Class). Cc phng thc (Method): m t hnh vi, chc nng ca i tng. V bn cht, phng thc l cc chng trnh con c xy dng bn trong lp v chng c nhim v x l cc d liu ca chnh lp . Cc s kin (Event): S kin gip cho lp c kh nng giao tip vi cc lp khc hoc vi mi trng ngoi. Trong khun kh ca gio trnh ny, cc vn lin quan n xy dng lp s khng c cp chi tit. Tuy nhin nu ai quan tm c th tm hiu thm trong gio trnh Lp trnh hng i tng trong xy dng ca b mn T ng ha thit k Cu ng.

6. Khai bo trong VB
Trong VB, mun s dng mt bin c th khng cn khai bo, tuy nhin cch lm ny ch nn dng khi vit cc chng trnh nh, cn i vi cc chng trnh ln, c nhiu m-un, th nn bt buc khai bo bin trc khi s dng (theo cch thit lp mc 2 ca chng ny). Khai bo bin, v thc cht, chnh l vic to m lnh (lp trnh) cho nn cc on m lnh khai bo bin c th t bt c thnh phn no trong d n VBA (m-un chun, m-un lp, v Userform). Ty theo nhu cu s dng bin m ngi ta gii hn phm vi s dng ca bin sao cho vic lp trnh c thun tin nht da trn nhng nguyn tc sau: Khi bin khai bo trong chng trnh con no th phm vi s dng ca n c gii hn trong chnh chng trnh con . Bin loi ny c gi l bin cc b.

Hnh 3-10: Phm vi s dng ca bin c khai bo trong chng trnh con S dng t kha Public xc nh phm vi s dng bin l trong ton b d n, ngha l t bt c ni u trong d n (m-un chun, m-un lp, v Userform) u c th s dng bin ny. Bin c khai bo vi t kha Public thng c gi l bin ton cc. Trong m-un no , nu mt bin c khai bo vi t kha Dim, th mc nh, bin l bin cc b, ngha l tng ng vi vic s dng t kha Private.
Ch : khng s dng cc t kho Public,Private hay Friend cho khai bo d liu nm bn trong chng trnh con.

Hnh 3-12: Phm vi s dng bin ton cc mc rng hn, c th coi bin nh mt khi d liu ca chng trnh v mc ton cc c chia lm hai loi nh sau: Ton cc mc ng dng: Trong trng hp ng dng gm nhiu d n (multiprojects), nu trong mt m-un khng c khai bo la chn Option Private Module th tt c cc thnh phn d liu hay chng trnh c khai bo Public trong m-un c phm vi hot ng ton b ng dng ngha l chng cn c th c tham chiu t nhng d n khc trong ng dng. Ton cc mc d n: Trong trng hp ng dng gm nhiu d n (multi-projects), nu trong mt m-un c khai bo la chn Option Private Module th tt c cc thnh phn d liu hay chng trnh c khai bo Public trong m-un ch c phm vi hot ng trong ni b d n cha m-un m khng th c tham chiu t nhng d n khc trong ng dng.

Hnh 3-13: Khai bo ty chn phm vi bin mc d n. S dng t kha Private xc nh phm vi hot ng ca bin l trong ni b ca m-un , tt c cc chng trnh con hay bt c thnh phn no ca m-un ny u c th s dng bin loi ny nhng chng khng th truy cp c t nhng m-un hay Userform khc trong d n.

Hnh 3-14: Phm vi s dng ca bin tng ng vi t kha Public v Private.


Khi khai bo kiu d liu ngi dng t nh ngha hoc cc chng trnh con trong mt m-un, nu khng ch r phm vi hot ng th pham vi hot ng mc nh l Public. trnh cc nhm ln do khng nh phm vi hot ng mc nh, ngi dng nn ch r phm vi hot ng ca chng trnh hay d liu ngay khi khai bo.

Ngoi ra, trong cc m-un lp (Class Module) hoc m-un lnh ca UserForm cn c th s dng t kha Friend xc nh phm vi hot ng ca mt chng trnh con (phng thc). Khi s dng t kha ny, chng trnh con c th c truy xut t mi ni trong ni b d n (Project) cha n nhng khng th c truy xut trong nhng d n khc ca ng dng (khc vi khi dng t kha Public chng trnh con c th c truy xut t mi ni ca ng dng).
Cc khai bo d liu vi cc t kho trn c thc hin trong phn General ca mt mun. Cc d liu cn c gi l d liu cp m-un (module level). Trong mi m-un, phn u tin (ca phn vit m lnh) c gi l phn General ca m-un . Theo quy c, cc thit lp cho m-un c t y v VBA IDE s t ng phn cch phn ny (hnh 3-15). Khng c gii hn v kch thc cho phn ny.

Hnh 3-15: Phn General trong m-un

6.1. Khai bo hng s


Hng s l mt loi bin c bit m gi tr ca n c xc nh ngay lc khai bo v lun khng thay i. Ta nn dng cch ny cho nhng hng s hay phi dng lp li trong chng trnh, v d nh hng s = 3.14159. Sau khi khai bo hng s ny:
Const Pi=3.14159

ta lun c th s dng gi tr 3.14159 bt c ch no trong chng trnh vi ci tn d nh hn l Pi. C php:


[Public/ Private] Const <tn_hng>=<gi_tr_hng_s>

Cc t kho Public hay Private xc nh phm vi hiu lc ca hng s, vi t kho Public, hng s ny c th s dng bt c u trong ng dng, cn vi t kho Private th hng s ny ch c th s dng bn trong m-un ni khai bo hng s . ngha ca hai t kha ny cng khng thay i cho tt c cc phn khc m c s dng chng.

6.2. Khai bo bin


C php:
Dim <tn_bin> as <Kiu_d_liu>

Khi dng t kha Public hay Private nhm xc nh phm vi hiu lc ca bin thay cho t kha Dim trong khai bo bin th c php nh sau:
Public <tn_bin> as <Kiu_d_liu>

Hay:
Private <tn_bin> as <Kiu_d_liu>

6.3. Khai bo kiu t nh ngha


Trong VB c th khai bo cc kiu d liu theo nhu cu ca ngi s dng. C php khai bo nh sau:
Type <Tn_ kiu> <tn_trng_1> as <Kiu_d_liu> <tn_trng_2> as <Kiu_d_liu> <tn_trng_n> as <Kiu_d_liu> End Type

Sau khi khai bo kiu t nh ngha, ngi dng c th s dng cc bin c kiu t nh ngha bng cch khai bo nh cc bin thng thng, vi <Kiu_d_liu> c thay bng <Tn_kiu>. truy cp ti mt trng ca bin kiu bn ghi, dng ton t (.) hoc dng cp t kha With End With.
Cc t kho Public hay Private nhm xc nh phm vi hot ng ca kiu d liu c khai bo. ng thi khai bo kiu ch c thc hin cp m-un (khng thc hin c trong cc chng trnh con). Khi khng ch r th phm vi hot ng th mc nh ca mt kiu d liu t nh ngha l Public.

6.4. Khai bo mng tnh


C php:
[Public/Private/Dim] <tn_mng> (<thng_s_v_chiu>) as <tn_kiu>

Cc thng s v chiu c th biu din qua cc v d sau:


Dim a(3 To 5) As Integer Mng 1 chiu vi cc ch s t 3 n 5

Dim A(3) As Long Mng 1 chiu vi ch s n 3 (mng 1 chiu c 4 phn t vi ch s t 0 n 3)

Dim A(2 To 4, 6) As Double Mng 2 chiu vi mt min ch s t 2 ti 4 v mt min c ch s t 0 n 6.


Cc t kho Public hay Private xc nh phm vi hot ng ca bin mng (trong trng hp mng c khai bo mc m-un). Cc qui nh v phm vi hot ng ca mng tng t vi bin thng thng - c trnh by phn trc.

6.5. Khai bo mng ng


C php:
[Public/ Private/ Dim] <tn_mng> () as <tn_kiu>

Trong khai bo trn khng cha cc thng s v chiu v thun ty ch l mt khai bo. Cc phn t ca mng cha c to ra (hay ni cch khc mng vn cha thc s c cp pht b nh) v vn cha sn sng s dng. Trc khi s dng mng ng hoc khi mun thay i kch thc ca mng, s dng lnh Redim. C php nh sau:
Redim <tn_mng> (<cc thng s v chiu>) as <tn kiu>

Ch rng <tn_kiu> phi ng nh khai bo ban u, cc thng s v chiu c th khc trc c v s chiu v kch thc ca tng chiu. Khi , cc d liu c trong mng khng cn na, thay vo l nhng phn t mi c khi to.

6.6. Khai bo, to v lm vic vi bin i tng


Khai bo v to bin i tng phi dng thm t kha New
Dim <tn_bin> as New <Kiu_d_liu>
<Kiu_d_liu> l lp (class) c nh ngha t trc.

Php gn i tng c thc hin vi t kha Set

Set <bin_i_tng> = <gi_tr>

Ch rng nu thc hin khai bo mt bin i tng nh thng thng (khng c t kha New) th bin thc s cha c to ra. Trong trng hp , ngi s dng phi to v gn i tng vi cc t kho tng ng l New v Set.
Dim <tn_bin> as <Kiu_d_liu> Set <tn_bin> = New <Kiu_d_liu>
Ch : cu lnh Set khng phi l cu lnh khai bo, v vy n phi c vit trong mt chng trnh con no ch khng th nm trong phn General ca mt m-un.

Lm vic vi mt bin i tng tc l qu trnh thao tc vi i tng thng qua cc thuc tnh, phng thc v cc s kin ca i tng . truy cp ti cc thuc tnh v phng thc ca i tng ta s dng theo c php sau, ch n du chm ( . ) gia tn bin v tn thuc tnh hay tn phng thc:
<Tn_bin>.<Tn_thuc_tnh> <Tn_bin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>

7. Cc ton t v hm thng dng


7.1. Cc ton t
Ton t c s dng cho mc ch x l d liu. Ta s dng cc ton t thc hin tnh ton, so snh, gn v thc hin nhiu thao tc khc. Di y l danh sch v ngha ca mt s ton t thng dng: Ton t
Ton t gn = + * / \ Mod ^ Ton t logic Not And Or Tr v gi tr ph nh vi gi tr biu thc. Not(TRUE)=FALSE Ni logic hai biu thc. And(TRUE,TRUE)=FALSE; cc trng hp khc cho kt qu bng FALSE Or(FALSE,FALSE)=FALSE; cc trng hp khc cho kt qu l TRUE Gn gi tr cho bin hoc thuc tnh Cng Tr Nhn Chia Chia ly phn nguyn Chia ly phn d Lu tha Ton t ton hc

M t

Xor Eqv = <> > >= < <=

Cho kt qu TRUE nu hai i s c cng gi tr; ngc li cho kt qu l FALSE So snh hai gi tr logic; cch thc x l tng t nh ton t Xor So snh bng Khc nhau Ln hn Ln hn hoc bng Nh hn Nh hn hoc bng

Ton t so snh

7.2. Cc hm ton hc
Cc hm ton hc c cha trong th vin Math (c th tra cu th vin ny bng Object Browser) v c nhim v thc hin cc php ton thng thng hay gp. Sau y l mt s hm thng dng: Hm
Abs(x) Exp(x) Log(x) Sqr(x) Cos(x), Sin(x), Tan(x) Atn(x) Fix(x) Int(x) Round(x,num) Val(str)

M t
Ly gi tr tuyt i Ly m c s t nhin Logarit c s t nhin Ly bnh phng Hm lng gic Hm lng gic ngc Ly phn nguyn (trc du phy). Fix(3.7)=3 Ly phn nguyn c lm trn. Int(3.7)=4 Lm trn s thc <x> n <num> ch s sau du phy Chuyn i chui <str> thnh gi tr kiu s

7.3. Cc hm chuyn i d liu


Chuyn i nh dng s liu l mt nhu cu thng gp trong lp trnh do cc ngn ng lp trnh lun i hi kiu d liu phi r rng v c nh cho tng bin nhm trnh pht sinh cc li sau ny. Vic chuyn i ny, nu trong trng hp thng thng , th VB s t ng thc hin. Nhng khi gp cc yu cu c bit th buc ngi dng phi s dng nhng hm chuyn i ph hp.
Vic chuyn i kiu d liu lun c th to ra li do khng th chuyn i c hoc pht sinh kt qu sai. Cho nn khi s dng cn ch n cc kh nng gy li ca vic chuyn i kiu d liu.

Cc hm ny c cha trong th vin Conversion (c th tra cu th vin ny bng Object Browser). Sau y l mt s hm thng dng: Hm
CBool(Expression) CByte(Expression) CInt(Expression)

M t
Chuyn i d liu sang kiu logic (Boolean) Chuyn i d liu sang kiu Byte Chuyn i d liu sang kiu nguyn (Integer)

CLng(Expression) CDbl(Expression) CSng(Expression) CStr(Expression) Str(Number) Val(String As String)

Chuyn i d liu sang kiu nguyn (Long) Chuyn i d liu sang kiu thc (Double) Chuyn i d liu sang kiu thc (Single) Chuyn i d liu sang kiu xu (String) Chuyn i d liu s sang kiu xu (String) Chuyn i d liu t String sang Double

V d:
Public Sub Test () Dim StrA as String Dim A as Double StrA=1234 A=Val(StrA) Kt qu A=1234 Debug.print A A=4567 StrA=Val(A) Kt qu StrA=4567 Debug.Print StrA End Sub
c th chy th cc on m lnh trn, trong VBA IDE, trc ht cn to ra mt mun trong d n (nu cha c) sau to ra mt chng trnh con dng Sub v nhp on m lnh cn th vo chng trnh con ny. t con tr son tho m lnh bt c dng no trong chng trnh con v bm phm F5 chy chng trnh.

Kt qu nh sau:

Ca s Immediate l mt b phn trong VBA IDE, bt / tt ca s ny c thc hin trong menu View ca VBA IDE. Khi s dng lnh Debug.Print <tn_bin> th gi tr ca bin s c th hin trong ca s Immediate khi chng trnh hot ng v c lu li ngay c khi chng trnh kt thc. Ca s ny thng c dng vi mc ch g li khi lp trnh. Khi ni dung trong ca s ny nhiu qu th ta c th xa bt bng cch chn vng cn xa v bm phm Delete.

7.4. Cc hm x l chui
Cc hm loi ny c cha trong th vin Strings (c th tra cu th vin ny bng Object Browser). Sau y l mt s hm thng dng: Hm
Asc(x) Chr(x) Left(String, Length as Long) Mid(String, Start As Long, [Length]) Right(String, Length As Long)

M t
Tr v m ASCII ca k t u trong mt chui Chuyn i t m ASCII sang mt k t Trch d liu bn tri ca mt chui Trch d liu phn gia ca mt chui Trch d liu phn bn phi ca mt chui

Split(String) Joint(StringArray)

Tch mt chui di thnh mt mng gm nhiu chui nh hn Gp mt mng cc chui thnh mt chui duy nht

V d:
Public Sub Test() Dim StrArDes() As String ' Mng cc chui c khai bo dng mng ng Dim StrScr As String 'Chui ban u StrScr = "Point1_23.5_4.5_44.8" StrArDes = Split(StrScr, "_") ' Tch chui StrScr thnh mt mng cc chui v a vo StrArDes, ' k t ngn cch l "_" ' Khi StrArDes(0)="Point1, StrArDes(1)="23.5" ' StrArDes(2)="4.5", StrArDes(3)="44.8" Debug.Print StrArDes(0), StrArDes(1), StrArDes(2), StrArDes(3) End Sub

Kt qu s nh sau:

Lu l du _ trong v d trn c th thay th bng bt c k t no.


Trong tt c cc ngn ng lp trnh, khi nim chui s v s l khc nhau. V d khi gn A=123 th gi tr ca A l mt chui k t gm 1, 2 v 3. Cn khi gn B=123 th gi tr ca B l mt trm hai mi ba.

8. Cc cu trc iu khin
8.1. Cu trc iu kin
Cc t kha: If, Then, Else, ElseIf, End If C php:
If <biu_thc_iu_kin> then Khi_lnh End If

Din gii tin trnh ca cu trc iu kin nh sau: nu <biu_thc_iu_kin> l ng th chng trnh s thc hin <khi_lnh>, nu sai th chng trnh s thot khi cu trc lnh ny. S khi ca cu trc lnh kiu ny c th c biu din nh sau:

True iu kin Khi lnh

False

Dim A As Double Dim B As Double A = 20: B = 10 If A > B Then Debug.Print ("Hieu cua hai so A va B >0")

Kt qu nh sau:

Nu nh [khi_lnh] c th vit trn mt dng nh v d trn th khng dng t kha End If. phn tch nhiu lnh trn cng mt dng, s dng du hai chm (:) ngn cch gia cc lnh.

Ngoi cu trc c bn v trng hp ring trn, trong nhiu trng hp, ta buc phi x l khi <Biu_thc_iu_kin> tr v gi tr False (sai). gii quyt tnh hung ny ta s dng cu trc iu kin m rng nh sau:
If <biu_thc_iu_kin> Khi_lnh_1 Else Khi_lnh_2 End If

Din gii tin trnh ca cu trc lnh ny nh sau: nu <biu_thc_iu_kin> l ng th chng trnh s thc hin <khi_lnh_1>, cn nu khng ng th chng trnh s thc hin <khi_lnh_2>. S khi ca cu trc lnh kiu ny c th c biu din nh sau:

True iu kin False Khi_lnh_2 Khi_lnh_1

Cc cu trc lnh iu kin c th c lng nhau th hin nhng thao tc phc tp hn bng cch s dng thm t kho ElseIf. Nh vy, cu trc iu kin c c php tng qut nh sau:
If <iu_kin_1> Then [Khi_lnh_1] [ElseIf <iu_kin_n> Then [khi_lnh_n] ... [Else [Khi_lnh_2]] End If

Trong khi cu trc ny, khi lnh [ElseIf <iu_kin_n> Then c th lp li nhiu ln tng ng vi nhiu iu kin khc nhau. Din gii cu trc ny nh sau: nu <iu_kin_1> l ng th thc hin [Khi_lnh_1] v thot khi khi cu trc ny, cn nu sai th s kim tra ln lt tng iu kin ca ElseIf xem c gi tr no ng khng, nu khng c gi tr no ng th thc hin [Khi_lnh_2] (sau t kha Else) v thot khi cu trc ny, cn nu gp mt gi tr ng u tin ca <iu_kin_n> no th khi lnh tng ng vi ElseIf ny s c thc hin v thot khi cu trc ny.
If (TheColorYouLike = vbRed) Then MsgBox "You 're a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You 're a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You 're a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End If

Ta xt v d trn: Nu TheColorYouLike = vbRed th s ch c thng bo: You 're a lucky person. Nu TheColorYouLike = vbBlue th s ch c thng bo: You 're a brave person.

Nu TheColorYouLike khng thuc bt c gi tr no trong bng mu: vbRed, vbGreen, vbBlue, vbMagenta th s ch c thng bo: You 're an average person.

8.2. Cu trc la chn


Cu trc ny s dng khi ta mun thc hin mt s lnh no y tng ng vi tng gi tr ca biu thc kim tra. Cc t kho s dng trong cu trc ny: Select Case, Case, Case Else, End Select. C php ca cu trc la chn:
Select Case <biu_thc_kim_tra> [Case iu_kin_1 [khi_lnh_1]] ... [Case iu_kin_n [khi_lnh_n]] [Case Else [khi_lnh_else]] End Select

Din gii tin trnh ca cu trc la chn nh sau: Gi tr ca <biu_thc_kim_tra> s c so snh vi cc <iu_kin_i> nu gi tr ca <biu_thc_kim_tra> tho mn <iu_kin_i> th <khi_lnh_i> tng ng s c thc hin, sau chng trnh s thot khi cu trc la chn. Trong trng hp gi tr ca <biu_thc_kim_tra> khng tho mn tt c cc iu kin th <khi_lnh_else> s c thc hin nu c t kho Case Else, cn nu khng c t kho Case Else th chng trnh s thot khi khi lnh la chn ny m khng thc hin g c. V d s dng ElseIf trn c vit li vi cu trc la chn nh sau:
Select Case TheColorYouLike Case vbRed MsgBox "You 're a lucky person" Case vbGreen MsgBox "You 're a hopeful person" Case vbBlue MsgBox "You 're a brave person" Case vbMagenta MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End Select

Ta c th thy rng vi cch vit s dng cu trc la chn, on chng trnh trn d c hn nhiu so vi dng cu trc iu kin v ElseIf. S khi ca cu trc la chn c th c biu din nh sau:

TRUE

Trng hp 1
FALSE

khi_lnh_1

... TRUE

...

Trng hp n
FALSE khi_lnh_else

khi_lnh_n

8.3. Vng lp xc nh
8.3.1. Vng lp theo bin m Thc hin lp mt khi lnh theo mt bin m vi s ln lp xc nh, v d nh khi ta cn tnh tng ca cc s nm gia hai s no . Cc t kha: For, to, Step, Next C php:
For <bin_m>=<Bt_u> To <Kt_Thc> [Step <bc_nhy>] [Khi_lnh] Next [<bin_m>]

Cu trc lp ny thc hin theo trnh t sau: Gn <Bin_m> bng gi tr <Bt_u> So snh <Bin_m> vi gi tr <Kt_thc>: Nu nh hn hoc bng: thc hin cc lnh bn trong [Khi_lnh] v t ng cng vo <Bin_m> mt gi tr bng <bc_nhy> nu c t kha Step, cn khng th cng thm 1 v quay li bc so snh <Bin_m> vi gi tr <Kt_thc>. Nu ln hn: kt thc khi lnh lp. V d sau tnh tng ca cc s t 1 n 10:
Dim i As Integer Dim Tong As Integer Tong = 0 For i = 1 To 10 Step 1

Tong = Tong + i Next Debug.Print ("Tong = " & Tong)

Kt qu nh sau:

V d sau tnh tng ca cc s chn t 0 n 10:


Dim i As Integer Dim Tong As Integer Tong = 0 For i = 0 To 10 Step 2 Tong = Tong + i Next Debug.Print ("Tong = " & Tong)

Kt qu nh sau:

Ch : Khi gi tr ca <bc_nhy> l m (<0) th cu trc lp s thc hin trnh t m ngc, ngha l vai tr ca gi tr <bt_u> v <kt_thc> i ch cho nhau.

V d tnh tng ca cc s chn t 0 n 10 s dng vng lp m ngc:


Dim i As Integer Dim Tong As Integer Tong = 0 For i = 10 To 0 Step -2 Tong = Tong + i Next Debug.Print ("Tong = " & Tong)

Kt qu nh sau:

Nu nh mun thot khi vng lp xc nh FOR khi m s ln lp cha th ta s dng t kha Exit For.

V d sau s tnh tng ca cc s chn t 0 n 10, nhng s dng vng lp FOR ngay khi tng ln hn 20:
Dim i As Integer Dim Tong As Integer Tong = 0 For i = 10 To 0 Step -2 Tong = Tong + i If Tong > 20 Then Exit For Next Debug.Print ("Tong = " & Tong)

Kt qu nh sau: (10 + 8 + 6 = 24)

8.3.2. Lp trong mt tp hp Trong trng hp mun thc hin cc khi lnh lp theo mt bin m chy trong mt tp hp m tp hp khng th xc nh c s lng hoc bc nhy th ngi dng c th dng vng lp trong tp hp (For Each Next). Tp hp y c th l mt tp i tng dng Collection hoc mt mng. Cc t kho s dng For, Each, In, Next C php:
For Each <bin_chy> In <tp_hp> [Khi_lnh] Next

Gii thch: <bin_chy> s nhn cc gi tr t phn t u tin n phn t cui cng trong <tp_hp>. ng vi mi gi tr ca <bin_chy>, khi lnh c thc hin mt ln.
Ch : Kiu ca <bin_chy> trong vng lp (For Each Next) s ph thuc vo kiu ca <tp_hp> m n duyt qua l kiu mng hay kiu tp i tng. i vi <tp_hp> l tp i tng th kiu d liu ca <bin_chy> c th l Variant, hoc i tng cng kiu vi tp i tng . i vi <tp_hp> l mng th kiu d liu ca <bin_chy> ch c th l Variant.

V d sau s thc hin tnh tch cc s trong mt mng 2 chiu vi vic dng vng lp trong tp hp. Kt qu s c hin th trong ca s Immediate.
Public Sub TestForEach() Dim a(0 To 2, 0 To 1) As Double Dim v As Variant Dim Tich As Double a(0, 0) = 1: a(1, 0) = 2: a(2, 0) = 3 a(0, 1) = 4: a(1, 1) = 5: a(2, 1) = 6 Tich = 1 Debug.Print "Cac phan tu trong mang"

For Each v In a Debug.Print v Tich = Tich * v Next Debug.Print "Tich=" & Str(Tich) End Sub

Kt qu nh sau:

8.4. Vng lp khng xc nh


Thc hin mt khi lnh vi s ln lp khng nh trc v ch kt thc qu trnh lp ny khi mt biu thc iu kin c tha mn (biu thc iu kin c gi tr Boolean: True hoc False). Ty thuc vo vic kim tra biu thc iu kin m ta s dng mt trong hai dng c php nh sau: Kiu1:LptrongkhibiuthciukinlTRUE
Do While <iu_kin> [Khi_lnh] Loop

Vi c php ny, [Khi_lnh] ch c thc hin khi <iu_kin> l ng. V d sau s m s ch s chn trong khong hai s A, B:
Dim i, A, B, SoChan As Integer A = 1: B = 10 i = A SoChan = 0 Do While i <= B If (i Mod 2) = 0 Then SoChan = SoChan + 1 i = i + 1 Loop Debug.Print ("So chu so chan = " & SoChan)

Kt qu nh sau:

Nu mun vng lp lun c t nht mt ln thi hnh khi lnh, s dng c php:
Do [Khi_lnh] Loop While <iu kin>

Vi c php ny, [Khi_lnh] c thc hin t nht mt ln cho d <iu_kin> ng hay sai bi <iu_kin> c kim tra cui ca cu trc. Kiu2:LpchonkhiiukinlFALSE
Do Until <iu_kin> [Khi_lnh] Loop

Nu mun vng lp lun c t nht mt ln thi hnh khi lnh s dng c php:
Do [Khi_lnh] Loop Until <iu_kin>
Khi [Khi_lnh] c thc thi, nu nh trong [Khi_lnh] khng c cu lnh no tc ng ln <iu_kin> n nhn gi tr ngc li th vng lp ny s khng bao gi kt thc v lm cho ng dng b treo. thot khi vng lp ngay lp tc ta c th dng t kha Exit Do t trong [Khi_lnh].

9. Chng trnh con


V c bn, chng trnh con l mt khi cc cu lnh v chng c s dng lp li trong chng trnh chnh thng qua tn ca chng trnh con. Chng trnh con c bit hu ch khi thay th cc khi lnh lp nhau hoc cng thc thi mt chc nng tng t no . C hai loi chng trnh con chnh l Hm (Function) v Th tc (Sub). Ngoi ra, trong cc m-un lp (Class Module) cn c chng trnh con dng thuc tnh (Property), tuy nhin trong ca gio trnh s khng trnh by v loi chng trnh con ny. C php tng qut ca mt chng trnh con nh sau:
[Private|Friend|Public][Static]<Sub|Function|Property> Tn([cc_tham_s]) [Khi_lnh] End <Sub|Function|Property>

Trong phn thn chng trnh con c bc gia phn khai bo v phn kt thc (c t kha End). Cc t kha [Private|Public|Friend] xc nh phm vi hot ng ca chng trnh con. Khi nim phm vi ny cng tng t nh phm vi ca bin c trnh by phn trc. T kha [Static] xc nh cch thc cp pht b nh cho cc bin khai bo bn trong chng trnh con (s trnh by c th phn sau).
Ch : t kha Friend ch c s dng trong m-un lp hoc m-un lnh ca UserForm

9.1. Hm (Function)
L chng trnh con c tr v gi tr khi n c gi. C php khai bo nh sau:
[Private/Public/Friend][Static] Function <Tn_hm> ([Cc_tham_s]) as <kiu_d_liu> [Khi_lnh] End Function

V d: to hm tnh din tch ca hnh ch nht, vi hai tham s cn nhp vo l chiu rng v chiu di ca hnh ch nht.
Function Dien_Tich(Rong As Double, Dai As Double) as Double Dien_Tich=Rong*Dai End Function

9.2. Th tc (Sub)
L chng trnh con khng tr v gi tr khi c gi. C php khai bo nh sau:
[Private/Public/Friend][Static] Sub <Tn_hm> ([Cc_tham_s]) [Khi_lnh] End Sub

V d: to mt chng trnh con dng th tc c tnh nng nh phn trn c th vit m lnh nh sau:
Sub Dien_Tich(Rong as Double, Dai as Double, Dt as Double) Dt=Rong*Dai End Sub
Trong v d ny, v chng trnh con khng c gi tr tr v nn nhn v gi tr din tch phi b sung thm tham s Dt vo trong danh sch tham s ca chng trnh con.

9.3. Truyn tham s cho chng trnh con


Ta xt v d sau: Mt chng trnh con n gin c to ra nh sau:
Public Sub Test(ByRef a As Long, b As Single, ByVal c As Long) a = 100: b = 200: c = 300 End Sub

Ch n khai bo bin a, b v c ca chng trnh con ny: Trc bin a l t kha ByRef. Trc bin b khng c t kha, ngha l s dng kiu mc nh ca VB. Trc bin c l t kha ByVal. Chng trnh con th hai c xy dng trn cng mt m-un vi chng trnh con trn nh sau:
Public Sub CallTest()

Dim va As Long, vb As Long, vc As Long va = 500: vb = 500: vc = 500 Debug.Print " Cac gia tri bien truoc khi goi chuong trinh con:" Debug.Print "va=" & Str(va) Debug.Print "vb=" & Str(vb) Debug.Print "vc=" & Str(vc) Test va, vb, vc ' goi chuong trinh con Debug.Print " Cac gia tri bien sau khi goi chuong trinh con:" Debug.Print "va=" & Str(va) Debug.Print "vb=" & Str(vb) Debug.Print "vc=" & Str(vc) End Sub

Trong chng trnh con ny, chng trnh con ban u c tn l Test c s dng nhm mc ch minh ha s thay i ca cc tham s khi chng c truyn vo chng trnh con. Kt qu nh sau:

Qua kt qu trn c th thy rng: Gi tr ca bin c th b thay i hoc khng b thay i khi chng c truyn vo chng trnh con l ph thuc vo cch nh ngha tham s trong chng trnh con . Bin a trong Sub Test c khai bo vi t kha ByRef v khi truyn bin v tr ny (bin va trong CallTest) th gi tr ca bin ban u b thay i tng ng vi cc tc ng trong chng trnh con. Bin b trong Sub Test c khai bo mc nh (khng c t kha no pha trc n) v khi truyn bin v tr ny (bin vb trong CallTest) th gi tr ca bin ban u b thay i tng ng vi cc tc ng trong chng trnh con. Bin c trong Sub Test c khai bo vi t kha ByVal v khi truyn bin v tr ny (bin vc trong CallTest) th gi tr ca bin ban u khng b thay i cho d trong chng trnh con bin ny b tc ng. Qua v d trn c th thy rng vic truyn tham s cho chng trnh con c th c phn lm hai trng hp v c t tn l truyn tham s theo tham chiu v truyn tham s theo tham tr. 9.3.1. Truyn tham s theo tham chiu Khi truyn mt bin vo tham s theo kiu tham chiu, a ch ca bin s c truyn cho chng trnh con. Do , bt k cu lnh no ca chng trnh con tc ng ln tham s s nh hng trc tip ln bin c truyn tng ng, ngha l khi chng trnh con kt thc, gi tr ca bin c truyn theo kiu ny s b thay i do chng trnh con. Truyn tham s theo kiu tham chiu l mc nh trong VB, ngi dng cng c th ch r vic truyn theo tham chiu bng cch thm t kho ByRef vo trc khai bo tham s.

9.3.2. Truyn tham s theo tham tr Khi truyn mt bin vo tham s theo kiu tham tr, bn sao gi tr ca bin s c truyn cho cho chng trnh con. Do , nu trong chng trnh con c cc cu lnh tc ng ln tham s th ch bn sao b nh hng v bin truyn vo s khng b thay i, ngha l sau khi chng trnh con kt thc, gi tr ca bin vn c gi nguyn nh ban u. xc nh cch thc truyn d liu cho mt tham s theo kiu tham tr, thm t kho ByVal vo trc khai bo tham s. Trong Sub Test trn, a v b l hai tham s c truyn theo kiu tham chiu cn c c truyn theo kiu tham tr. 9.3.3. Tham s tu chn. Tham s tu chn l tham s c th c hoc c b qua khi gi chng trnh con. Cc tham s tu chn c khai bo vi t kho Optional v trong mt chng trnh con, cc khai bo ca cc tham s tu chn lun phi nm cui danh sch tham s c khai bo. V d: vit chng trnh con tnh ton din tch ca mt ct ch nht c khot l (nh hnh di) vi yu cu sau: Tnh din tch mt ct vi cc thng s v chiu rng w, chiu cao h v bn knh r ca l khot. Trong trng hp thiu thng s v bn knh r, ch tnh din tch mt ct ch nht v b qua l khot.

Sau y l m lnh tham kho:


Public Function DT(w As Double, h As Double, Optional r As Double) If Not IsMissing(r) Then If (2 * r <= w) And (2 * r <= h) Then DT = w * h - pi * r ^ 2 Else MsgBox " Co loi, lo khoet vuot ra ngoai hinh" DT = "Error" End If Else DT = w * h End If End Function

Sau khi to m lnh trn, nu mun tnh din tch cho mt ct vi w =100, h =200, r =20 c th gi hm nh sau: DT(100,200,20) tnh din tch c xt n khot l vi bn knh l 20, hoc DT(100,200) tnh din ca hnh ch nht (cha c l).
bit c mt tham s tu chn b b qua khi gi chng trnh con hay khng, dng hm IsMissing (tham_s). Hm ny tr v True nu tham s b b qua, False nu tham s c mt.

9.3.4. Danh sch tham s vi s lng tham s tu .

VB6 cho php to mt chng trnh con vi danh sch tham s tu (ngha l s lng cc tham s c th thay i khi gi chng trnh con) thng qua vic t t kho ParamArray trc danh sch tham s. Khi danh sch tham s l tu chn v c dng mt mng kiu Variant. V d: vit mt hm tnh tng ca tt c cc s truyn vo vi s lng s c truyn l tu . M lnh tham kho nh sau:
Public Function TinhTong(ParamArray ds()) Dim So As Variant Dim Tong As Variant Tong = 0 For Each So In ds Tong = Tong + So Next TinhTong = Tong End Function

Khi :
TinhTong(100,200,-200) cho kt qu l 100 TinhTong(2,300) cho kt qu l 302

9.3.5. Hm c gi tr tr v l kiu mng. khai bo mt hm tr v mng, thm cp k t ( ) sau khai bo hm


[Private/Public] Function <Tn_hm> ([danh sch tham s]) as _ <kiu_d_liu> () [Khi_lnh] End Function

V d: vit chng trnh con sp xp cc phn t trong mng mt chiu v tr v mt mng c th t tng dn. M lnh tham kho nh sau:
Public Function Mang_tangdan(Mang_bandau() As Double) As Double() Dim Lb As Long, Ub As Long ' bien dau va cuoi cua mang Dim i As Long, j As Long Lb = LBound(Mang_bandau): Ub = UBound(Mang_bandau) Dim Mang_tamthoi() As Double Khai bao mot mang tam thoi Mang_tamthoi = Mang_bandau Dim Tg As Double For i = Lb To Ub - 1 For j = i + 1 To Ub If Mang_tamthoi(i) > Mang_tamthoi(j) Then Tg = Mang_tamthoi(i) Mang_tamthoi(i) = Mang_tamthoi(j) Mang_tamthoi(j) = Tg End If Next Next Mang_tangdan = Mang_tamthoi Erase Mang_tamthoi ' Huy mang tam thoi End Function

Chng trnh th nghim hm trn:

Public Sub test() Dim a(2 To 6) As Double a(2) = 1: a(3) = 6: a(4) = 0.5: a(5) = 2.3: a(6) = 4 Dim b() As Double b = Mang_tangdan(a) Goi ham da viet Dim so As Variant Debug.Print "Cac phan tu cua mang ban dau:" For Each so In a Debug.Print so Next Debug.Print "Cac phan tu cua mang sau khi sap xep:" For Each so In b Debug.Print so Next End Sub

Kt qu nh sau:

9.4. Bin trong chng trnh con


Nh trnh by phn trc, bin trong chng trnh con c tnh cht cc b. Tuy nhin hnh thc cp pht b nh cho bin th c th khc nhau. C th nh sau: Trong phn khai bo ca chng trnh con khng s dng t kha Static. Khi c hai trng hp: Cc bin c khai bo vi t kha Dim: mi ln chng trnh con c gi, bin s c to v cp pht b nh. Khi chng trnh con kt thc, b nh dnh cho bin c gii phng. Do , gi tr ca bin sau mi phin lm vic ca chng trnh con s khng c lu tr. Cc bin c khai bo vi t kha Static: bin s c khi to mt ln khi m-un cha chng trnh con c np vo trong b nh v s tn ti trong b nh cng vi m-un . V vy, gi tr ca bin sau mi phin lm vic ca chng trnh con s c lu tr. Cc bin kiu ny c gi l bin tnh (Static) V d: trong chng trnh con StVariable di y c hai bin a phng, stA l bin tnh v B l bin thng thng.
Public Sub StVariable() Static stA As Long Dim B As Long B = B + 1 stA = stA + 1

Debug.Print Str(B) End Sub

"Lan

chay

"

&

Str(stA),

"stA="

&

Str(stA),

"B="

&

Kt qu sau 2 ln chy chng trnh con trn

Gii thch: Ngay khi c khai bo, tt c cc bin u c t ng khi to gi tr ban u, nu kiu d liu ca bin l dng s th gi tr khi to bng 0, cn nu kiu d liu ca bin l chui th gi tr khi to mc nh l chui rng. Trong chng trnh trn, ngay trc khi kt thc ln chy u tin, gi tr ca cc bin nh sau: Bin B = 1. Bin stA = 1. Khi kt thc ln chy th nht, bin B (bin thng thng) s c gii phng, cn bin stA (bin tnh) vn c lu gi tr (=1) ca n li trong b nh. Do n ln chy th hai, bin B c to mi s nhn gi tr l B=B+1=0+1=1, cn bin stA do vn tn ti t ln trc nn gi tr ca n l stA=stA+1=1+1=2. Trong khai bo ca chng trnh con c s dng t kha Static Khi tt c cc bin khai bo trong chng trnh con s l cc bin tnh. V d: trong chng trnh con StPro di y s dng khai bo Static u chng trnh.
Public Static Sub StPro() Dim a As Long Dim b As Long a = a + 1 b = b + 1 a = a + b Debug.Print "Lan chay " & Str(b) Debug.Print " ", "a=" & Str(a), "b=" & Str(b) End Sub

Kt qu sau 2 ln chy chng trnh con nh sau:

Cc bin tnh thng c s dng khi mun lu tr kt qu nhng ln chy ca chng trnh con. Ch rng d bin trong chng trnh con l bin thng thng hay bin tnh th vn lun mang tnh cht cc b.

9.5. Cch thc gi chng trnh con.


Vi trng hp d n (Project) gm nhiu thnh phn (cc m-un chun, cc UserForm,) c cha m lnh, ngha l c th xy dng hoc c nhu cu s dng chng trnh con, th trong cng mt m-un, khng c php xy dng hai chng trnh con trng tn nhau, nhng quy nh ny khng p dng cho cc m-un khc nhau, ngha l c th tn ti hai chng trnh con c tn ging ht nhau hai m-un khc nhau. Trong trng hp trng tn ny, khi mun s dng chng trnh con no th phi ch r ni cha n, v tt nht, khi s dng bt c chng trnh con no ca m-un khc th nn ch r c tn m-un . Gichngtrnhcondnghm(Function) Khi gi chng trnh con dng hm (Function), danh sch tham s phi c t trong cp k t ( ) sau tn chng trnh con.
<Tn_m-un>.<Tn_hm>(<danh_sch_tham_s>)
M-un y c th l mt m-un chun (Module), UserForm hoc mt i tng m ngi dng ang xt. Danh sch tham s phi c truyn theo ng th t nh phn khai bo chng trnh con.

V d: m-un chun mdlMatcat cha hm TinhDTHH(h,b) th c php gi hm l: mdlMatcat.TinhDTHH(ph,pb) vi ph, pb l nhng bin c truyn vo trong hm. Gichngtrnhcondngthtc(Sub) Khi gi chng trnh con dng th tc (Sub), danh sch tham s t tip sau tn th tc v k t trng, cc tham s khng cn t trong cp k t ( ).
<Tn_m-un>.<Tn_th tc> <danh_sch_tham_s>

V d: trong m-un chun mdlDAH cha th tc TinhDTDAH(S) th c php gi th tc l: mdlDAH.TinhDTDAH pS vi pS l nhng bin c truyn vo trong th tc. Gichngtrnhconviccthamsgntheotn Trong cch gi chng trnh con theo kiu thng thng nh trn, danh sch tham s truyn vo phi ng th t nh trong phn khai bo ca chng trnh con . Ngoi ra, VB cn cho php gi chng trnh con vi trt t tham s tu m vn m bo s truyn tham s chnh xc thng qua tn ca tham s. V d, vi hm DT(w,h,r) phn trn th hai cch gi sau l tng ng:
DT (100,200,30) DT (r:=30, w:=100, h:=200)

Trong dng th nht, lun c s ngm hiu trnh t cc tham s l: w,h,r, y chnh l trnh t khi nh ngha hm DT. Cn dng th 2, trnh t theo nh ngha ca hm DT khng c ngha na bi c s ch r: Tn bin := Gi tr cn gn. Ch n k hiu ( := ) v trnh t bt k ca cc tham s. Vic s dng tham s gn theo tn khi gi chng trnh con c bit tin li khi chng trnh con c nhiu tham s tu chn v ngi dng khng c nh s dng ht cc tham s .

9.6. Thot khi chng trnh con.


thot khi hm s dng lnh Exit Function thot khi th tc s dng lnh Exit Sub Ngay khi gp hai hm ny trong thn ca chng trnh con, ton b cc dng lnh pha sau n s b b qua v chng trnh s thot ngay khi chng trnh con .

10. T chc cc chng trnh con theo h thng cc m-un chun (Module)
Vi vic thit k h thng theo phng php cu trc, ton b chng trnh thng c chia thnh cc khi chng trnh nh hn, mi khi chng trnh m nhn mt chc nng chung no . d dng cho vic xy dng chng trnh, cc chc nng chung li c chia thnh cc phn nh hn na, cho n khi no mi phn ny c th minh ha bng mt chng trnh con. Trong lp trnh VBA, cc khi chc nng c th c t chc thnh cc m-un chun (Module). Trong m-un chun s bao gm cc chng trnh con (hm v th tc) phn nh s chi tit ho cho cc khi chc nng ny. Ngoi ra, tng ng vi chc nng m m-un m nhim, cn c th c cc khai bo khc nh khai bo cc kiu ngi dng t nh ngha, cc bin dng chung, cc hng s, V d: xy dng mt chng trnh kim ton mt ct ct BTCT, c th xy dng cc m-un v cc chng trnh con theo hnh v di y di y

Hinh_Hoc
(Module)
TinhDTHH_MCatBT TinhDTHH_MCatCT TinhDTHH_TinhDoi

Tinh_Duyet
(Module)
LapTH_TaiTrong TTGH_CuongDo TTGH_SuDung

Hnh 3-17: T chc d n theo cu trc chc nng

11. Lm vic vi UserForm v cc thnh phn iu khin


11.1. Cc vn chung
Trong mt d n VBA, cc m-un chun cho php xy dng cc khi chng trnh x l d liu hoc cc khai bo v d liu. S giao tip nhp-xut d liu gia ngi dng v chng trnh c th c thc hin thng qua giao din ca ng dng nn. Tuy nhin, trong nhiu trng hp giao din nhp-xut d liu ca ng dng nn cha th p ng c nhu cu tng tc d liu mt cch chi tit cng nh tin li cho ngi s dng, v khi , cn to ra cc giao din nhp-xut ring thng qua vic s dng cc UserForm trong d n VBA. Ni cch khc, giao tip gia ngi s dng chng trnh vi chng trnh vit bng VBA c gi l giao din ca chng trnh v cch xy dng giao din nh sau:

S dng ngay ng dng nn lm giao din, cch ny s trnh by c th trong cc chng sau. S dng UserForm. Kt hp c hai phng n trn. Cc UserForm thc cht l mu cc hp thoi (ca s) c to ra theo yu cu ca ngi dng. Trn mt UserForm lun cha nhng thnh phn phc v cho nhu cu tng tc gia ngi dng v chng trnh: nhp cc d liu cn thit, ra lnh x l, la chn d liu theo tnh hung, hin th kt qu x l mt cch trc quan, Nhng thnh phn c gi l cc iu khin (Control).
iu khin la chn d liu iu khin cho php nhp d liu dng vn bn

iu khin cho php ngi dng ra lnh thng qua vic kch chut.

iu khin cho php chn hnh nh minh ho.

to ra UserForm, lm theo trnh t sau: 1. Xc nh s cn thit phi to giao din nhp-xut d liu ring: Giao din do ng dng nn cung cp khng hoc khng thch hp cho vic nhp d liu hoc xut kt qu ca chng trnh. 2. Xc nh cch thc v trnh t tng tc ca ngi s dng trn giao din: c th b tr cc iu khin sao cho thun tin i vi ngi dng, v d nh da theo thi quen iu khin ca a s ngi s dng l t tri sang phi, t trn xung di. 3. Xc nh s lng UserForm cn phi to cho qu trnh nhp d liu cng nh vic hin th kt qu: ch nn s dng va v phn theo ch ca cng vic, v d nn phn tch giao din nhp d liu vi giao din trnh by kt qu v cc iu khin (nt bm) khc. 4. Xc nh cc loi d liu cn nhp vo, cc d liu theo tnh hung v cc minh ho bng hnh nh km theo gii thch r cho ngi s dng ngha ca cc thng s cn c nhp vo. Cn c vo cc loi d liu cn nhp trn xc nh cc thnh phn iu khin ph hp v a vo UserForm tng ng. Cn ch rng, cc iu khin, ngoi vic p ng yu cu v mt chc nng, chng cng cn c trnh by v gii thch mt cch d hiu v c tnh thm m.

Hnh 3-18: ngha cc loi d liu cn nhp vo c minh ha bng hnh nh 5. La chn cc iu khin phc v cho vic xc nhn d liu sau khi nhp xong hoc ra lnh cho qu trnh x l cc d liu ny bt u thc hin. Thng thng cc iu khin ny l h thng cc nt bm (Button) xc nhn cc d liu nhp xong, yu cu bt u x l hoc hy b cc d liu nhp.

Hnh 3-19: B tr cc iu khin trn UserForm

6. La chn hnh thc hin th kt qu t la chn cc thnh phn iu khin ph hp, v d nh kt qu tnh ton l s hoc hnh v th cn chn iu khin thch hp trnh by.

Hnh 3-20: Trnh by kt qu bng iu khin h tr vn bn v hnh nh 7. Vit cc m lnh cho cc thnh phn iu khin, cc m lnh ny s c lu tr trong phn code ca UserForm. 11.1.1. To UserForm v cc thnh phn iu khin trong VBA IDE Trong VBA IDE, UserForm c to ra bng cch: Menu Insert UserForm Sau khi to UserForm, ta c th thm cc thnh phn iu khin vo UserForm bng cch la chn iu khin cn dng t hp cng c iu khin (Control Toolbox) v thc hin thao tc ko/th vo v tr thch hp UserForm. Kch thc ca iu khin c th thay i mt cch d dng nh thao tc ko chut vng bin ca chng.

iu khin c la chn trn Control Toolbox

iu khin c to bng cch ko/th vo UserForm

Thng thng trong hp cng c mc nh ca VBA IDE ch c cc thnh phn iu khin chun ca VB, cc iu khin ny p ng c hu ht cc nhu cu c bn v thit k giao din. Tuy nhin ngi dng c th b sung nhng thnh phn iu khin khc vo hp cng c

trn bng cch s dng Additional Controls c sn trn hp cng c (hin th bng cch nhn chut phi vo hp cng c). Vi mi my tnh khc nhau th ni dung cc iu khin c th b sung l khc nhau bi chng phc thuc vo cc th vin lp trnh c ci t trn my tnh .

Hnh 3-21: B sung thm iu khin cho hp cng c (Toolbox) ca VBA IDE 11.1.2. Cc thuc tnh ca UserForm v cc thnh phn iu khin. Cc thuc tnh (Properties) l cc thng s quy nh c im, tnh cht cng nh trng thi ca UserForm hay cc iu khin, v d mu nn ca mt iu khin c quy nh bi thuc tnh BackColor. Nhng thuc tnh ny c th c thay i trong lc thit k UserForm hoc lc chng trnh ang chy. Tuy nhin mt s thuc tnh khng cho php thay i m ch cho php ngi dng bit c gi tr ca n (thuc tnh ch c Read Only). Trong qu trnh thit k UserForm, khi ta dng chut chn bt c thnh phn no trn UserForm (k c chnh UserForm) th cc thuc tnh ca n s c hin th tng ng trong ca s Properties ca VBA IDE.

Hnh 3-22: Thnh phn iu khin v v tr hin th cc thuc tnh ca n.

Mt s thuc tnh c bn ca UserForm v cc iu khin: Name: th hin tn ca UserForm hay iu khin. y l thuc tnh rt quan trng, l yu t xc nh iu khin khi lp trnh. Thuc tnh ny ch c thay i lc thit k giao din (trong ca s Properties ca VBA IDE). BackColor: l mt gi tr kiu Long th hin mu nn ca UserForm hay iu khin. Caption: l mt gi tr kiu String th hin tiu ca UserForm hay iu khin. Enable: l mt gi tr kiu logic (Boolean) xc nh trng thi lm vic ca iu khin, gi tr bng True ng vi trng thi hot ng, gi tr bng False ng vi trng thi khng hot ng (iu khin coi nh b v hiu ho v thng c hin th m i trn UserForm). Visible: l mt gi tr kiu logic (Boolean) xc nh trng thi hin th ca iu khin, gi tr bng True ng vi s hin th iu khin, gi tr bng False ng vi s n iu khin. Font: th hin kiu v c ch hin th trn UserForm hoc iu khin. Picture: th hin hnh nh trn nn UserForm hoc iu khin. ControlTipText: l mt gi tr kiu String th hin ch thch v iu khin khi chut di chuyn qua (Tool tip) trong lc chng trnh hot ng. MouseIcon: th hin biu tng con tr chut hin th trn iu khin. MousePointer: th hin loi con tr chut hin th trn nt lnh.
Ngoi ra, ng vi mi loi iu khin c th cn c thm nhiu thuc tnh khc hoc khng c mt s cc thuc tnh c lit k trn. Ngi dng c th tm hiu cc thuc tnh ny trong Object Browser hoc trong Help Online (chn iu khin v bm F1) ca VBA IDE.

Vic thay i thuc tnh ca cc iu khin c th c thc hin bng hai cch: 1. Cch 1: Thay i trc tip trong qu trnh thit k: chn iu khin v thay i gi tr ca cc thuc tnh trong ca s Properties ca VBA IDE. Cch ny trc quan v d thc hin i vi a s cc thuc tnh ca hu ht cc iu khin. V d: thay i tiu cho mt UserForm di y, kch chut chn UserForm sau nhp tn ca tiu vo phn Caption ca ca s Properties.

Hn 3-23: Thay i gi tr thuc tnh trong khi thit k UserForm.

2. Cch 2: Thay i trong lc chng trnh ang chy: v thc cht, cc thuc tnh chnh l d liu ca cc thnh phn iu khin (thng gi chung cc iu khin ny l i tng) hay chnh l cc bin c nh ngha ring cho iu khin cho nn ta c th s dng php gn thng thng thay i gi tr cho mt s thuc tnh. C php thc hin nh sau:
<Tn_iu_khin>.<Tn_thuc_tnh> = gi tr thuc tnh <Tn_UserForm>.<Tn_thuc_tnh> = gi tr thuc tnh
Tn_iu_khin hay Tn_UserForm y chnh l gi tr thuc tnh Name ca iu khin c t khi thit k. Khi vit m lnh trong mt UserForm th c th thay vic dng tn ca UserForm bng t kho Me.

V d, ng vi UserForm c tn l UserForm1 nh trn, c th thay i tiu ca n bng m lnh nh sau:


UserForm1.Caption = Cua so chinh

11.1.3. Cc phng thc ca UserForm v cc thnh phn iu khin. Cc phng thc c th xem chng l nhng chng trnh con c bit, chng ch lm vic vi cc d liu ca iu khin v tng tc ln chnh iu khin . phng thc hot ng, cn phi gi n (tng t nh gi chng trnh con) bng m lnh khi lp trnh. C php gi phng thc ca mt iu khin hay UserForm cng tng t nh vi bin i tng:
<Tn_iu_khin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)> <Tn_UserForm>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>

V d: mun hin th UserForm1 nh trn, gi phng thc Show ca n vi m lnh nh sau:


UserForm1.Show
Trong phm vi ca gio trnh, khng th lit k tt c cc phng thc ca cc iu khin. Trong phn sau s trnh by mt s cc phng thc c bn ca mt s loi iu khin thng dng. bit chi tit v nhng phng thc khc, c th tra cu trong Object Browser hoc trong Help Online ca VBA IDE

11.1.4. Cc s kin trn giao din. Cc s kin trn UserForm hoc cc iu khin c pht sinh khi c mt hot ng no xy ra thng c pht sinh t pha ngi dng (s kin cng c th c pht sinh mt cch gin tip t qu trnh thc hin mt phng thc no ).V d, khi ngi dng r chut trn b mt UserForm s pht sinh s kin MouseMove, khi ngi dng kch chut trn UserForm s pht sinh s kin Click. i cng vi s kin cn c th tc s kin: l chng trnh c thi hnh khi s kin xy ra. Th tc s kin cho php ngi lp trnh x l cc tng tc ca ngi dng trn giao din bng cch vit cc m lnh trong th tc s kin. vit m lnh cho mt th tc s kin trn mt UserForm, vo ca s m lnh ca UserForm (nhy p chut vo UserForm), chn iu khin v loi s kin tng ng. Sau vit m lnh vo trong th tc s kin c to ra.

Chn i tng

Chn s kin

Th tc s kin gn vi i tng c pht sinh Mt s s kin c bn ca UserForm v cc iu khin: Click: xy ra khi ngi dng kch chut trn UserForm hoc trn iu khin DblClick: xy ra khi ngi dng kch p chut trn UserForm hoc trn iu khin KeyPress: xy ra khi ngi dng nhn mt phm. KeyUp: xy ra khi ngi dng nh mt phm (sau khi nhn xung). KeyDown: xy ra khi ngi dng nhn mt phm (nhng cha nh ra). MouseMove: xy ra khi ngi dng r chut UserForm. ngang qua mt iu khin hoc trn

MouseUp: xy ra khi ngi dng nh phm chut (sau khi nhn chut). MouseDown: xy ra khi ngi dng nhn phm chut (nhng cha nh ra). 11.1.5. V d To mt UserForm v vit m lnh khi kch chut vo UserForm s hin th s ln kch chut trn tiu ca n ng thi i mu nn ca UserForm theo tnh hung: nu s ln kch chut l chn th mu en, l l th mu trng. Cc thao tc nh sau: 1. Thm UserForm vo trong d n bng cch chn Insert UserForm. 2. t tn UserForm l usfCuaso1 trong thuc tnh Name ca ca s Properties; t tiu xut pht ca UserForm l Cua so chinh trong thuc tnh Caption ca ca s Properties.

3. Vit m lnh cho s kin Click ca UserForm (hin th ca s lnh ca UserForm bng cch nhy p chut vo UserForm, chn UserForm v s kin Click). M lnh cho th tc s kin Click nh sau:
Private Sub UserForm_Click() Static numClick As Long numClick = numClick + 1 If numClick Mod 2 = 0 Then Me.BackColor = vbBlack Else Me.BackColor = vbWhite End If usfCuaso1.Caption = "Number of Click: " & Str(numClick) End Sub
Trong on m trn, vbBlack l hng s tng ng vi mu en, vbWhite l hng s tng ng vi mu trng. Hai hng s ny c nh ngha sn trong VB.

11.2. Lm vic vi UserForm


Cc nguyn tc lm vic vi UserForm nh thit lp v thay i thuc tnh, gi cc phng thc hay x l cc s kin c trnh by phn trc. Di y ch gii thiu mt s phng thc khc ca UserForm. Hin th UserForm: thc hin phng thc Show
Tn_UserForm.Show [vbModal/ vbModeless]

Nu dng vbModal (hoc 1): hp thoi (UserForm) s hin th dng Modal tc l lun tip nhn tng tc ngi dng vi hp thoi, ngi dng ch c th chuyn hng tng tc sang ni khc khi ng hp thoi. y l kiu hin th mc nh ca hp thoi. Nu dng vbModeless (hoc 0): hp thoi vn c hin th nhng ngi dng c th chuyn hng tng tc sang ni khc m khng cn ng hp thoi. n UserForm: gi phng thc Hide

Tn_UserForm.Hide

Quay li trng thi trc lnh cui cng c thc hin trn UserForm: thc hin phng thc UndoAction
Tn_UserForm.UndoAction

Tr li trng thi trc khi thc hin Undo: thc hin phng thc RedoAction
Tn_UserForm.RedoAction

Vd To mt UserForm vi cc iu khin nh hnh di y:

Trnh t nh sau: 1. Thm mt UserForm vo d n. 2. Chn vo UserForm va to, chn biu tng trong hp cng c iu khin (Control Toolbox). Sau , r th chut trn UserForm to mt hp vn bn (TextBox). 3. Tip tc chn UserForm trn, chn biu tng trong hp cng c iu khin, r th chut to mt nt lnh (Command Button), t tn (thuc tnh Name) ca nt lnh l cmdUndo, t tiu (thuc tnh Caption) ca nt lnh l Undo. 4. Tng t nh trn to nt lnh cmdRedo vi tiu Redo. 5. Vit cc th tc s kin Click cho cc nt lnh trn nh sau:
Private Sub cmdRedo_Click() Me.RedoAction End Sub Private Sub cmdUndo_Click() Me.UndoAction End Sub

Sau , chn UserForm v nhn phm F5 chy chng trnh. Nhp mt dng vn bn vo trong hp vn bn. Kch chut vo nt Undo, sau l nt Redo v theo di kt qu.

11.3. Cc iu khin thng dng


Theo mc nh, trn Toolbox c sn mt s iu khin thng dng trong th Control, nhng iu khin ny p ng c hu ht nhu cu thit k giao din thng thng trn UserForm. Trong nhng phn trc nhc nhiu n vic s dng cc iu khin trn Toolbox nhng cha c

tnh h thng v vy phn ny s trnh by nhng ni dung c bn c th s dng mt cch hiu qu cc iu khin ny. 2 6 5 1

Hnh 3-24: Cc iu khin c bn theo mc nh trong VBA IDE 1. Nt lnh (Command Button) Command Button thng c dng thc hin mt quyt nh no t pha ngi dng (thng qua vic kch chut vo Command Button hoc nhn Enter). Command Button nn c thuc tnh Caption (tiu ) v Picture (hnh nh) phn nh ng tnh nng m n m nhn. S kin hay c gi khi s dng Command Button l s kin Click hoc DblClick (kch p chut). thay i v tr ca Command Button trong khi chy chng trnh, s dng phng thc Move
Tn_Command Button.Move [Left ], [Top], [Width], [Height]

Trong cc tham s th hin v tr gc tri trn (left, top) v kch thc (Width, Height) mi ca Command Button sau khi di chuyn. thit lp trng thi nhn lnh (nhn tiu im focus), s dng phng thc SetFocus
Tn_Command Button.SetFocus

Cc phng thc Move v SetFocus nh trn khng ch p dng i vi Command Button, m cn c p dng vi a s cc iu khin khc. 2. Hp vn bn (TextBox) TextBox c dng nhp d liu dng vn bn (text) v n c iu khin bng cch thit lp nhng thuc tnh hay s kin hoc s dng cc phng thc ph hp. Di y l mt s thnh phn chnh dng iu khin TextBox: Thuc tnh: dng thit lp cch thc hin th cho TextBox Thuc tnh
Text TextAlign

M t
Ni dung vn bn cha trong iu khin. Cch thc hin th vn bn trong iu khin

Ghi ch
Kiu String Tham kho Object Browser

MaxLength

Qui nh di ti a ca vn bn trong iu khin (Nu t MaxLength=0, di ca vn bn l tu )

Kiu Long

MultiLine ScrollBars

Hin th nhiu dng hay mt dng Hin th thanh cun ngang hay dc nu ni dung vn bn ln hn kch thc ca iu khin

Kiu Boolean Tham kho Object Browser

Cc phng thc h tr vic nhp vn bn vo TextBox: Phng thc


Copy Cut Paste

M t
Chp ni dung c nh du trong iu khin vo b nh m Di chuyn ni dung c nh du trong iu khin vo b nh m Chp ni dung t b nh m vo iu khin

Ghi ch
Tham kho trong Object Browser hoc Help

Cc s kin: thng dng x l khi c tc ng ln TextBox, thng s dng hai s kin l: KeyPress v Change. S kin, v bn cht l mt chng trnh con dng Sub v c t ng gi ra tng ng vi tc ng no ln TextBox, v d nh bm phm hay thay i ni dung. S kin Change c gi khi ni dung vn bn trong TextBox b thay i. Cn s kin KeyPress c gi khi c mt phm c nhn khi con tr ang nm trong iu khin. S kin KeyPress c mt tham s l KeyAscii. Tham s ny c kiu Integer v cha m ASCII ca phm c nhn ( bit m ASCII ca cc phm, tham kho KeyCodeConstants trong Object Browser). 3. Nhn (Label) Label thng c s dng hin th mt vn bn ngn gn trn UserForm hoc dng km vi mt iu khin no trn UserForm vi mc ch l gii thch nh s dng cho iu khin . Ni dung vn bn trong Label c thit lp hoc thay i thng qua thuc tnh Caption ca n. Tng tc vi thuc tnh Caption ca Label cng tng t nh i vi thuc tnh Caption ca tt c cc iu khin khc v c trnh by cc phn trc.
iu khin Label gii thch cho d liu trong hp vn bn di

iu khin Label hin th kt qu dng vn bn ngn

4. Hp nh du (CheckBox)

CheckBox thng c s dng la chn thng tin ph hp trong mt danh sch cc thng tin lin quan c lit k hoc dng b sung ni dung cho mt d liu no . thit lp hay c trng thi ca CheckBox (c chn hay khng c chn), s dng thuc tnh Value. Thuc tnh ny c kiu Boolean, nu gi tr ca n l True th c ngha l CheckBox c chn, gi tr l False ngha l CheckBox khng c chn. V d: to giao din nhp d liu v tnh tng cc s t 1 n n vi ty chn bng CheckBox nh sau: Nu khng chn CheckBox (khng nh du) th tnh tng ca cc s t 1 n n. Nu chn CheckBox (nh du) th ch tnh tng cc s chn trong khong t 1 n n. Thit k UserForm vi cc thnh phn nh hnh di y:
Label Name: lblSo TextBox Name: txtSo

TextBox Name: txtSo

Command Button Name: cmdTinh

Label Name: lbKetqua

M lnh cho th tc s kin Click cho nt lnh cmdTinh nh sau:


Private Sub cmdTinh_Click() Dim i As Long Dim so As Long so = CLng(txtSo.Text) ' chuyen doi du lieu tu txtSo vao bien so Dim tong As Double tong = 0 Dim buocnhay As Long ' buoc nhay cua bien chay If chkChonsochan.Value Then xet lua chon chi tinh tong so chan buocnhay = 2 Else buocnhay = 1 End If For i = 0 To so Step buocnhay tong = tong + i Next lblKetqua.Caption = "Ket qua: " & Str(tong) hien thi ket qua End Sub

5. Nt tu chn (OptionButton) OptionButton thng c dng yu cu ngi dng chn mt trong cc thng tin c lit k sn. to nhm cc OptionButton, ta c th t chng trong mt iu khin khung (Frame) hoc t chng trn UserForm.

Hai OptionButton phc v cho vic la chn loi hnh d n. Ngi dng ch c th chn mt trong hai iu khin ny.

thit lp trng thi chn hay khng chn cho OptionButton, s dng thuc tnh Value, thuc tnh ny c kiu Boolean. Nu gi tr ca n l True th c ngha l OptionButton c chn, cn nu gi tr l False th OptionButton khng c chn. V d m lnh sau tng ng vi vic ngi dng chn OptionButton tn l optDAmoi
optDAmoi.Value=True

6. Hp danh sch (ListBox) ListBox cho php lit k mt danh sch cc gi tr ngi dng c th quan st v la chn mt hoc mt vi gi tr trong danh sch ny. Mi gi tr trong ListBox lun c ch s (Index) v ni dung (Text). Thuc tnh: Thuc tnh
List ListCount ListIndex Text Selected(i)

M t
Tr v danh sch cc gi tr trong iu khin Tr v s lng cc gi tr trong danh sch Tr v ch s ca gi tr c chn trong danh sch Tr v ni dung ca gi tr c chn Kim tra xem phn gi tr i c c chn hay khng.

Ghi ch
Tham kho Browser Kiu Long Kiu Variant Kiu String Kiu Boolean Object

Phng thc: Phng thc


AddItem RemoveItem Clear

M t
Thm mt gi tr vo trong danh sch Xo mt gi tr khi danh sch Xo ton b danh sch

Ghi ch
Tham kho trong Object Browser hoc Help

V d: to UserForm vi ListBox nh hnh di:

UserForm: usfMc

ListBox: lstDsMc

Yu cu: khi chng trnh hot ng, trong ListBox s c mt danh sch cc mt ct c thng k ra.

M lnh cho s kin Initialize (s kin ny c t ng gi khi chng trnh np UserForm vo b nh ca my tnh) ca UserForm nh sau:
Private Sub UserForm_Initialize() lstDsMc.AddItem "Mat cat dau", 0 lstDsMc.AddItem "Mat cat L/4", 1 lstDsMc.AddItem "Mat cat L/2", 2 lstDsMc.AddItem "Mat cat 3L/4", 3 lstDsMc.AddItem "Mat cat cuoi", 4 End Sub
Phng thc AddItem c hai tham s u l tham s tu chn: tham s th nht l ni dung ca phn t, tham s th hai l v tr chn phn t trong danh sch.

Kt qu chy chng trnh nh sau:

bit ngi dng la chn phn t no trong ListBox, vit m lnh cho s kin Click ca ListBox nh sau:
Private Sub lstDsMc_Click() Hin th gi tr c chn ln tiu ca UserForm Me.Caption = lstDsMc.Text End Sub

Kt qu khi ngi dng chn mt gi tr trong ListBox:

7. Hp danh sch t hp (ComboBox) Tng t nh ListBox, nhng danh sch cc gi tr c th hin theo kiu hin ra y khi ngi dng kch chut vo. Ngoi ra iu khin ny cn cho php ngi dng nhp gi tr cn tm vo, iu ny gip cho vic la chn c nhanh hn khi ngi dng bit tn gi tr cn chn trong danh sch v chiu di ca danh sch li qu ln.

Cc thuc tnh v phng thc ca ComboBox tng t nh ListBox. 8. Khung (Frame) Frame cho php nhm cc iu khin trn UserForm li theo ch , gip cho vic trnh by trn UserForm c r rng v gip cho ngi dng d s dng chng trnh. Frame cn c dng tp hp cc OptionButton thnh mt nhm. Khi to nhm iu khin trong Frame, nn to Frame trc ri mi to cc iu khin thnh phn trong n (khi cc iu khin to sau s c gn v trong Frame).

Frame nhm cc iu khin phc v vic nhp d liu cho cc nhm vt liu khc nhau.

9. Hnh nh (Image) Image cho php hin th hnh nh trn mt vng ca UserForm. S dng iu khin ny gip cho vic minh ha d liu cn nhp tr nn r rng v d hnh dung. chn hnh nh vo trong iu khin, s dng thuc tnh Picture ca n.

12. Cc hp thoi thng dng


12.1. Hp thng ip (Message Box MsgBox)
MsgBox c s dng nhc nh, thng bo hoc cnh bo ngi dng. MsgBox c th c gi theo kiu th tc (khng c gi tr tr v), hoc theo kiu hm (gi tr tr v l nt lnh c ngi dng chn). C php gi MsgBox nh sau: Dng th tc:

MsgBox

Prompt, [Buttons], [Title]

Dng hm
MsgBox(Prompt, [Buttons], [Title])

(Gi tr tr v ca hm c kiu VbMsgBoxResult tham kho trong Object Browser) Trong : Prompt: ni dung dng nhc trong MsgBox (kiu String) Buttons: kiu hin th biu tng v nt lnh trong MsgBox (tham s ny c kiu l VbMsgBoxStyle tham kho trong Object Browser) Title: ni dung dng tiu ca MsgBox (kiu String) V d: MsgBox c gi vi m lnh sau:
MsgBox "Bn c mun thot khi chng trnh khng", vbCritical Or _ vbYesNo, "Thot khi chng trnh"

Title Prompt Buttons

12.2. Hp nhp d liu (Input Box InputBox)


InputBox c s dng nhm yu cu ngi dng nhp mt chui (String) theo gi ca dng nhc (Prompt) v tiu (Title) trn . InputBox c gi theo dng hm vi gi tr tr v l chui d liu m ngi dng nhp. C php gi InputBox thng thng nh sau:
InputBox(Prompt, [Title], [Default], [XPos], [YPos])

Trong : Prompt: ni dung dng nhc. Title: ni dung tiu . Default: gi tr mc nh ca chui d liu. XPos, YPos: to gc tri trn ca InputBox khi hin th ra mn hnh. V d: gi InputBox vi m lnh sau:
Dim LngSodiemMax As Long LngSodiemMax = _ Val(InputBox("Nhp s lng im ti a (s nguyn dng)", _ "S im ti a", "100000"))

Nu ngi dng bm nt OK th gi tr tr v ca hm InputBox l mt chui c gi tr 100000, cn nu bm nt Cancel th gi tr tr v l mt chui rng.

12.3. Hp thoi da trn iu khin Common Dialog.


iu khin Common Dialog cho php hin th cc hp thoi sau: Hp thoi Open, Save: phc v thao tc m v ghi file mt cch trc quan. Hp thoi Color: phc v thao tc la chn mu. Hp thoi Font: phc v thao tc la chn font ch. Hp thoi Print: phc v thao tc in n. a iu khin ny vo trong hp cng c iu khin (Control Toolbox) chn menu Tools Additional Controls, sau chn Microsoft Common Dialog Control.

Cc thuc tnh ca iu khin Common Dialog. Thuc tnh


DialogTitle FileName FileTitle Filter

M t
Tiu ca hp thoi Tr v ng dn v tn ca file c chn - Hp thoi Open, Save. Tr v tn ca file c chn (khng cha ng dn) - Hp thoi Open, Save. M t cc kiu file s c hin th trong hp thoi - Hp thoi Open, Save.

Ghi ch
Kiu String Kiu String Kiu String Kiu String

FilterIndex DefaultExt

Kiu file mc nh s c hin th trong hp thoi - Hp thoi Open, Save. Phn m rng mc nh c gn trong hp thoi (khi ngi dng khng chn m nhp text vo trong phn tn file) - hp thoi Open, Save. ng dn khi to trong hp thoi - Hp thoi Open, Save Qui nh c pht sinh li hay khng khi ngi dng chn nt Cancel trong hp thoi. Tr v mu c chn trong hp thoi Hp thoi Color

Kiu Integer Kiu String

InitDir CancelError Color

Kiu String Kiu Boolean Tham kho Browser Object

Cc phng thc ca iu khin Common Dialog. Phng thc


ShowOpen ShowSave ShowColor ShowFont ShowPrinter

M t
Hin th hp thoi m file (Open) Hin th hp thoi ghi file (Save) Hin th hp thoi chn mu (Color) Hin th hp thoi chn font ch (Font) Hin th hp thoi in n (Printer)

Ghi ch
Tham kho trong Object Browser hoc Help

V d: Xy dng UserForm gm cc iu khin nh hnh di:

Label Name: lbPath

Common Dialog Name: cmDlg Command Button Command Button Name: cmdOpen Yu cu: Ngi dng bm nt Open Path ly v ng dn ca mt file sau hin th n trn iu khin lbPath. Ngi dng chn nt Select Color i mu ca UserForm. M lnh tham kho nh sau: M lnh vi th tc s kin Click ca cmdOpen
Private Sub cmdOpen_Click() Dim strPath As String ' Xau luu tru duong dan cua file duoc chon Dim strFilter As String ' Xau bieu dien cac kieu file hien thi strFilter = "App(*.exe)|*.exe|Text(*.txt)|*.txt|All files (*.*)|*.*"

Name: cmdColor

With cmDlg .DialogTitle = "Chon file" .InitDir = "C:\Program Files" ' duong dan mac dinh .Filter = strFilter .ShowOpen strPath = .Filename ' lay ve ten day du cua file duoc chon End With lbPath.Caption = strPath End Sub

M lnh vi th tc s kin Click ca cmdColor


Private Sub cmdColor_Click() Dim lngColor As Long bien luu tru mau duoc chon With cmDlg .ShowColor lngColor = .color lay ve mau nguoi dung chon trong hop thoai End With Me.BackColor = lngColor End Sub

You might also like