Professional Documents
Culture Documents
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 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 .
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.
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...
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.
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.
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.
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
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
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
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.
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.
Phm vi
0 n 255 -32,768 n 32,767 -2,147,483,648 n 2,147,483,647
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
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.
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
V d trn s hin th thng tin v thi gian (ngy thng nm) trong ca s Immediate ca VBA IDE.
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
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
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
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.
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.
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.
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>
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.
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.
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)>
M t
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
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)
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:
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:
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:
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.
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
Kt qu nh sau:
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.
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)
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:
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].
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.
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 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.
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
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
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:
"Lan
chay
"
&
Str(stA),
"stA="
&
Str(stA),
"B="
&
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
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.
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 .
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
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.
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.
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.
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.
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.
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.
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)>
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.
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
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.
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
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
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
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
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
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
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.
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
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.
MsgBox
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"
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"))
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
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
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