285
1 Li nói đầu Tự động hóa trong ttclĩnh vc hin đang được xã hi quan tâm đặc bitbi nhnăng sut lao động được nâng cao, chtlượng sn phm n định và tthơn, nhitưởng mi có cơ hi trthành hin thc. Tự động hóa công tác thiếtkế công trình giao thông cũng không nm ngoài quy lut chung đó, hin nay, huhết các công ty trong lĩnh vctư vn thiếtkế công trình giao thông đềurt chú trng thc hintự động hóa công tác thiếtkế trong công ty ca mình. Điu này được thhin rõ nét trong vic đầu tư ca các công ty (mua sm máy tính, phnmm và đào to nhân lc) cũng như trin khai tự động hóa thiếtkế rt nhiu công trình trong thctế. Visựđadng ca mình, các bài toán trong công tác thiếtkế luôn đòi hislinh hot ca công tác tự động hóa. Chính vì vy, để phn nào đáp ng được yêu cucp bách tthctế sn xut, ni dung cun giáo trình này đề cp đếnttccác vn đề cơ bn nhtca vic thc hintự động hóa thiếtkế công trình giao thông cũng như phương pháp để nâng cao mc độ tự động hóa cho phù hpvitng yêu cu chuyên bit xut hin trong quá trình thiếtkế. Ni dung ca giáo trình này là sựđúc kết kinh nghim ging dy môn Tự động hóa thiếtkế cu đường cho sinh viên ngành xây dng công trình giao thông và quá trình tham gia thc hintự động hóa công tác thiếtkế ngoài sn xutca các tác gicũng như cp nhtmi nht nhng công nghchcht phcvcho victự động hóa. Hơn na, ni dung chính tp trung vào nhng thành phnct lõi phcvcho mc đích tđộng hóa thiếtkế cu đường, cùng vi nhng ni dung mang tính gimđịnh hướng cho tng chuyên ngành, khiến cho cun giáo trình này hoàn toàn phù hpvi định hướng đào to theo tín chca Nhà trường. Chúng tôi xin chân thành cm ơnsựđóng góp ý kiếnca các đồng nghip trong quá trình hoàn thin cun giáo trình này. Vitc độ phát trinrt nhanh ca công nghnhư hin nay thì chc chnrng trong thi gian ti, nhiuvn đề liên quan đến vic thc hintự động hóa thiếtkế sphi thay đổi, và chúng tôi hy vng rng, cùng vi các ý kiến đóng góp cabn đọc và scp nht kiến thccabn thân, thì ln xutbn sau ca cun sách này shoàn thin hơnna, sẽđáp ng tthơnna yêu cucabn đọc. Hà Ni, ngày 01 tháng 06 năm 2007 Các tác gi.

VBA

Embed Size (px)

Citation preview

Li ni uTnghatrongttclnhvchinangcxhiquantmcbitbinhn nngsutlaongcnngcao,chtlngsnphmnnhvtthn,nhiu tngmicchitrthnhhinthc.Tnghacngtcthitkcngtrnhgiao thngcngkhngnmngoiquylutchung,hinnay,huhtcccngtytrong lnhvctvnthitkcngtrnhgiaothngurtchtrngthchintngha cngtcthitktrongcngtycamnh.iunycthhinrnttrongvicu tcacccngty(muasmmytnh,phnmmvotonhnlc)cngnhtrin khaitnghathitkrtnhiucngtrnhtrongthct. Visadngcamnh,ccbitontrongcngtcthitklunihislinhhot cacngtctngha.Chnhvvy,phnnopngcyucucpbch tthctsnxut,nidungcungiotrnhnycpnttcccvncbn nhtcavicthchintnghathitkcngtrnhgiaothngcngnhphng phpnngcaomctnghachophhpvitngyucuchuynbitxut hintrongqutrnhthitk. NidungcagiotrnhnylscktkinhnghimgingdymnTngha thitkcungchosinhvinngnhxydngcngtrnhgiaothngvqutrnh thamgiathchintnghacngtcthitkngoisnxutcacctcgicng nhcpnhtminhtnhngcngnghchchtphcvchovictngha.Hn na,nidungchnhtptrungvonhngthnhphnctliphcvchomccht ng ha thit k cu ng, cng vi nhng ni dung mang tnh gi m v nh hngchotngchuynngnh,khinchocungiotrnhnyhontonphhpvi nhhngototheotnchcaNhtrng. Chngtixinchnthnhcmnsnggpkincaccngnghiptrongqu trnhhonthincungiotrnhny. Vitcphttrinrtnhanhcacngnghnhhinnaythchcchnrngtrong thigianti,nhiuvnlinquannvicthchintnghathitksphi thayi,vchngtihyvngrng,cngvicckinnggpcabncvs cpnhtkinthccabnthn,thlnxutbnsaucacunschnyshonthin hnna,spngtthnnayucucabnc. HNi,ngy01thng06nm2007 Cctcgi.

1

Mr. Soat -TEL: (0989)744887 -Email: [email protected] -Y! kimjuso1987 -Web: http://soat.tk >

24

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

CHNG III: C BN V NGN NG LP TRNH VISUAL BASICTrong 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 phpC 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 lnhCc 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, bng cch chn trnh n Tools Options Editor Code Settings.

Hnh III-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 di y) 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.

25

Hnh III-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.

Hnh III-3: 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 lnhM 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, trong VBAIDE, chn trnh n Tools Options Editor.

Hnh III-4: Bt / tt tr gip hon thin m lnh t ng trong VBA IDE

26

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 III-5: 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 III-6: 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 ri (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 VBT 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:

27

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 III-7: VBA IDE bo li do tn bin trng tn vi t kha

5. Cc kiu d liu c bnKhi 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:

28

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 nguynDng 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 nguynByte Integer Long

Kch thc1 byte 2 bytes 4 bytes

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

5.3. Kiu s thcDng cha cc gi tr l s thc. Cc kiu s thc thng dng c trnh by trong bng di y: Kiu s thcSingle Double Currency

K.thc4 byte 8 bytes 8 bytes

Phm viT -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.

29

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 ctKhai 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:

30

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 III-8: 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 hnh trn.

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

31

Hnh III-9: 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 VariantKiu 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 V = String Gn bin V vi V = 16 Gn bin V vi V = True Gn bin V vi V = #01/06/2007# mt chui mt s gi tr kiu logic mt d liu kiu thi gian

32

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 thchKhng 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 nghaS 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 trInteger 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

33

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.

34

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 bin trong VBTrong 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 III-10: Phm vi s dng ca bin c khai bo trong chng trnh con

Nu bin c khai bo cp m-un v bin c khai bo trong chng trnh con c tn trng nhau th bn trong chng trnh con, bin c s dng l bin c khai bo bn trong n. Ta xt v d sau:Option Explicit Dim a As Double, b As Double Public Sub Test1() a = 100 : b = 200

35

End Sub Public Sub Test2() Dim a As Double, Test1 c = a + b Debug.Print "a = Debug.Print "b = Debug.Print "c = End Sub

c As Double "; a; "; b; "; c;

Bin a v b c khai bo cp m-un, ngha l mi chng trnh con trong m-un ny u c th s dng v tc ng ln chng. Gi tr ca a v b c gn trong chng trnh con Test1. Trong chng trnh con Test2 mt bin a khc c khai bo (trng tn vi bin a ca mun), v gi tr khi to ca n bng 0. Kt qu chy chng trnh con Test2 nh sau:

Hnh III-11: Mc u tin trong s dng bin

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 III-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:

36

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 III-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 III-14: Phm vi s dng ca bin tng ng vi t kha Public v Private. CH 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).

37

CH Cc khai bo d liu vi cc t kho trn c thc hin trong phn General ca mt m-un. 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. Khng c gii hn v kch thc cho phn ny.

Hnh III-15: Phn General trong m-un

6.1. Khai bo hng sHng 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 =

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 binC php:Dim as

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 as

Hay:

38

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC Private as

6.3. Khai bo kiu t nh nghaTrong VB c th khai bo cc kiu d liu theo nhu cu ca ngi s dng. C php khai bo nh sau:Type as as as 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 c thay bng . truy cp ti mt trng ca bin kiu bn ghi, dng ton t (.) hoc dng cp t kha With End With.CH 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 tnhC php:[Public/Private/Dim] () as

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.GI 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 ngC php:

39

[Public/ Private/ Dim] () as

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 () as

Ch rng 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 tngKhai bo v to bin i tng phi dng thm t kha NewDim as New l lp (class) c nh ngha t trc.

Php gn i tng c thc hin vi t kha SetSet =

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 as Set = New 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:. .

7. Cc ton t v hm thng dng7.1. Cc ton tTon 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:

40

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Ton tTon t gn = + * / \ Mod ^ Ton t logic Not And Or Xor Eqv = > >= < B Then Debug.Print ("Hieu cua hai so A va B >0")

Kt qu nh sau:

44

CHNGIII:CBNVNGNNGLPTRNHVISUALBASICGI 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 tr v gi tr False (sai). gii quyt tnh hung ny ta s dng cu trc iu kin m rng nh sau:If Khi_lnh_1 Else Khi_lnh_2 End If

Din gii tin trnh ca cu trc lnh ny nh sau: nu l ng th chng trnh s thc hin , cn nu khng ng th chng trnh s thc hin . 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 Then [Khi_lnh_1] [ElseIf Then [khi_lnh_n] ... [Else [Khi_lnh_2]] End If

Trong khi cu trc ny, khi lnh [ElseIf Then c th lp li nhiu ln tng ng vi nhiu iu kin khc nhau. Din gii cu trc ny nh sau: nu 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]

45

(sau t kha Else) v thot khi cu trc ny, cn nu gp mt gi tr ng u tin ca 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 chnCu 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 [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 s c so snh vi cc nu gi tr ca tho mn th tng ng s c thc hin, sau chng trnh s thot khi cu trc la chn. Trong trng hp gi tr ca khng tho mn tt c cc iu kin th 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

46

CHNGIII:CBNVNGNNGLPTRNHVISUALBASICMsgBox "You Case vbBlue MsgBox "You Case vbMagenta MsgBox "You Else MsgBox "You End Select 're a hopeful person" 're a brave person" 're a sad person" 're an average person"

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:

8.3. Vng lp xc nh8.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 = To [Step ] [Khi_lnh] Next []

Cu trc lp ny thc hin theo trnh t sau: Gn bng gi tr So snh vi gi tr : Nu nh hn hoc bng: thc hin cc lnh bn trong [Khi_lnh] v t ng cng vo mt gi tr bng nu c t kha Step, cn khng th cng thm 1 v quay li bc so snh vi gi tr . Nu ln hn: kt thc khi lnh lp.

47

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 l m ( 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 In [Khi_lnh] Next

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

49

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 nhThc 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:LptrongkhibiuthciukinlTRUEDo While [Khi_lnh] Loop

Vi c php ny, [Khi_lnh] ch c thc hin khi 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 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:

56

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

9.4. Bin trong chng trnh conNh trnh by phn trc, bin trong chng trnh con lun c tnh cht cc b. Tuy nhin hnh thc cp pht b nh cho bin th c th khc nhau. Tu vo tng trng hp c th: Trng hp: trong phn khai bo ca chng trnh con khng s dng t kha Static Vi cc bin c khai bo bnh thng vi t kho 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. Vi cc bin c khai bo vi t kho 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 "Lan chay " & Str(stA), "stA=" & Str(stA), "B=" & Str(B) End Sub

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

Giithch 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. Trng hp: 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.

57

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:

CH 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..()CH 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 ( ).

58

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC .

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 chunVi vic thit k h thng theo phng php cu trc ha, 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 . Tip theo, d dng cho vic xy dng chng trnh, cc chc nng chung li c chia thnh cc phn nh hn na, v lp li cho n khi no mi phn ny c th minh ha bng mt chng trnh con. Trong lp trnh VBA, cc khi chc nng thng 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, trong m-un chun ngi dng c th khai bo cc kiu d liu 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 mun v cc chng trnh con theo hnh v di y di y

59

Hinh_Hoc(Module)TinhDTHH_MCatBT TinhDTHH_MCatCT TinhDTHH_TinhDoi

Tinh_Duyet(Module)LapTH_TaiTrong TTGH_CuongDo TTGH_SuDung

60

CHNGIII:CBNVNGNNGLPTRNHVISUALBASICHnh III-16: T chc d n theo cu trc chc nng

11. Lm vic vi UserForm v cc thnh phn iu khin11.1. Cc vn chungTrong 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.

toraUserForm,lmtheotrnhtsau: 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.

61

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 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 III-17: 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.

62

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Hnh III-18: 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 III-19: Trnh by kt qu bng iu khin h tr vn bn v hnh nh.

7. Vit m lnh cho cc thnh phn iu khin. 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 chn trnh n 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

63

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 III-20: 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

64

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 III-21: 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: Thuc tnhName

Gii thchTh 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). Gi tr kiu Long th hin mu nn ca UserForm hay iu khin. Gi tr kiu String th hin tiu ca UserForm hay iu khin. 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). 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. Th hin kiu v c ch hin th trn UserForm hoc iu khin. Th hin hnh nh trn nn UserForm hoc iu khin. Gi tr kiu String th hin ch thch v iu khin khi chut di chuyn qua (Tooltip) trong lc chng trnh hot ng. Th hin biu tng con tr chut hin th trn iu khin. Th hin loi con tr chut hin th trn nt lnh.

BackColor Caption Enable

Visible Font Picture ControlTipText MouseIcon MousePointer

65

CI 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 (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.

Hnh III-22: 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:. = gi tr thuc tnh . = gi tr thuc tnhGI 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,

66

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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:. .

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 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: S kinClick DblClick

Gii thchxy ra khi ngi dng kch chut trn UserForm hoc trn iu khin xy ra khi ngi dng kch p chut trn UserForm hoc trn iu khin

67

KeyPress KeyUp KeyDown MouseMove MouseUp MouseDown

xy ra khi ngi dng nhn mt phm xy ra khi ngi dng nh mt phm (sau khi nhn xung) xy ra khi ngi dng nhn mt phm (nhng cha nh ra) xy ra khi ngi dng r chut ngang qua mt iu khin hoc trn UserForm xy ra khi ngi dng nh phm chut (sau khi nhn chut) 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 SubGI 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.

68

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

11.2. Lm vic vi UserFormCc 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 ShowTn_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 HideTn_UserForm.Hide

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

Tr li trng thi trc khi thc hin Undo: thc hin phng thc RedoActionTn_UserForm.RedoActionCH Vi chng trnh s dng nhiu UserForm, trnh nhm ln trong khi s dng chng trnh, ch nn hin th UserForm cn dng cn nhng UserForm khc th n i. Trc khi gi phng thc Show ca UserForm cn hin th, phi n UserForm khng dng n bng phng thc Hide ca n.

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

Trnh t thc hin nh sau: 1. Thm mt UserForm vo d n. trong hp cng c iu khin (Control 2. Chn vo UserForm va to, chn biu tng Toolbox). Sau , r th chut trn UserForm to mt hp vn bn (TextBox).

69

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 dngTheo 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

3

7

4

8

9

Hnh III-23: Cc iu khin c bn theo mc nh trong VBA IDE

Ntlnh(CommandButton)

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 MoveTn_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.

70

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

thit lp trng thi nhn lnh (nhn tiu im focus), s dng phng thcSetFocus 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. Hpvnbn(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: Cc thuc tnh dng thit lp cch thc hin th cho TextBox Thuc tnhText TextAlign MaxLength MultiLine ScrollBars

M tNi dung vn bn cha trong iu khin. Cch thc hin th vn bn trong iu khin Qui nh di ti a ca vn bn trong iu khin (Nu t MaxLength=0, di ca vn bn l tu ) 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

Ghi chKiu String Tham kho Object Browser Kiu Long Kiu Boolean Tham kho Object Browser

Cc phng thc h tr vic nhp vn bn vo TextBox Phng thcCopy Cut Paste

M tChp 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 chTham 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). 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.

71

iu khin Label gii thch cho d liu trong hp vn bn di

iu khin Label hin th kt qu dng vn bn ngn

Hpnhdu(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

CheckBox Name: chkChonsochan

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

72

CHNGIII:CBNVNGNNGLPTRNHVISUALBASICDim 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

Nttuchn(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 optDAmoioptDAmoi.Value=True

Hpdanhsch(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 tnhList ListCount ListIndex

M tTr 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

Ghi chTham kho Object Browser Kiu Long Kiu Variant

73

Text Selected(i)

Tr v ni dung ca gi tr c chn Kim tra xem phn gi tr i c c chn hay khng.

Kiu String Kiu Boolean

Phng thc: Phng thcAddItem RemoveItem Clear

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

Ghi chTham kho trong hoc Help Object Browser

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 SubGI 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:

74

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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:

Hpdanhschthp(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.

75

Cc thuc tnh v phng thc ca ComboBox tng t nh ListBox. 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.

Hnhnh(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.

76

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

12. Cc hp thoi thng dng12.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 hmMsgBox(Prompt, [Buttons], [Title])

(Gi tr tr v ca hm c kiu VbMsgBoxResult tham kho trong Object Browser) Tham sPrompt Buttons Title

M tKiu String. Ni dung dng nhc trong MsgBox. Kiu VbMsgBoxStyle (tham kho trong Object Browser). Kiu hin th biu tng v nt lnh trong MsgBox. Kiu String. Ni dung dng tiu ca MsgBox.

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"

77

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])

Tham sPrompt Title Default XPos, YPos

M tKiu String. Ni dung dng nhc. Kiu String. Ni dung tiu . Kiu Variant. Gi tr mc nh hin th trong InputBox. Kiu Double. To gc tri trn ca InputBox khi hin th ra mn hnh.

on m sau s minh ho cch thc gi InputBox: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 tp tin 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.

78

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 tnhDialogTitle FileName FileTitle Filter FilterIndex DefaultExt

M tTiu 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. 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

Ghi chKiu String Kiu String Kiu String Kiu String Kiu Integer Kiu String

InitDir CancelError Color

Kiu String Kiu Boolean Tham kho Object Browser

Cc phng thc ca iu khin Common Dialog. Phng thcShowOpen ShowSave ShowColor ShowFont

M tHin 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)

Ghi chTham kho trong Object Browser hoc Help

79

ShowPrinter

Hin th hp thoi in n (Printer)

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 cmdOpenPrivate 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 (*.*)|*.*" 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

Name: cmdColor

M lnh vi th tc s kin Click ca cmdColorPrivate 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

80

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

13. Lp trnh x l tp tinS l tp tin l mt nhu cu khng th thiu khi xy dng phn mm ng dng, bi hu ht cc loi thng tin trn my tnh u c lu tr trong cc tp tin khc nhau. Trong cc phn mm ng dng ang c s dng, d liu u vo ca chng c cung cp di hai hnh thc: Nhp trc tip t bn phm bi ngi s dng: cch ny ch ph hp i vi lng s liu khng nhiu. Nhp t tp tin d liu, v d nh dng c bn s ( thit k ng t trn my tnh) th s liu v cc im o ton c kh nhiu (c th l vi nghn im o) v thng c cung cp di dng cc tp tin vn bn. Vic nhp d liu t tp tin lm cho mc t ng ha c nng cao hn, cho php cc phn mm ng dng c th kt ni c vi nhau thng qua hnh thc truyn d liu. Ngoi ra, lu li thng tin hay kt qu sau mi phin lm vic vi phn mm ng dng, th vic s dng tp tin lm ni lu tr l ph bin nht. Cc s liu nhp vo cng nh cc kt qu tnh ton ca phn mm s c lu li vo mt hay nhiu tp tin v chng s c gi li trong phin lm vic tip theo. c th xy dng chng trnh c kh nng nhp/xut d liu t tp tin, th ngi lp trnh cn phi nm c cc ni dung sau: Kiu ca tp tin: l cch thc t chc d liu trong tp tin . Hin nay c v s cc nh dng cho tp tin bi ngi dng c th t do nh ngha. Kiu nh dng ph bin nht dng trao i d liu l tp tin vn bn (thng c phn m rng l TXT, CSV). Vi nh dng ny ta c th xem ni dung ca tp tin bng cc chng trnh son tho n gin nh Notepad.exe ca Windows. Thao tc ln tp tin: l nhng thao tc nhm bin i ni dung hoc chnh tp tin cho ph hp vi mc ch ca ngi dng. Nhng thao tc ny c thc hin theo mt trnh t nht nh vi cc chng trnh con chuyn trch cho tng nhim v. Cc thao tc c bn bao gm: c d liu (Input) t tp tin vo trong chng trnh. Ghi d liu (Output) t chng trnh ra tp tin. Tm kim d liu trong tp tin: c d liu c chn lc. To mi tp tin: to ra tp tin trn a ghi d liu ln n. Xa tp tin khi khng cn dng n n na. Di chuyn v tr (Move) ca tp tin t ni ny n ni khc. To bn sao (Copy) cho tp tin: to mt tp tin th hai ging ht tp tin gc v ni dung nhng tn hoc v tr lu tr ca tp tin bn sao phi khc so vi tp tin gc.

13.1. Cc hnh thc truy cp tp tinTruy cp tp tin bao gm cc thao tc c v ghi d liu. Cch thc truy cp bao gm: Truy cp kiu tun t (Sequential): Qu trnh c v ghi d liu vi tp tin theo cc khi d liu lin tc t u n cui tp tin. Cc khi d liu lin tc c th l cc k t, cc s, mu tin, chui, dng vn bn,Cc khi ny c phn cch nhau trong tp tin bng k t du phy (,) hoc k t xung dng. V d, mun c dng d liu th n trong mt tp tin vn bn c m dng (m>n), khng th ngay lp tc truy cp ti dng th n m phi ln lt c t dng hin ti (l dng vn bn m con tr c d liu ang ) ti dng th n. Kiu truy cp tun t thng p dng vi cc tp tin vn bn (text file).

81

Hnh III-24: Truy cp kiu tun t khi c tp tin vn bn.

Truy cp kiu ngu nhin (Random): Qu trnh c v ghi d liu vi tp tin c thc hin da trn cc mu tin c kch thc xc nh (n v o lng mu tin l Byte). Vic truy xut n mt mu tin l tu , khng cn tun theo trnh t m theo th t ca mu tin trong tp tin. Qu trnh truy cp ngu nhin thng c p dng cho cc tp tin trong d liu c t chc theo cc khi c cu trc (cc mu tin). Truy cp kiu nh phn (Binary): Qu trnh c v ghi d liu vi tp tin c thc hin theo cc khi khng ging nhau v kch thc. Qu trnh truy cp nh phn thng p dng cho cc tp tin c cu trc khng c nh v d liu c th c xc nh thng qua cc byte d liu c c vo. Trong khun kh gio trnh ny, tp tin vn bn v cc thao tc ln n, c trnh by chi tit bi tnh ph bin v hu dng ca loi tp tin ny khi lm vic vi cc phn mm ng dng trong ngnh xy dng cng trnh giao thng. vic thao tc vi cc tp tin c thun li, VB cung cp sn hai phng php c bn: S dng cc hm c sn thao tc trc tip ln tp tin (dng cc hm I/O). S dng mt s iu khin thao tc gin tip ln tp tin (dng i tng FSO).

13.2. X l d liu trong tp tin vi cc hm I/O:Cc hm I/O (Input/Output) dng truy xut cc tp tin, trnh t nh sau: 1. M tp tin: l yu cu bt buc phi thc hin trc khi c hay ghi d liu vo tp tin. 2. Thc hin cc thao tc vi tp tin: c hoc ghi d liu vo tp tin. 3. ng tp tin: bt buc phi thc hin khi kt thc cc thao tc vi tp tin. Trong khun kh gio trnh ny ch trnh by cc thao tc theo kiu tun t vi tp tin, cc kiu truy cp khc c th tm trong cc ti liu tham kho ghi cui gio trnh ny hoc trong Help Online ca VBA IDE. 13.2.1. M tp tin: C php:

82

CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC Open For [Kiu thao tc] as [Len=Buffersize]

Trong :: l mt gi tr kiu String dng xc nh ng dn ca tp tin (v tr

ca n trn a).: cch thc thao tc vi tp tin, tham s ny c th nhn mt trong

cc gi tr sau:Input: c d liu t tp tin, khng gy li th tp tin ny phi c sn trn a. Output: ghi d liu vo tp tin vi hai im cn lu :

Nu tp tin l c sn th ton b d liu bn trong n s b xa sch trc khi d liu mi c ghi vo (ghi ln nhng d liu c). Vic ny s lm mt i nhng d liu ban u. Nu tp tin cha tn ti, mt tp tin mi s c to ra vi tn v v tr ca tp tin c xc nh trong .Append: ghi d liu vo cui tp tin c (ghi thm, ni vo nhng d liu c). : l mt gi tr kiu Integer i din cho tp tin . Sau ny, khi thao

tc vi tp tin ny, th gi tr ny s l i din. iu ny rt hu ch khi lm vic ng thi vi nhiu tp tin ang m, lc , ghi hay c d liu vi tp tin no, ta ch vic a vo gi tr ca tng ng trong cc lnh c/ghi d liu.[Len = Buffersize]: ch ra s k t trong vng m khi sao chp d liu gia tp

tin v chng trnh. y l mt gi tr ty chn. V d: Khi trn a C khng c tp tin File1.txt th cu lnh sau s to mi v m sn tp tin ny ghi d liu:Open C:\file1.txt For Output as 1

13.2.2. c d liu t tp tin: Sau khi tp tin c m bng lnh Open vi kiu l Input, n sn sng cho vic c d liu bn trong n. D liu c th c theo nhng cch thc sau: cdliutheotngdng Khi nim dng d liu trong tp tin khc so vi khi nim dng ch trn trang giy. Dng d liu c th cha rt nhiu k t (c di hu nh khng hn ch) v mt dng c coi l kt thc ti ni c cha k hiu xung dng (vbCrLf bao gm hai k t c s hiu 13 v 10). C php c mt dng t tp tin nh sau:Line Input #,

Cu lnh ny c d liu t dng hin ti ca tp tin c m (c ch s l ) v gn d liu c c cho bin strVar (bin ny c kiu String). Cu lnh Line Input # s t ng nhn dng dng d liu thng qua k hiu xung dng (tuy nhin n khng a k hiu xung dng vo bin strVar). Sau lnh Line Input #, v tr con tr c d liu s c t ng chuyn xung dng tip theo.

83

CH Ngay khi m tp tin c, con tr c d liu s c t ng t dng u tin trong tp tin.

V d: Mt tp tin vn bn c ng dn C:\file1.txt vi ni dung nh sau:

M lnh sau s c ni dung ca 3 dng d liu u tin trong tp tin:Dim strRe1 As String, strRe2 As String, strre3 As String Open C:\file1.txt For Input As 1 Line Input #1, strRe1 Line Input #1, strRe2 Line Input #1, strRe3 Debug.Print strRe1, strRe2, strre3 Close 1

Kt qu thc hin ca on m lnh trn nh sau:

CH Khi kt thc thao tc vi tp tin th cn phi ng chng li, nu khng thng tin trong c th mt hoc ngi khc khng truy cp vo tp tin c.

cmtdanhschccchuitheoktphncch c mt danh sch cc chui theo k t phn cch l du phy (,) hoc k hiu xung dng (vbCrLf) vi c php sau:Input # ,

Cu lnh ny c khi d liu t v tr hin ti ca con tr c d liu trong tp tin c ch s . D liu c c s c gn vo cho (mi bin trong danh sch ny u c kiu d liu l String). S khi d liu c c s ph thuc vo s bin c trong . Khi d liu c nhn dng da vo du phy ( , ) hoc k hiu xung dng (vbCrLf). Sau lnh Input #n, v tr con tr c d liu s c t ng chuyn sang khi d liu tip theo.CH c d liu bng lnh Input #n thng c dng vi tp tin m d liu ca n c to ra bi lnh Write #n.

V d: Vi tp tin vn bn C:\file1.txt nh trn, vi cc m lnh sau:Dim strRe1 As String, strRe2 As String, strRe3 As String

84

CHNGIII:CBNVNGNNGLPTRNHVISUALBASICOpen C:\file1.txt For Input As 1 Input #1, strRe1, strRe2, strRe3 Debug.Print strRe1, strRe2, strRe3 Close 1

Ta nhn c kt qu nh hnh di:

Nu lnh c d liu c gi khi v tr con tr c d liu cui tp tin th s xy ra li. trnh li ny cn phi kim tra v tr ca con tr c d liu, xem n c cui tp tin hay khng. Hm EOF (Filenumber) (c kiu Boolean) c dng cho mc ch ny, n s tr v gi tr True nu v tr con tr c d liu ang cui tp tin, v ngc li s tr v gi tr False. V d sau s c ton b d liu trong tp tin C:\File1.txt:Dim strRe As String Open "C:\file1.txt" For Input As #1 Do While Not EOF(1) Input #1, strRe Debug.Print strRe Loop Close #1

13.2.3. Ghi d liu vo tp tin: Thao tc ghi d liu vo tp tin c thc hin sau khi tp tin m ghi vi hai kiu ghi d liu l ghi ln d liu ban u (vi thng s Output) hay ghi ni vo sau cc d liu ban u (vi thng s Append). Vi Output: ton b ni dung ban u ca tp tin s b xa v con tr ghi d liu s c t v tr u tin. Nu tp tin cha c th n s c t ng to ra theo tn v v tr ca ng dn trong lnh Open. Vi Append: vic ghi c thc hin ni tip vo tp tin hin ti, v tr bt u ghi mc nh l cui tp tin. GhidliuvilnhPrint #n C php nh sau:Print # , [outputlist]

Trong :filenumber: ch s ca tp tin. outputlist: danh sch cc gi tr cn ghi, cc gi tr trong danh sch ny c phn tch nhau bi du ( ; ). Nu outputlist kt thc bng du (;) con tr ghi d liu s

chuyn sang v tr k tip. Ngc li, nu cui danh sch trng th con tr ghi d liu s chuyn sang dng k tip. Cc thnh phn d liu trong outputlist s c ghi lin tc vo tp tin, ngi dng c th thm cc khong trng bng lnh Spc(n) hoc cc du tab bng lnh Tab(n)(vi n l s k t cn thm vo). V d: chng trnh sau s ghi d liu vo tp tin C:\file1.txt bng lnh Print #Sub FilePrint()

85

Open "C:\file1.txt" For Output As 1 Dim Ax As Double, Ay As Double Dim Bx As Double, By As Double Ax = 100: Ay = 100 Bx = 200: By = 200 Print #1, "Diem A: "; Ax; Print #1, Ay Print #1, "Diem B: "; Bx; Print #1, By Close 1 End Sub

Kt qu nh sau:

GhidliuvilnhWrite # C php nh sau:Write #filenumber, [outputlist]

Trong :filenumber: ch s ca tp tin. outputlist: danh sch cc gi tr cn ghi, cc gi tr trong danh sch c phn tch nhau bi du ( , ). Nu outputlist kt thc bng du ( ; ) con tr ghi d liu s

chuyn sang v tr k tip. Ngc li, nu cui danh sch trng th con tr ghi d liu s chuyn sang dng k tip. Cc thnh phn d liu trong outputlist s c ghi lin tc vo tp tin v du phy ( , ) s c t ng thm vo gia hai gi tr trong tp tin. V d: chng trnh con sau s ghi d liu vo tp tin C:\file2.txt:Sub FileWrite() Open "C:\file2.txt" For Output As 1 Dim Ax As Double, Ay As Double Dim Bx As Double, By As Double Ax = 100: Ay = 100 Bx = 200: By = 200 Write #1, "Diem A: ", Ax; Write #1, Ay Write #1, "Diem B: ", Bx; Write #1, By Close 1 End Sub

Kt qu nh sau:Mr. Soat -TEL: (0989)744887 -Email: [email protected] -Y! kimjuso1987 -Web: http://soat.tk >

129

Mt cch khc bit th t ca worksheet, l xem th t xut hin trn th cha cc sheet trong bng tnh.

Hnh IV-13: Th t ca Worksheet

Trong minh ho trn, v tr th 2 l ca Chart sheet nn khng c tnh trong th t ca cc worksheet. to mt worksheet mi, s dng phng thc Add c trong tp i tng Worksheets.Worksheets.Add

Di y l cc phng thc v thuc tnh ph bin trong i tng worksheet. Calculate Phng thc ny thc hin qu trnh tnh ton cho ton b worksheet c tham chiu (xem thm mc Calculation trang 122):Worksheets(Sheet1).Calculate

Comments L tp i tng cha tt c cc ch thch1 c trong worksheet ang c tham chiu. Kiu d liu tr v l kiu Comment. on m sau s hin th ni dung ca tt c cc ch thch c trong sheet hin hnh:Dim myComment As Comment For Each myComment In Worksheets(Sheet1).Comments MsgBox myComment.Text Next myComment

Delete Phng thc ny s xo worksheet c tham chiu, ging nh khi chn trnh n Edit Delete Sheet trong Excel. on m sau s xo worksheet tn l Sheet3:Worksheets(Sheet3).Delete

Name Thuc tnh ny tr v tn ca worksheet ging nh c hin th trn th cha cc sheet trong workbook. PrintOutvPrintPreview

Ch thch l mt on vn bn gn thm vo mt no . on vn bn ny c hin ln mi khi ngi dng di chut trn . no c ch thch th s c thm biu tng hnh tam gic mu gc trn bn phi ca . to ch thch cho mt , chn trnh n Insert Comment trong Excel.

1

130

CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Nhng phng thc ny dng thc hin in hoc xem trc khi in mt worksheet. Chi tit v cc tham s cho phng thc PrintOut, xem li mc i tng Workbook - PrintOut trang 126.Worksheets(Sheet2).PrintOut PrintPreview:=True trc Worksheets(Sheet3).PrintPreview in In, Xem c trc xem khi

ProtectvUnprotect Phng thc Protect s bt ch bo v cho worksheet ging nh khi chn t trnh n Tools Protection Protect Sheet trong Excel. Nu cn to mt khu yu cu ngi dng nhp mi khi tt ch bo v, ngi dng c th nhp thm vo tham s chui k t cha mt khu trong phng thc ProtectWorksheets(Sheet2).Protect Worksheets(Sheet2).Protect Password:="Excel" Bt ch bo v Bo v, c mt khu

Phng thc Unprotect s tt ch bo v ca worksheet. i vi nhng worksheet c bo v bng mt khu, cn phi truyn thm tham s l chui k t cha mt khu tt ch bo v; nu khng truyn tham s mt khu, mt hp thoi s c hin ln ngi s dng nhp vo mt khu.Worksheets(Sheet2).Unprotect Password:="Excel" Tt ch bo v

Range y l thuc tnh rt quan trng trong lp trnh trn Excel. Thuc tnh ny s c trnh by r hn trong mc i tng Range trang 132. Select Phng thc ny s chn worksheet tham chiu lm worksheet hin hnh, tng t nh khi chn worksheet trn th cha cc sheet ca workbook.Worksheets(Sheet2).Select Chn Sheet2 lm sheet hin hnh

SetBackgroundPicture Phng thc ny s chn mt nh lm nh nn cho worksheet, ging nh khi chn trnh n Format Sheet Background trong Excel. Tham s bt buc phi nhp vo l tn tp ho dng lm nh nn, bao gm c ng dn y . Nu mun xo nh nn, ch cn nhp tham s tn tp ho bng rng.Worksheets(Sheet1).SetBackgroundPicture "C:\MyPicture.jpg" Worksheets(Sheet1).SetBackgroundPicture "" Xo nn nh

Visible Thuc tnh ny thit lp s hin th ca worksheet, bng TRUE nu worksheet c hin th. Vic thay i gi tr ca thuc tnh ny cng tng t nh khi chn t trnh n Format Sheet Hide/Unhide trong Excel.Worksheets(Sheet1).Visible = False n Sheet1

131

Worksheets(Sheet1).Visible = True

Hin th li Sheet1

NamettnchomtvngdliutrongWorksheet S dng thuc tnh Name t tn cho vng d liu cn thao tc theo cch sau:Dim a As Worksheet Set a = Worksheets("Sheet1") a.Names.Add "ABC", "=$A$1:$D$5"CH Nu tn c t c th vng d liu c s c nh ngha li theo phm vi mi. Nu vng d liu khn c du $ th n s t ng tnh tin theo v tr ca hin hnh.

5.2.5. i tng Range i tng Range tham chiu n mt hoc mt vng d liu trn bng tnh. y l i tng ph bin nht trong Excel, bi hu ht cc tng tc vi Excel u c thc hin da trn cc v vng d liu. Vi i tng Range, ngi lp trnh khng ch tc ng ln mt ring l m cn c th tc ng ln nhiu cng mt lc. ThamchiunitngRange Vic tham chiu n i tng Range c thc hin da trn a ch ca cc v c thc hin theo nhiu phng thc khc nhau. lm r hn cch thc tham chiu, cc v d sau s thc hin gn gi tr cho vng d liu c tham chiu. tham chiu n mt no , ch cn nhp a ch ca . a ch ca c th l kiu a ch tng i, hoc tuyt i. V d sau s tham chiu n B2:ActiveSheet.Range("B2").Value = 9 hoc c th gn trc tip nh sau: ActiveSheet.Range("B2") = 9

Trong trng hp nu ngi dng c mt vng d liu c t tn, ngi lp trnh c th tham chiu n vng d liu thng qua tn ca vng d liu. Gi s trong Sheet1 c mt vng d liu t A2 n B3 c t tn l Input, th cch tham chiu nh sau:Worksheets("Sheet1").Range("SoLieu") = 9

132

CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Trng hp nu mun tham chiu n mt vng d liu, ngi lp trnh c th da trn a ch ca hai , gc trn bn tri v gc i bn phi. V d sau s tham chiu n vng d liu t B2 n C3 theo nhiu cch khc nhau:Worksheets("Sheet1").Range("B2:C3") = 9 Worksheets("Sheet1").Range("B2.C3") = 9 Worksheets("Sheet1").Range("B2", "C3") = 9 Cch th nht Cch th hai Cch th ba

Hoc thay v s dng i tng Range, c th dng trc tip du ngoc vung ([ ]). iu ny tng ng vi khi tham chiu s dng i tng Range:Worksheets("Sheet1").[B2:C3] = 9 Worksheets("Sheet1").[B2.C3] = 9 Cch th nht Cch th hai

Nu mun tham chiu n mt vng d liu l giao ca cc vng d liu, s dng du cch gia cc vng d liu. V d sau s tham chiu n vng d liu l giao ca hai vng d liu l A1:C3 v B2:D4, vng c tham chiu thc s l vng B2:C3Worksheets("Sheet1").Range("A1:C3 B2:D4") = 9

Nu mun tham chiu n mt vng d liu l hp ca cc vng d liu khc nhau, s dng du phy ngn cch gia cc vng d liu. V d sau s tham chiu n vng d liu l hp ca cc vng d liu A1:B2, D3 v vng A4:C4Worksheets("Sheet1").Range("A1:B2,D3,A4.D4") = 9

Di y l cc phng thc v thuc tnh ca i tng Range: Activate Phng thc ny dng chuyn mt thnh hin hnh. Nu vng d liu l nhiu hn mt th ch c mt c chn lm hin hnh, l gc trn bn tri. Cn lu l phng thc ny ch c gi thnh cng nu vng d liu nm trn worksheet hin hnh. V vy, mun

133

kch hot mt vng d liu trn mt worksheet no , cn phi chuyn worksheet thnh worksheet hin hnh.Worksheets(Sheet1).Activate Range(A3:B5).Activate

AddCommentvClearComments Phng thc AddComment cho php thm ch thch vo vng c tham chiu. Vng d liu ny ch c php l mt , v phi cha c ch thch, nu khng s lm pht sinh li. Cn phng thc ClearComments cho php xo tt c cc ch thch ca cc vng d liu. Khc vi phng thc AddComment, phng thc ny c th l mt vng bt k.Range("A1:C3").ClearComments Range("B2").AddComment "Chu thich moi" Xo ch thch vng A1:C3 Thm ch thch B2

Address Thuc tnh ny tr v a ch ca vng d liu c tham chiu. V d sau s hin th mt vng d liu c t tn l SoLieu trong Sheet1:MsgBox Worksheets("Sheet1").Range("SoLieu").Address

BorderAround Phng thc ny thc hin v ng bin xung quanh vng d liu c tham chiu. Ngi lp trnh c th thit lp kiu ng, b dy nt v v mu ca ng.Worksheets("Sheet1").Range("A1:D4").BorderAround _ LineStyle:=xlDashDot, ColorIndex:=3, Weight:=xlThick

Calculate Phng thc ny thc hin tnh ton cho vng d liu c tham chiu, p dng trong trng hp ch tnh trong Excel c thit lp thnh tnh ton th cng (Manual). Cells Cells l tp i tng tham chiu n tt c cc nm trong vng d liu c tham chiu. Chi tit xem thm mc Tp i tng Cells trang 137. Clear,ClearContentsvClearFormats Phng thc Clear xo tt c nhng g c trong vng d liu c tham chiu: ni dung, nh dng, ch thch Phng thc ClearContents ch xo ni dung c lu tr trong vng d liu. Cn phng thc ClearFormats ch xo nh dng ca cc trong vng d liu. Sau khi xo nh dng, cc s c nh dng mc nh trong Excel.Worksheets(Sheet2).Range(A1:C3).Clear Worksheets(Sheet2).Range(A1:C3).ClearContents Worksheets(Sheet2).Range(A1:C3).ClearFormats Xo tt c Xo ni dung Xo nh dng

ColumnvRow

134

CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hai phng thc ny tr v s th t ca ct v hng ca u tin ca vng d liu c tham chiu.MsgBox Worksheets("Sheet1").Range("B3:D12").Column 2 MsgBox Worksheets("Sheet1").Range("B3:D12").Row 3 Hin th gi tr Hin th gi tr

ColumnsvRows Thuc tnh Columns v Rows thc cht l tp i tng kiu Range cha cc ct v cc hng nm trong phm vi vng d liu c tham chiu. V d sau s dng vng lp For Each Next i mu v in s th t ct vo cc ct trong vng d liu c tham chiu.Public Sub VD_Columns() Dim myColumns As Range For Each myColumns In Range("B3:C4,E2:F6").Columns myColumns.Interior.Color = RGB(0, 255, 0) i mu myColumns.Value = myColumns.Column in s ct Next myColumns End Sub

th

t

GI C th s dng tp i tng Columns v Rows truy cp n c mt hng hay mt ct no trong worksheet. V d sau s in gi tr 9 vo tt c cc trong ct C v cc trong hng 3: Worksheets("Sheet1").Columns("C") = 9 Worksheets("Sheet1").Rows("3") = 9

ColumnWidthvRowHeight Thuc tnh ny dng thit lp chiu rng ca ct v chiu cao ca hng ca vng d liu c tham chiu.Worksheets("Sheet2").Range("B2:C4").ColumnWidth = 15 Worksheets("Sheet2").Range("B2:C4").RowHeight = 15

Offset Hm Offset tnh tin vng d liu theo s hng v s ct c xc nh trong cc thng s u vo ca hm Offset. Gi tr tr v ca hm ny chnh l vng d liu sau khi c tnh tin. Cu trc ca hm Offset l: Offsett(s_hng, s_ct). S_hng nu l s dng l tnh tin xung di, s_ct nu l s dng l tnh tin sang phi. V d sau s tnh tin vng d liu ln trn 2 hng v sang phi 3 ct:

135

Worksheets("Sheet1").Range("A4:B5").Offset(-2, 3).Value = 9

Replace Phng thc ny dng thay th mt chui k t bng mt chui k t khc. V d sau s thay th t SIN bng COS:Worksheets("Sheet2").Range("A1.C5").Replace "SIN", "COS"

Phng thc ny cng c nhiu tham s khc na thit lp ch tm kim vo thay th nh trt t tm kim, phn bit ch hoa ch thng, Chi tit xem trong hng dn i km ca Excel. Select Phng thc ny s la chn vng d liu c tham chiu, ging nh khi s dng chut la chn mt vng d liu trong worksheet. Cng ging nh phng thc Activate, vng d liu c tham chiu phi nm trong worksheet hin hnh, nu khng s lm pht sinh li khi thc thi chng trnh. V d sau s chn vng d liu B2:C3 trong worksheet hin hnh:Range(B2:C3).Select

Value Thuc tnh ny cha gi tr ca vng d liu. Cn phi lu rng khi c gi tr ca vng d liu th vng d liu bt buc phi l mt n nht, cn khi gn gi tr th vng d liu c th l mt hoc mt vng d liu gm nhiu v trong trng hp tt c cc u c cng mt gi tr.MsgBox Range("A1").Value Range("B2:C3").Value = 9 c v hin th gi tr A1 Gn gi tr cho vng d liu B2:C3

GI Trong khi lm vic vi i tng Range, i tng tham chiu n mt vng d liu, cn lu nhng im sau: Vic thao tc vi Excel bng m lnh khng cn phi thc hin la chn vng d liu, v th nn hn ch s dng cc phng thc nh Activate hoc Select. Trong trng hp bt buc phi s dng cc phng thc ny, cn phi kch hot worksheet c cha vng d liu lm worksheet hin hnh bng phng thc Activate ca worksheet . Nn s dng cc vng d liu c t tn, chng hn nh nn s dng Range(KetQua) thay v s dng Range(D45). V khi s dng Range(D45), nu ngi dng chn thm mt hng pha trn hng 45 th a ch ca cn tham chiu s thay i, v cn phi thay i m lnh thnh Range(D46). Nhng nu s dng vng d liu c t tn th khng cn phi thay i m lnh.

136

CHNGIV:LPTRNHTRNMICROSOFTEXCELExcel cho php la chn cc vng d liu ri rc bt k. Trong khi s dng Excel, c th thc hin bng cch gi phm CRTL khi chn vng d liu.

5.2.6. Tp i tng Cells Tp i tng Cells l tp i tng cha tt c cc nm trong vng c tham chiu. Tp i tng Cells l mt thuc tnh ca i tng worksheet v cng l mt thuc tnh ca i tng Range. Khi truy cp thng qua i tng worksheet, tp i tng Cells tham chiu n tt c cc ca worksheet . Khi truy cp thng qua i tng Range, tp i tng Cells ch tham chiu n cc nm trong vng d liu. Thc cht, mi thnh phn cu thnh nn tp i tng Cells l mt , c kiu d liu l Range nn tt c cc phng thc v thuc tnh ca i tng Range u c trong tp i tng Cells. Xem thm mc i tng Range trang 132 bit chi tit v i tng Range. tham chiu n mt no thng qua tp i tng Cells, c th s dng cu trc sau:object.Cells(ch_s_hng, ch_s_ct) object.Cells(ch_s_) object.Cells

Object l i tng c cha thuc tnh Cells, c th l i tng kiu Worksheet hoc kiu Range. Cc tham s ch_s_hng v ch_s_ct l ch s tng i trong phm vi ca vng d liu c tham chiu. Ch_s_ l s th t ca trong tp i tng Cells, s th t c nh s theo tng hng, t tri sang phi v t trn xung di. Xt on m sau:Worksheets(Sheet1).Range("B2:E4").Cells(2, 3).Value = 9

on m trn s dng cch th nht gn gi tr 9 cho mt nm trong vng B2:E4. Object y chnh l i tng kiu Range, v vy tp i tng Cells l tp i tng cha cc trong vng B2:E4. Ch s hng v ct s c tnh tng i so vi u tin ca vng d liu, l B2. V vy, Cells(1,1) l u tin ca vng d liu, cn Cells(2,3) tng ng vi D3. Xt on m th 2:Worksheets("Sheet1").Cells(257).Value = 9

137

on m trn s dng cch thc 2 tham chiu n mt trong worksheet. Object y chnh l i tng Worksheet, v vy tp i tng Cells l tp i tng cha tt c cc c trong worksheet. u tin A1 s c th t l 1, cc cn li c nh s t tri sang phi v sau t trn xung di. Mt worksheet l mt vng d liu c 65536 hng v 256 ct nn thc 256 l cui cng ca hng th nht, IV1; cn th 257 s l u tin ca hng th 2, A2. Xt on m th 3:Worksheets("Sheet1").Cells.Clear

on m trn s dng cch th 3 tham chiu n cc . Theo , tt c cc u c tham chiu v s u c x l ging nhau. Ngoi ra, ngi lp trnh cn c th tham chiu n tng trong tp i tng Cells bng cch thc hin cu lnh lp For Each Next. V d sau s thc hin tnh tng tt c cc nm trong vng d liu c tham chiu:Sub VD_Cells() Dim myCell As Range Dim Tong As Double Tong = 0 For Each myCell In Worksheets("Sheet1").Range("A2.C4").Cells Tong = Tong + myCell.Value Tnh tng Next myCell MsgBox Tong Hin th kt qu End Sub

6. S kin ca cc i tng trong ExcelKhi ngi dng thc hin mt thao tc no trong chng trnh, Excel s lm sinh mt s kin tng ng vi cc thao tc , chng hn nh cc s kin khi m hoc lu workbook. Nh c cc s kin m ngi lp trnh c th vit m lnh thc hin mt s thao tc mi khi s kin xy ra (cn gi l b x l s kin event handler). Nhng hp thng bo nh Would you like to save changes? khi ta ng bng tnh m cha lu d liu l minh ho r nht vic s dng cc s kin trong Excel. Thc cht, mi b x l s kin l mt chng trnh con dng th tc. Khi s kin xy ra, chng trnh con tng ng s c t ng thc thi. Excel c kh nng gim st nhiu loi s kin khc nhau. Cc s kin c th c phn loi nh sau: S kin ca Workbook (s kin mc Workbook): cc s kin xy ra trong mt workbook no . Chng hn nh cc s kin Open (khi m hoc to workbook), BeforeSave (trc khi lu workbook), NewSheet (mt sheet mi va c thm), S kin ca Worksheet (s kin mc Worksheet): cc s kin xy ra trong mt worksheet no . V d nh cc s kin Change (khi mt trong sheet b thay i), SelectionChange (ngi dng chuyn sang vng c chn khc), Calculate (khi mt worksheet c tnh ton li), S kin ca i tng Chart: cc s kin xy ra trn mt i tng chart no . Chng hn nh cc s kin Select (khi mt i tng Chart c chn), s kin SeriesChange (khi c mt gi tr no trong chui s liu b thay i). S kin ca ng dng Excel (s kin mc ng dng): cc s kin xy ra bn trong chng trnh Excel. Cc s kin ny bao gm NewWorkbook (khi mt workbook mi c to), WorkbookBeforeClose (trc khi ng mt workbook no ), SheetChange (khi mt no trong workbook b thay i).

138

CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Cc s kin trong UserForm: l cc s kin xy ra trong UserForm hoc trong mt i tng nm trn UserForm. V d nh UserForm c s kin Initialize (xy ra trc khi UserForm c hin th), hoc i tng CommandButton trn UserForm c s kin Click (xy ra khi ngi dng kch chut vo nt lnh). Cc s kin khng gn vi i tng: nhm s kin ny c hai s kin rt hu dng: s kin OnTime v s kin OnKey. Nhng s kin ny c cch thc hot ng khng ging nh nhng s kin khc. C mt s thao tc trong Excel c th lm xy ra nhiu s kin khc nhau. V d nh khi ngi dng chn mt worksheet mi vo trong workbook s lm pht sinh cc s kin mc ng dng nh sau: S kin WorkbookNewSheet: xy ra khi to mi worksheet. S kin SheetDeactivate: xy ra khi worksheet hin hnh khng cn hin hnh na. S kin SheetActivate: xy ra khi worksheet va mi c to c chuyn thnh worksheet hin hnh.

6.1. To b x l s kin cho mt s kinNhng ngi mi lp trnh VBA thng khng bit ni no to b x l s kin, hoc b x l s kin c to ra nhng li khng hot ng c. Nguyn nhn l do chng trnh con cha cc b x l s kin khng c t ng v tr. c th hot ng ng nh mong mun, cc b x l s kin ca tng i tng phi c t trong m-un m lnh tng ng ca i tng . V d sau s minh ho cch to b x l s kin cho s kin Worksheet_Change ca Sheet 1 (l s kin pht sinh khi ngi dng thay i gi tr ca mt no trong Sheet 1). Tobxlskin 1. Trong ca s Project ca VBAIDE, kch p chut ln i tng Sheet1 hin th ca s m lnh cho i tng Sheet1.

2. Trong ca s m lnh va hin th, chn danh sch gc trn bn tri v chn mc Worksheet chn danh sch gc trn bn phi v chn mc Change.

139

3. VBAIDE s t ng pht sinh on m lnh sau:Private Sub Worksheet_Change(ByVal Target As Range) End Sub

Chng trnh con dng th tc trn chnh l b x l s kin cho s kin Change ca i tng Sheet1. Ngi lp trnh c th vit m lnh thc hin cc thao tc cn thit mi khi s kin xy ra. on m sau s hin th hp thoi thng bo a ch ca b thay i ni dung:Private Sub Worksheet_Change(ByVal Target As Range) MsgBox( b thay i: & Target.Address) End Sub

Mi b x l s kin u c cc tham s ring. ngha v s lng cc tham s ph thuc vo tng loi s kin. hiu r thm v cc tham s ca mi s kin, tham kho thm trong ti liu tr gip ca VBA trong Excel.CH Excel cn cho php ngi dng tt cc s kin trong ng dng, khi , cc b x l s kin s khng c thc thi mi khi ngi dng thc hin cc thao tc tng ng na. tt cc s kin, ch cn gn thuc tnh EnableEvents ca i tng bng FALSE (Application.EnableEvents=FALSE). V ngc li, bt li cc s kin, ch cn gn thuc tnh EnableEvents bng TRUE (Application.EnableEvents=TRUE)

6.2. S kin trong WorkbookCc s kin mc workbook xy ra trong mt workbook no . Cc b x l s kin ca i tng workbook c lu trong m-un m lnh ca workbook tng ng. Di y l danh sch cc s kin trong workbook: S kinActivate AddinInstall AddinUninstall BeforeClose BeforePrint BeforeSave Deactivate

Thao tc lm pht sinh s kinWorkbook c chn lm workbook hin hnh Workbook c ci t lm Add-In Workbook b g ci t, khng cn l Add-In na Ngay trc khi workbook b ng li Ngay trc khi workbook c in hoc xem trc khi in Ngay trc khi lu workbook Workbook khng cn hin hnh

140

CHNGIV:LPTRNHTRNMICROSOFTEXCELNewSheet Open SheetActivate SheetBeforeDoubleClick SheetBeforeRightClick SheetCalculate SheetChange SheetDeactivate SheetSelectionChange WindowActivate WindowDeactivate WindowResize Mt worksheet va c to trong workbook M workbook Mt sheet no c chn lm sheet hin hnh Ngi dng kch p chut trn sheet no . S kin ny xy ra ngay trc khi kch p. Ngay trc khi ngi dng kch phi chut trn sheet Khi trn workshet c thc hin tnh ton no Khi worksheet b thay i Khi mt worksheet no khng cn l sheet hin hnh na Khi ngi dng thay i vng la chn trn worksheet Khi mt ca s c chn l ca s hin hnh Khi mt ca s khng cn l ca s hin hnh Khi mt ca s b thay i kch thc

SkinOpen Mt trong nhng s kin ph bin nht trong Workbook chnh l s kin Open. S kin ny c kch hot mi khi workbook (hoc add-in) c m, v s kch hot b x l s kin tng ng c tn l Workbook_Open. Bn trong th tc ny, ngi lp trnh c th thc hin nhiu thao tc khc nhau, chng hn nh cc thao tc ph bin sau: Hin th mt thng bo cho mng M mt workbook khc Thit lp, to thanh trnh n hoc thanh cng c Kch hot mt sheet hoc mt no Kim tra cc iu kin cn thit khc. Chng hn nh kim tra xem add-in cn thit cho hot ng ca workbook c ci t hay cha Khun mu ca b x l s kin Open nh sau:Private Sub Workbook_Open() M lnh s c t y End Sub

Di y l mt v d n gin ca th tc Workbook_Open. Chng trnh c s dng hm Weekday ca VBA xc nh mt ngy trong tun. Nu l ngy th 6, mt hp thng bo s xut hin,