You are on page 1of 284

Li ni u

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


PHN I: M U .................................................................................. 1
1.Tngquanvthitkvtnghathitkcngtrnhgiaothng.............................. 1
2.intvccphnmmdngchothitkcngtrnhgiaothng.................................. 3
3.Lachnphnmmdngchothitkcngtrnhgiaothng.......................................... 4
4.Chuynbithaphnmm .................................................................................................... 6
5.Ktchng .............................................................................................................................. 11

PHN II: LP TRNH TRN NG DNG NN ...................................... 12


CHNG I: KHI NIM........................................................................................ 12
CHNG II: TNG QUAN V VBA ..................................................................... 19
1.cimcaVBA.................................................................................................................. 19
2.TrnhtxydngmtdnbngVBA ............................................................................ 19
3.CutrccamtdnVBA................................................................................................ 20
4.MitrngphttrintchhpVBAIDE............................................................................ 21
5.VdutinviVBA.......................................................................................................... 23
CHNG III: C BN V NGN NG LP TRNH VISUAL BASIC ................. 25
1.Nhngquinhvcphp.................................................................................................. 25
2.Cctrgipvcphptrongqutrnhvitmlnh ...................................................... 25
3.Tnhnngginhvthonthinmlnh ..................................................................... 26
4.TkhotrongVB ................................................................................................................... 27
5.Cckiudliucbn.......................................................................................................... 28
5.1. Kiu logic (boolean).......................................................................................................... 29
5.2. Kiu s nguyn.................................................................................................................. 29
5.3. Kiu s thc....................................................................................................................... 29
5.4. Kiu mng (array) ............................................................................................................. 29
5.5. Kiu chui (String)............................................................................................................ 31
5.6. Kiu thi gian (Date)......................................................................................................... 32
5.7. Kiu Variant ...................................................................................................................... 32
5.8. Kiu t nh ngha (user-defined type).............................................................................. 33
5.9. Kiu lp (Class)................................................................................................................. 34
6.KhaibobintrongVB.......................................................................................................... 35
6.1. Khai bo hng s ............................................................................................................... 38
6.2. Khai bo bin..................................................................................................................... 38
6.3. Khai bo kiu t nh ngha .............................................................................................. 38
6.4. Khai bo mng tnh ........................................................................................................... 39
6.5. Khai bo mng ng.......................................................................................................... 39
6.6. Khai bo, to v lm vic vi bin i tng.................................................................... 40
7.Cctontvhmthngdng ........................................................................................... 40
7.1. Cc ton t......................................................................................................................... 40
7.2. Cc hm ton hc .............................................................................................................. 41
7.3. Cc hm chuyn i d liu .............................................................................................. 41
7.4. Cc hm x l chui.......................................................................................................... 43
8.Cccutrciukhin ......................................................................................................... 44
8.1. Cu trc iu kin.............................................................................................................. 44
8.2. Cu trc la chn .............................................................................................................. 46
8.3. Vng lp xc nh.............................................................................................................. 47

i
8.3.1. Vng lp theo bin m .............................................................................................47
8.3.2. Lp trong mt tp hp................................................................................................49
8.4. Vng lp khng xc nh ...................................................................................................50
9.Chngtrnhcon ................................................................................................................... 51
9.1. Hm (Function) ..................................................................................................................52
9.2. Th tc (Sub) .....................................................................................................................52
9.3. Truyn tham s cho chng trnh con................................................................................52
9.3.1. Truyn tham s theo tham chiu ................................................................................53
9.3.2. Truyn tham s theo tham tr .....................................................................................54
9.3.3. Tham s tu chn.......................................................................................................54
9.3.4. Danh sch tham s vi s lng tham s tu ..........................................................55
9.3.5. Hm c gi tr tr v l kiu mng. ............................................................................55
9.4. Bin trong chng trnh con ..............................................................................................56
9.5. Cch thc gi chng trnh con. ........................................................................................58
9.6. Thot khi chng trnh con..............................................................................................59
10.Tchcccchngtrnhcontheohthngccmunchun .................................. 59
11.LmvicviUserFormvccthnhphniukhin .................................................. 60
11.1. Cc vn chung .............................................................................................................60
11.1.1. To UserForm v cc thnh phn iu khin trong VBA IDE ................................63
11.1.2. Cc thuc tnh ca UserForm v cc thnh phn iu khin. ..................................64
11.1.3. Cc phng thc ca UserForm v cc thnh phn iu khin. ..............................66
11.1.4. Cc s kin trn giao din........................................................................................66
11.1.5. V d.........................................................................................................................67
11.2. Lm vic vi UserForm ...................................................................................................68
11.3. Cc iu khin thng dng...............................................................................................69
12.Cchpthoithngdng................................................................................................... 76
12.1. Hp thng ip (Message Box MsgBox)......................................................................76
12.2. Hp nhp d liu (Input Box InputBox) .......................................................................77
12.3. Hp thoi da trn iu khin Common Dialog. .............................................................78
13.Lptrnhxltptin.......................................................................................................... 80
13.1. Cc hnh thc truy cp tp tin ..........................................................................................81
13.2. X l d liu trong tp tin vi cc hm I/O: ....................................................................82
13.2.1. M tp tin:................................................................................................................82
13.2.2. c d liu t tp tin: ..............................................................................................82
13.2.3. Ghi d liu vo tp tin: ............................................................................................84
13.2.4. ng tp tin..............................................................................................................86
13.3. X l d liu trong tp tin theo m hnh FSO (File System Object) ...............................86
13.3.1. To tp tin mi.........................................................................................................88
13.3.2. M tp tin c thao tc .....................................................................................89
14.GrivbylitrongVBAIDE ........................................................................................ 90
14.1. Phn loi li trong lp trnh..............................................................................................90
14.2. G ri trong lp trnh .......................................................................................................91
14.2.1. Pht hin li lc thc thi ..........................................................................................91
14.2.2. Cc phng php thc thi m lnh ..........................................................................92
14.2.3. Ca s tr gip g ri ..............................................................................................93
14.3. By li trong VBAIDE.....................................................................................................95
14.3.1. Cu lnh On Error....................................................................................................95
14.3.2. i tng Err ...........................................................................................................96
14.3.3. Hm Error ................................................................................................................97
CHNG IV: LP TRNH TRN MICROSOFT EXCEL ....................................... 99
1.TngquanvMicrosoftExcel .............................................................................................. 99
1.1. Kh nng ca Excel............................................................................................................99
1.2. Giao din ca Excel ...........................................................................................................99
1.3. Kh nng m rng ca Excel ...........................................................................................100
2.Macro ..................................................................................................................................... 100

ii
2.1. Macro l g?..................................................................................................................... 101
2.2. To Macro ....................................................................................................................... 101
2.2.1. To Macro theo kch bn......................................................................................... 101
2.2.2. To Macro s dng VBA ........................................................................................ 104
2.3. Qun l Macro................................................................................................................. 104
2.4. S dng Macro ................................................................................................................ 105
2.4.1. Thc thi Macro bng phm tt ................................................................................. 106
2.4.2. Thc thi Macro thng qua trnh qun l Macro ...................................................... 106
2.4.3. Thc thi Macro trc tip t VBAIDE ..................................................................... 106
2.5. Hiu chnh Macro............................................................................................................ 107
2.6. Vn an ton khi s dng Macro.................................................................................. 107
3.XydnghmmitrongExcel .......................................................................................... 107
3.1. Khi nim v hm trong Excel ........................................................................................ 107
3.2. To hm mi bng VBA ................................................................................................. 108
3.2.1. Ti sao phi dng hm?........................................................................................... 108
3.2.2. Cu trc hm ........................................................................................................... 109
3.2.3. To hm mi ........................................................................................................... 109
3.3. Hm tr v li .................................................................................................................. 111
4.AddinvPhnphiccngdngmrng................................................................... 113
4.1. Khi nim v Add-In ....................................................................................................... 114
4.2. Trnh qun l Add-In....................................................................................................... 114
4.3. To Add-In ...................................................................................................................... 115
4.4. Phn phi v Ci t Add-In ........................................................................................... 117
5.HthngccitngtrongExcel................................................................................... 117
5.1. M hnh i tng trong Excel ....................................................................................... 117
5.2. Mt s i tng c bn trong Excel .............................................................................. 119
5.2.1. i tng Application............................................................................................. 119
5.2.2. i tng Workbook .............................................................................................. 123
5.2.3. i tng Window.................................................................................................. 126
5.2.4. i tng Worksheet .............................................................................................. 128
5.2.5. i tng Range ..................................................................................................... 131
5.2.6. Tp i tng Cells ................................................................................................. 135
6.SkincaccitngtrongExcel............................................................................... 137
6.1. To b x l s kin cho mt s kin ............................................................................. 138
6.2. S kin trong Workbook ................................................................................................. 139
6.3. S kin trong Worksheet ................................................................................................. 141
6.4. S kin trong UserForm .................................................................................................. 143
6.5. S kin khng gn vi i tng .................................................................................... 144
7.CcthaotccbntrongExcel .......................................................................................... 145
7.1. iu khin Excel ............................................................................................................. 146
7.1.1. Thot khi Excel ..................................................................................................... 146
7.1.2. Kho tng tc ngi dng..................................................................................... 147
7.1.3. Thao tc vi ca s ................................................................................................. 147
7.1.4. Khi ng Excel t chng trnh khc ................................................................... 148
7.2. Lm vic vi Workbook.................................................................................................. 150
7.2.1. To mi, m, lu v ng workbook ...................................................................... 150
7.3. Lm vic vi Worksheet ................................................................................................. 151
7.3.1. To mi, xo v i tn worksheet ......................................................................... 151
7.4. Lm vic vi Range v Cells........................................................................................... 152
7.4.1. Duyt qua tng trong vng d liu....................................................................... 152
7.4.2. Duyt qua tng trong vng d liu theo hng v ct ........................................... 152
7.4.3. Vng c cha d liu Thuc tnh UsedRange...................................................... 153
7.5. Lm vic vi biu ....................................................................................................... 153
7.5.1. To mi biu ...................................................................................................... 154
7.5.2. Thm mt chui s liu vo biu c.............................................................. 155
7.6. S dng cc hm c sn trong Excel............................................................................... 157

iii
8.Giaodinngidng.......................................................................................................... 157
8.1. iu khin nhng trong Worksheet .................................................................................157
8.1.1. iu khin Spin Button............................................................................................158
8.1.2. iu khin ComboBox ............................................................................................159
8.1.3. iu khin Command Button ..................................................................................160
8.2. Cc hp thoi thng dng ................................................................................................161
8.2.1. Hp thoi InputBox ca Excel Hm InputBox .....................................................161
8.2.2. Hp thoi Open Hm GetOpenFilename ..............................................................163
8.2.3. Hp thoi Save As Hm GetSaveAsFilename ......................................................165
8.2.4. Hp thoi chn th mc i tng FileDialog ....................................................166
8.2.5. Cc hp thoi mc nh trong Excel Tp i tng Dialogs ................................166
8.2.6. Thc thi mc trnh n Excel t VBA.....................................................................168
8.3. Hp thoi tu bin UserForm........................................................................................169
8.3.1. To mi UserForm...................................................................................................169
8.3.2. Hin th UserForm ...................................................................................................170
8.3.3. Cc iu khin trn UserForm .................................................................................171
8.4. Thao tc trn thanh trnh n ...........................................................................................172
8.4.1. Cu trc ca h thng thanh trnh n .....................................................................173
8.4.2. To trnh n tu bin..............................................................................................174
8.4.3. Xo trnh n tu bin .............................................................................................177
8.4.4. Gn phm tt cho Menu Item ...................................................................................178
CHNG V: LP TRNH TRN AUTOCAD....................................................... 181
1.TngquanvAutoCAD ..................................................................................................... 181
1.1. Kh nng ca AutoCAD ..................................................................................................181
1.2. Giao din ca AutoCAD ..................................................................................................182
1.3. Kh nng m rng ca AutoCAD....................................................................................183
2.QunldnVBAtrongAutoCAD ................................................................................ 184
2.1. D n VBA trong AutoCAD............................................................................................184
2.2. Trnh qun l d n VBA.................................................................................................185
2.2.1. To mi, M v Lu d n VBA.............................................................................186
2.2.2. Nhng v tch d n VBA .......................................................................................187
2.3. Qun l d n VBA t dng lnh ....................................................................................188
3.Macro ..................................................................................................................................... 188
3.1. Khi nim Macro trong AutoCAD...................................................................................188
3.2. To mi v Hiu chnh Macro .........................................................................................189
3.3. Thc thi Macro.................................................................................................................190
3.4. nh ngha lnh mi bng AutoLISP...............................................................................191
3.4.1. To d n mi ..........................................................................................................191
3.4.2. To v th nghim Macro HelloWorld....................................................................192
3.4.3. To lnh mi bng AutoLISP ..................................................................................193
4.HthngitngtrongAutoCAD ................................................................................ 193
4.1. M hnh i tng trong AutoCAD.................................................................................193
4.2. Mt s i tng chnh trong AutoCAD .........................................................................195
4.2.1. i tng Application .............................................................................................195
4.2.2. i tng Document................................................................................................196
4.2.3. Tp i tng...........................................................................................................198
4.2.4. i tng phi hnh hc ............................................................................................198
4.2.5. i tng hnh hc ..................................................................................................199
5.CcthaotccbntrongAutoCAD ................................................................................. 200
5.1. iu khin AutoCAD.......................................................................................................200
5.1.1. To mi, M, Lu v ng bn v..........................................................................200
5.1.2. Khi ng v thot khi chng trnh AutoCAD....................................................203
5.1.3. S dng cc lnh sn c ca AutoCAD ...................................................................205
5.1.4. Thu phng mn hnh bn v (zoom) ........................................................................205
5.1.5. Nhp d liu ngi dng t dng lnh ca AutoCAD ............................................207

iv
5.1.6. Thit lp bin h thng............................................................................................ 214
5.2. To mi i tng hnh hc ............................................................................................ 217
5.2.1. Xc nh ni cha i tng ................................................................................... 217
5.2.2. Khai bo v to i tng hnh hc ........................................................................ 218
5.2.3. To i tng Point................................................................................................. 219
5.2.4. To i tng dng ng thng ............................................................................ 220
5.2.5. To i tng dng ng cong ............................................................................. 223
5.2.6. To i tng vn bn............................................................................................. 225
5.3. Lm vic vi i tng SelectionSet .............................................................................. 227
5.3.1. Khai bo v khi to i tng SelectionSet .......................................................... 228
5.3.2. Thm i tng hnh hc vo mt SelectionSet ..................................................... 228
5.3.3. Thao tc vi cc i tng trong SelectionSet........................................................ 234
5.3.4. nh ngha b lc i tng cho SelectionSet ........................................................ 234
5.3.5. Loi b i tng hnh hc ra khi SelectionSet .................................................... 236
5.4. Hiu chnh i tng hnh hc ........................................................................................ 237
5.4.1. Hiu chnh i tng s dng cc phng thc ..................................................... 238
5.4.2. Hiu chnh i tng s dng cc thuc tnh.......................................................... 245
5.4.3. Hiu chnh ng a tuyn ..................................................................................... 249
5.4.4. Hiu chnh vn bn n........................................................................................... 251
5.5. Lm vic vi lp (Layer)................................................................................................. 253
5.5.1. To lp mi ............................................................................................................. 254
5.5.2. Truy xut v thay i tn mt lp c.................................................................. 255
5.5.3. Thit lp lp hin hnh............................................................................................ 255
5.5.4. Thit lp cc ch hin th ca lp....................................................................... 255
5.5.5. Xo lp .................................................................................................................... 257
5.6. Thao tc vi kiu ng Linetype................................................................................ 257
5.6.1. Ti kiu ng vo AutoCAD ................................................................................ 257
5.6.2. Truy xut v i tn kiu ng ............................................................................. 258
5.6.3. Thit lp kiu ng hin hnh............................................................................... 259
5.6.4. Xo kiu ng c.............................................................................................. 259
5.7. Thao tc vi ng kch thc Dimension .................................................................. 259
5.7.1. Kiu ng kch thc DimensionStyle .............................................................. 260
5.7.2. To ng kch thc ............................................................................................. 262
5.7.3. nh dng ng kch thc................................................................................... 267
5.8. Thao tc vi d liu m rng XData............................................................................ 268
5.8.1. Gn d liu m rng ............................................................................................... 268
5.8.2. c d liu m rng ............................................................................................... 269
6.Giaodinngidng .......................................................................................................... 270
6.1. Thao tc vi thanh trnh n ........................................................................................... 270
6.1.1. Cu trc ca h thng thanh trnh n .................................................................... 270
6.1.2. To trnh n ........................................................................................................... 272
6.1.3. Xo thanh trnh n................................................................................................. 274

PHN III: TI LIU THAM KHO...................................................... 276

v
MU

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

trong khi , nu nh cng cc bn v ny c lu tr trong my tnh, ngoi vic cho


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

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

2
MU

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

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


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

3
GIOTRNHTNGHOTHITKCUNG

Hnh I-3: AutoCAD v Excel

Nhm cc phn mm chuyn dng: l cc phn mm ch dng c cho mt mc ch c


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

1
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.
4
MU

trin 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 I-4: Tm kim thng tin trn Internet vi Google.com

S dng phin bn dng th min ph ca phn mm t kim chng.


5
GIOTRNHTNGHOTHITKCUNG

m phn vi nh cung cp phn mm tm ra mt gii php hp l nht trc khi


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

Hnh I-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)

6
MU

Hnh I-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.
7
GIOTRNHTNGHOTHITKCUNG

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

8
MU

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

9
GIOTRNHTNGHOTHITKCUNG

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

10
MU

Hnh I-10: M rng kh nng cho AutoCAD dng ObjectARX

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

11
GIOTRNHTNGHOTHITKCUNG

PHN II: LP TRNH TRN NG DNG NN

CHNG I: KHI NIM


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

12
CHNGI:KHINIM

Hnh I-1: Lp bng tnh kt cu mt ng trn Excel

Hnh I-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
13
GIOTRNHTNGHOTHITKCUNG

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

14
CHNGI:KHINIM

Hnh I-4: 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 I-5: 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.

15
GIOTRNHTNGHOTHITKCUNG

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

16
CHNGI:KHINIM

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.

17
GIOTRNHTNGHOTHITKCUNG

18
CHNGII:TNGQUANVVBA

CHNG II: TNG QUAN V VBA


1. c im ca VBA
T cc c im c bn c phn tch cui chng 1 ta c th thy rng VBA l mt
cng c lp trnh cho php pht trin nhanh phn mm v c tch hp vo trong ng dng
nn. V thc cht, VBA c xy dng da trn kin trc COM1, cho nn ngi dng c th
s dng cc thnh phn sn c ca ng dng nn trong vic xy dng chng trnh ca mnh
vi VBA.
Mt d n c xy dng bng VBA da trn ng dng nn no th n ph thuc cht ch vo
ng dng nn , bi theo mc nh, d n VBA s hot ng v s dng cc thnh phn trong
chnh ng dng nn . iu ny c ngha l ta rt kh c th chuyn i mt d n VBA t
loi ng dng nn ny sang mt ng dng nn khc cng nh to ra mt ng dng chy c
lp.
S khc bit c bn nht ca VBA trong cc ng dng nn (v d gia VBA trong AutoCAD
v VBA trong Excel) l cch thc s dng cc thnh phn (i tng) ca ng dng nn. Cho
nn khi xy dng ng dng bng VBA, vic u tin l phi tm hiu m hnh i tng ca
ng dng nn v cch s dng chng.
Nh trong chng trc trnh by, xy dng mt d n VBA, mt cch tng qut, ngi
dng cn nm vng hai phn:
Ngn ng lp trnh Visual Basic v giao din lp trnh VBA IDE. Phn ny s bao gm
cc ni dung kin thc trong chng 2 v 3.
M hnh i tng ca ng dng nn v cch s dng chng. Ni dung kin thc ca
phn ny s c trnh by trong chng 4 v 5.
2. Trnh t xy dng mt d n bng VBA
V mt trnh t thc hin, vic xy dng mt d n VBA bao gm cc bc sau:
1. Xc nh r nhu cu xy dng chng trnh. Nhu cu ny c xc nh da trn hot
ng thc t ca ngi dng v thng do chnh ngi dng xut. y l bc xc nh
cc chc nng ca chng trnh.
2. Xc nh r mc tiu m chng trnh cn t c. Bc ny l phn c th ha ca bc
1, v d nh bc 1 c nhu cu hon thin bn v kt cu BTCT, cn bc ny s c th
mc hon thin (n u v nh th no).
3. La chn ng dng nn v cng c lp trnh ph hp cho vic xy dng chng trnh. V
d vi nhu yu cu tnh v to bn v ca cu kin BTCT, th ng dng nn thch hp l
AutoCAD v cng c lp trnh c th l AutoLISP, VBA, ObjectARX. Ty theo mc
phc tp ca bi ton m ta la chn cng c lp trnh ph hp. y VBA m bo s
thun tin trong vic xy dng cc m-un tnh ton v to bn v i vi nhng bi ton
thng thng.
4. Thit k h thng cho chng trnh (hay d n): bao gm vic lp s khi, xc nh cc
m-un ca chng trnh, thit k giao din nhp xut d liu v kt qu, xy dng h
thng c s d liu sao cho tha mn nhng xut bc 1 v 2.

1
COM (Component Object Model): l mt kin trc lp trnh c thit k bi Microsoft. Mc ch ca cng
ngh ny l to ra mt chun cng ngh trong lp trnh, m cho php xy dng chng trnh theo m hnh lp
ghp hay s dng li cc sn phm c hon thin t trc theo chun COM.
19
GIOTRNHTNGHOTHITKCUNG

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, v tng qut, 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.

20
CHNGII:TNGQUANVVBA

Hnh II-1: Cu trc ca d n th hin trn VBA IDE

Tuy nhin, khi xy dng chng trnh (vit m lnh) c th th khi nim cu trc ca mt
chng trnh l s b tr, sp xp cc cu lnh trong chng trnh . Nh vy khi nim cu
trc ny ph thuc vo tng loi ngn ng lp trnh. i vi ngn ng lp trnh Visual Basic
(VB), cu trc ca n ch tp trung vo chng trnh con (hm v th tc) ch khng c mt
quy nh v cu trc no i vi chng trnh chnh. Chi tit ca cu trc ca chng trnh con
s c cp n trong cc phn sau.
4. Mi trng pht trin tch hp VBA IDE
Trong mi cng c lp trnh trn ng dng nn, lun c mt mi trng lp trnh nhm h tr
ngi dng c th xy dng, th nghim v hon thin chng trnh ca mnh. Trong
AutoCAD v Excel, khi s dng VBA lp trnh, mi trng lp trnh c gi l Mi
trng pht trin tch hp (vit tt l VBA IDE). Trn tt c cc ng dng nn, VBA IDE c
cu trc v hot ng tng ng nhau vi giao din c bn v cch gi giao din VBA IDE
t ng dng nn nh sau:
Phm tt: t giao din chnh ca ng dng nn, nhn t hp phm Alt+F11.
Menu: Tools Macro Visual Basic Editor.

21
GIOTRNHTNGHOTHITKCUNG

Hnh II-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.
GI 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.

22
CHNGII:TNGQUANVVBA

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 UserForm thm mt hp thoi ngi dng vo
trong d n.
3. Chn tip menu Insert Module thm mt m-un chun vo trong d n.

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

23
GIOTRNHTNGHOTHITKCUNG

Public Sub FirstPro()


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

Sau quay tr li Excel, v chy chng trnh theo trnh t:


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

Hp thoi Macro

Kt qu trn Excel

24
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

CHNG III: C BN V NGN NG LP TRNH


VISUAL BASIC
Trong chng ny s trnh by nhng kin thc c bn trong ngn ng lp trnh Visual Basic
(VB) nh: c php, cc t kho, cc kiu d liu, cc khai bo, Tt c cc v d s c vit
v trnh by kt qu trong VBA IDE.
1. Nhng qui nh v c php
C php c hiu l mt mt tp hp bao gm cc quy tc, lut l v trt t v hnh thc vit
ca mt cu lnh hay mt cu trc lnh.
Trong ngn ng lp trnh Visual Basic (VB), cng nh cc ngn ng lp trnh khc, u c
nhng quy nh v c php cho vic vit m lnh v ngi lp trnh cn phi tun theo cc quy
tc ny trnh bin dch c th dch m lnh m khng pht sinh li. Sau y l cc quy nh
c bn v c php ca VB:
Cc cu lnh phi l cc dng ring bit. Nu c nhiu lnh trn cng mt dng th gia
cc lnh ngn cch nhau bng du hai chm (:). Nu dng lnh qu di, mun ngt lnh
thnh hai dng th s dng du cch v du gch di ( _ ).
Nu mun chn thm ghi ch, phi bt u dng ch thch bng du nhy n ().
Qui c khi t tn: phi bt u bng k t kiu ch ci thng thng; khng cha du
chm, du cch hay cc k t c bit khc; khng qu 255 k t; khng trng vi cc t
kho; cc bin c cng mt phm vi th khng c t tn trng nhau.
2. Cc tr gip v c php trong qu trnh vit m lnh
Cc quy tc v c php thng kh nh i vi nhng ngi mi hc lp trnh hay mi s
dng ngn ng lp trnh mi, cho nn, thun tin cho ngi lp trnh, VBA IDE cung cp
tnh nng t ng pht hin li c php trong qu trnh vit m lnh. Tuy nhin vic kim tra t
ng ny c th gy kh chu cho nhng lp trnh vin chuyn nghip, nhng ngi rt him
khi mc li c php khi lp trnh, cho nn chc nng ny ch hot ng khi c kch hot,
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
GIOTRNHTNGHOTHITKCUNG

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 lnh


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

27
GIOTRNHTNGHOTHITKCUNG

As For Mid Print String


Binary Friend New Private Then
ByRef Get Next Property Time
ByVal Input Nothing Public To
Date Is Null Resume True
Else Len On Seek WithEvents
Empty Let Option Set
Error Lock Optional Static
False Me ParamArray Step

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

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 nguyn
Dng cha cc gi tr l s nguyn v c vi loi d liu kiu ny. S khc nhau ca nhng
loi d liu ny l gii hn gi tr (ln nht v nh nht) m bin c th nhn c (tham kho
bng di).
Kiu s Kch thc Phm vi
nguyn
Byte 1 byte 0 n 255
Integer 2 bytes -32,768 n 32,767
Long 4 bytes -2,147,483,648 n 2,147,483,647

5.3. Kiu s thc


Dng cha cc gi tr l s thc. Cc kiu s thc thng dng c trnh by trong bng
di y:
Kiu s K.thc Phm vi
thc
Single 4 byte T -3.402823E38 n -1.401298E-45
v t 1.401298E-45 n 3.402823E38
Double 8 bytes -1.79769313486231E308 n -4.94065645841247E-324
v t 4.94065645841247E-324 n 1.79769313486232E308
Currency 8 bytes 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
GIOTRNHTNGHOTHITKCUNG

Gn gi tr 100 cho phn t th 2


Matrix_1(1)=100
Gn gi tr 100 cho phn t cui cng
Matrix_1(10)=100

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


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

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


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

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


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

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

Sau dng cui cng ny, ton b gi tr ca mng A c (c A[1]=100 v A[2]=200) s b


xa b v tt c cc phn t mi ca mng A (9 phn t) s nhn gi tr mc nh (thng
c gn bng 0).
Gi tr c ca cc phn t mng s c gi li khi c hai iu kin sau tha mn:
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
GIOTRNHTNGHOTHITKCUNG

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

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 Ch thch
0-vbEmpty Khng c g trong variant

1-vbNull Khng c d liu hp l trong variant

2-vbInteger Variant cha Integer

4-vbSingle Variant cha Single

7-vbDate Variant cha Date/Time

8-vbString Variant cha String

9-vbObject Variant cha mt Object

11-vbBoolean 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 ngha Kiu gi tr
TrM S hiu trm t my Integer

STT Th t ca im o Integer

DT S c dy trn Double

DG S c dy gia Double

DD S c dy di Double

H Gc bng Double

V Gc ng Double

MT M t c im ca im o String

Vi mt chng trnh x l s liu o ton c, cch tt nht l qun l theo im o, v do


mi im o l mt bin c kiu d liu ph hp vi bng trn. chnh l kiu d liu t nh
ngha.
nh ngha kiu d liu cho im o ton c
Type DiemDo
TrM As Integer
STT As Integer
DT As Double
DG As Double
DD As Double
H As Double
V As Double
MT As String
End Type

33
GIOTRNHTNGHOTHITKCUNG

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

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

5.9. Kiu lp (Class)


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

34
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 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 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
End Sub
Public Sub Test2()
Dim a As Double, c As Double
Test1
c = a + b
Debug.Print "a = "; a;
Debug.Print "b = "; b;

35
GIOTRNHTNGHOTHITKCUNG

Debug.Print "c = "; c;


End Sub

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 m-
un), 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:
Ton cc mc ng dng: Trong trng hp ng dng gm nhiu d n (multi-
projects), 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.

36
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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

37
GIOTRNHTNGHOTHITKCUNG

Hnh III-15: Phn General trong m-un

6.1. Khai bo hng s


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

ta lun c th s dng gi tr 3.14159 bt c ch no trong chng trnh vi ci tn d nh hn


l Pi.
C php:

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

Cc t kho Public hay Private xc nh phm vi hiu lc ca hng s, vi t kho


Public, hng s ny c th s dng bt c u trong ng dng, cn vi t kho Private th
hng s ny ch c th s dng bn trong m-un ni khai bo hng s . ngha ca hai t
kha ny cng khng thay i cho tt c cc phn khc m c s dng chng.
6.2. Khai bo bin
C php:

Dim <tn_bin> as <Kiu_d_liu>

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

Public <tn_bin> as <Kiu_d_liu>

Hay:

Private <tn_bin> as <Kiu_d_liu>

6.3. Khai bo kiu t nh ngha


Trong VB c th khai bo cc kiu d liu theo nhu cu ca ngi s dng. C php khai bo
nh sau:
38
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Type <Tn_ kiu>


<tn_trng_1> as <Kiu_d_liu>
<tn_trng_2> as <Kiu_d_liu>

<tn_trng_n> as <Kiu_d_liu>
End Type

Sau khi khai bo kiu t nh ngha, ngi dng c th s dng cc bin c kiu t nh ngha
bng cch khai bo nh cc bin thng thng, vi <Kiu_d_liu> c thay bng
<Tn_kiu>. truy cp ti mt trng ca bin kiu bn ghi, dng ton t (.) hoc dng cp
t kha With End With.

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 tnh


C php:

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

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


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

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


phn t vi ch s t 0 n 3)

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


4 v mt min c ch s t 0 n 6.

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 ng


C php:

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

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

39
GIOTRNHTNGHOTHITKCUNG

Redim <tn_mng> (<cc thng s v chiu>) as <tn kiu>

Ch rng <tn_kiu> phi ng nh khai bo ban u, cc thng s v chiu c th khc


trc c v s chiu v kch thc ca tng chiu. Khi , cc d liu c trong mng khng
cn na, thay vo l nhng phn t mi c khi to.
6.6. Khai bo, to v lm vic vi bin i tng
Khai bo v to bin i tng phi dng thm t kha New

Dim <tn_bin> as New <Kiu_d_liu>

<Kiu_d_liu> l lp (class) c nh ngha t trc.


Php gn i tng c thc hin vi t kha Set

Set <bin_i_tng> = <gi_tr>

Ch rng nu thc hin khai bo mt bin i tng nh thng thng (khng c t kha
New) th bin thc s cha c to ra. Trong trng hp , ngi s dng phi to v gn i
tng vi cc t kho tng ng l New v Set.

Dim <tn_bin> as <Kiu_d_liu>


Set <tn_bin> = New <Kiu_d_liu>

CH Cu lnh Set khng phi l cu lnh khai bo, v vy n phi c vit trong
mt chng trnh con no ch khng th nm trong phn General ca mt m-un.

Lm vic vi mt bin i tng tc l qu trnh thao tc vi i tng thng qua cc thuc


tnh, phng thc v cc s kin ca i tng . truy cp ti cc thuc tnh v phng
thc ca i tng ta s dng theo c php sau, ch n du chm ( . ) gia tn bin v tn
thuc tnh hay tn phng thc:

<Tn_bin>.<Tn_thuc_tnh>
<Tn_bin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>

7. Cc ton t v hm thng dng


7.1. Cc ton t
Ton t c s dng cho mc ch x l d liu. Ta s dng cc ton t thc hin tnh
ton, so snh, gn v thc hin nhiu thao tc khc. Di y l danh sch v ngha ca mt
s ton t thng dng:
Ton t M t
Ton t gn
= Gn gi tr cho bin hoc thuc tnh
Ton t ton hc
+ Cng

40
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

- Tr
* Nhn
/ Chia
\ Chia ly phn nguyn
Mod Chia ly phn d
^ Lu tha
Ton t logic
Not Tr v gi tr ph nh vi gi tr biu thc. Not(TRUE)=FALSE
And Ni logic hai biu thc. (TRUE And TRUE)=TRUE; cc trng hp khc cho kt qu
bng FALSE
Or (FALSE or FALSE)=FALSE; cc trng hp khc cho kt qu l TRUE
Xor Cho kt qu TRUE nu hai i s c cng gi tr; ngc li cho kt qu l FALSE
Eqv So snh hai gi tr logic; cch thc x l tng t nh ton t Xor
Ton t so snh
= So snh bng
<> Khc nhau
> Ln hn
>= Ln hn hoc bng
< Nh hn
<= Nh hn hoc bng

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 M t
Abs(x) Ly gi tr tuyt i
Exp(x) Ly m c s t nhin
Log(x) Logarit c s t nhin
Sqr(x) Ly bnh phng
Cos(x), Sin(x), Tan(x) Hm lng gic
Atn(x) Hm lng gic ngc
Fix(x) Ly phn nguyn (trc du phy). Fix(3.7)=3
Int(x) Ly phn nguyn c lm trn. Int(3.7)=4
Round(x,num) Lm trn s thc <x> n <num> ch s sau du phy
Val(str) Chuyn i chui <str> thnh gi tr kiu s

7.3. Cc hm chuyn i d liu


Chuyn i nh dng s liu l mt nhu cu thng gp trong lp trnh do cc ngn ng lp
trnh lun i hi kiu d liu phi r rng v c nh cho tng bin nhm trnh pht sinh cc
li sau ny. Vic chuyn i ny, nu trong trng hp thng thng , th VB s t ng thc

41
GIOTRNHTNGHOTHITKCUNG

hin. Nhng khi gp cc yu cu c bit th buc ngi dng phi s dng nhng hm chuyn
i ph hp.
CH Vic chuyn i kiu d liu lun c th to ra li do khng th chuyn i c
hoc pht sinh kt qu sai. Cho nn khi s dng cn ch n cc kh nng gy li ca
vic chuyn i kiu d liu.

Cc hm ny c cha trong th vin Conversion (c th tra cu th vin ny bng Object


Browser). Sau y l mt s hm thng dng:
Hm M t
CBool(Expression) Chuyn i d liu sang kiu logic (Boolean)
CByte(Expression) Chuyn i d liu sang kiu Byte
CInt(Expression) Chuyn i d liu sang kiu nguyn (Integer)
CLng(Expression) Chuyn i d liu sang kiu nguyn (Long)
CDbl(Expression) Chuyn i d liu sang kiu thc (Double)
CSng(Expression) Chuyn i d liu sang kiu thc (Single)
CStr(Expression) Chuyn i d liu sang kiu xu (String)
Str(Number) Chuyn i d liu s sang kiu xu (String)
Val(String As 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=Str(A) Kt qu StrA=4567
Debug.Print StrA
End Sub

GI c th chy th cc on m lnh trn, trong VBA IDE, trc ht cn to ra


mt m-un 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:

GI 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 ri
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.

42
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 M t
Asc(x) Tr v m ASCII ca k t u trong mt chui
Chr(x) Chuyn i t m ASCII sang mt k t
Left(String, Length as Long) Trch d liu bn tri ca mt chui
Mid(String, Start As Long, [Length]) Trch d liu phn gia ca mt chui
Right(String, Length As Long) Trch d liu phn bn phi ca mt chui
Split(String) Tch mt chui di thnh mt mng gm nhiu chui
nh hn
Joint(StringArray) Gp mt mng cc chui thnh mt chui duy nht
Len(String) Tr v di ca chui (s lng k t trong chui bao
gm c k t trng)
Ucase(String) Hm thc hin i tt c cc k t trong chui thnh
ch HOA.
InStr([start, ]string1, string2[, compare]) Tr v v tr bt u ca chui String2 trong chui
String1.

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

Kt qu s nh sau:

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


CH Trong tt c cc ngn ng lp trnh, khi nim chui s v s l khc nhau. V d
khi gn A=123 th gi tr ca A l mt chui k t gm 1, 2 v 3. Cn khi gn
B=123 th gi tr ca B l mt trm hai mi ba.
to ra mt chui c cha du nhy kp () bn trong n th cn s dng thm hai du
nhy kp na. V d, trong biu thc sau: s = ABC 123 th gi tr ca bin s l:
ABC123

43
GIOTRNHTNGHOTHITKCUNG

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:

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:

GI 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

44
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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

45
GIOTRNHTNGHOTHITKCUNG

Ta xt v d trn:
Nu TheColorYouLike = vbRed th s ch c thng bo: You 're a lucky person.
Nu TheColorYouLike = vbBlue th s ch c thng bo: You 're a brave person.
Nu TheColorYouLike khng thuc bt c gi tr no trong bng mu: vbRed,
vbGreen, vbBlue, vbMagenta th s ch c thng bo: You 're an average person.
8.2. Cu trc la chn
Cu trc ny s dng khi ta mun thc hin mt s lnh no y tng ng vi tng gi tr ca
biu thc kim tra.
Cc t kho s dng trong cu trc ny: Select Case, Case, Case Else, End Select.
C php ca cu trc la chn:

Select Case <biu_thc_kim_tra>


[Case iu_kin_1
[khi_lnh_1]]
...
[Case iu_kin_n
[khi_lnh_n]]
[Case Else
[khi_lnh_else]]
End Select

Din gii tin trnh ca cu trc la chn nh sau: Gi tr ca <biu_thc_kim_tra> s


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

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:

46
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

8.3. Vng lp xc nh
8.3.1. Vng lp theo bin m
Thc hin lp mt khi lnh theo mt bin m vi s ln lp xc nh, v d nh khi ta cn
tnh tng ca cc s nm gia hai s no .
Cc t kha: For, to, Step, Next
C php:

For <bin_m>=<Bt_u> To <Kt_Thc> [Step <bc_nhy>]


[Khi_lnh]
Next [<bin_m>]

Cu trc lp ny thc hin theo trnh t sau:


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

Kt qu nh sau:

47
GIOTRNHTNGHOTHITKCUNG

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


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

Kt qu nh sau:

CH Khi gi tr ca <bc_nhy> l m (<0) th cu trc lp s thc hin trnh t


m ngc, ngha l vai tr ca gi tr <bt_u> v <kt_thc> i ch cho nhau.

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


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

Kt qu nh sau:

GI 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

48
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Tong = Tong + i
If Tong > 20 Then Exit For
Next
Debug.Print ("Tong = " & Tong)

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

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

For Each <bin_chy> In <tp_hp>


[Khi_lnh]
Next

Gii thch: <bin_chy> s nhn cc gi tr t phn t u tin n phn t cui cng trong
<tp_hp>. ng vi mi gi tr ca <bin_chy>, khi lnh c thc hin mt ln.

CH Kiu ca <bin_chy> trong vng lp (For Each Next) s ph thuc vo kiu


ca <tp_hp> m n duyt qua l kiu mng hay kiu tp i tng. i vi
<tp_hp> l tp i tng th kiu d liu ca <bin_chy> c th l Variant,
hoc i tng cng kiu vi tp i tng . i vi <tp_hp> l mng th kiu d
liu ca <bin_chy> ch c th l Variant.

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

49
GIOTRNHTNGHOTHITKCUNG

Kt qu nh sau:

8.4. Vng lp khng xc nh


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

Do While <iu_kin>
[Khi_lnh]
Loop

Vi c php ny, [Khi_lnh] ch c thc hin khi <iu_kin> l ng.


V d sau s m s ch s chn trong khong hai s A, B:
Dim i, A, B, SoChan As Integer
A = 1: B = 10
i = A
SoChan = 0
Do While i <= B
If (i Mod 2) = 0 Then SoChan = SoChan + 1
i = i + 1
Loop
Debug.Print ("So chu so chan = " & SoChan)

Kt qu nh sau:

Nu mun vng lp lun c t nht mt ln thi hnh khi lnh, s dng c php:

Do
[Khi_lnh]
Loop While <iu kin>

50
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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>

CH 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 tnh hung treo ny
c nhiu cch v cch n gin nht l bm t hp phm Ctrl+Break quay tr li
VBAIDE.
C cch khc thot khi vng lp, ngoi vic thit lp <iu_kin> c gi tr ngc
li, l s dng t kha Exit Do t trong [Khi_lnh].

9. Chng trnh con


V c bn, chng trnh con l mt khi cc cu lnh v chng c s dng lp li trong
chng trnh chnh thng qua tn ca chng trnh con. Chng trnh con c bit hu ch khi
thay th cc khi lnh lp nhau hoc cng thc thi mt chc nng tng t no .
C hai loi chng trnh con chnh l Hm (Function) v Th tc (Sub). Ngoi ra, trong cc
m-un lp (Class Module) cn c chng trnh con dng thuc tnh (Property), tuy nhin
trong gio trnh ny s khng trnh by v loi chng trnh con ny m ngi c c th tham
kho trong gio trnh mn Lp trnh hng i tng trong xy dng.
C php tng qut ca mt chng trnh con nh sau:
C php tng qut ca mt chng trnh con nh sau:

[Private|Friend|Public][Static]<Sub|Function|Property>
Tn([cc_tham_s])
[Khi_lnh]
End <Sub|Function|Property>

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

CH T kha Friend ch c s dng trong m-un lp hoc m-un lnh ca


UserForm.

51
GIOTRNHTNGHOTHITKCUNG

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

CH Trong v d ny, v chng trnh con khng c gi tr tr v nn nhn v gi tr


din tch phi b sung thm tham s Dt vo trong danh sch tham s ca chng trnh
con.

9.3. Truyn tham s cho chng trnh con


Xt 2 chng trnh con c t trong cng mt m-un chun, thc hin vic gn v in gi tr
ca bin nh sau:
Mt chng trnh con n gin c to ra nh sau:
Public Sub Test(ByRef a As Long, b As Long, ByVal c As Long)
a = 100: b = 200: c = 300
End Sub

Ch n khai bo bin a, b v c ca chng trnh con ny:


Trc bin a l t kha ByRef.
Trc bin b khng c t kha, ngha l s dng kiu mc nh ca VB.
Trc bin c l t kha ByVal.
Chng trnh con th hai c xy dng trn cng mt m-un vi chng trnh con trn
nh sau:
52
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Public Sub CallTest()


Dim va As Long, vb As Long, vc As Long
va = 500: vb = 500: vc = 500
' In gi tr ca bin trc khi gi chng trnh con th nht
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)
' Gi chng trnh con th nht
Test va, vb, vc
' In gi tr ca bin sau khi gi chng trnh con th nht
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 th 2 c li gi n chng trnh con th nht thc hin thay i
gi tr ca cc bin. Kt qu khi thc thi chng trnh con th 2 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

53
GIOTRNHTNGHOTHITKCUNG

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.

Di y l mt chng trnh con c s dng tham s tu chn:


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

Sau khi to m lnh trn, nu mun tnh din tch cho mt ct vi w =100, h =200, r =20 c th
gi hm nh sau: DT(100,200,20) tnh din tch c xt n khot l vi bn knh l 20,
hoc DT(100,200) tnh din ca hnh ch nht (khng c l).

54
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

CH bit c mt tham s tu chn c b b qua khi gi chng trnh con hay


khng, dng hm IsMissing(tham_s_tu_chn) v ng thi tham s tu chn
bt buc phi c kiu d liu l Variant (v hm IsMissing ch c hiu lc i vi cc
bin kiu Variant). Hm ny tr v TRUE nu tham s b b qua, FALSE nu tham s c
mt.

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


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

Khi :
TinhTong(100,200,-200) cho kt qu l 100
TinhTong(2,300) cho kt qu l 302
9.3.5. Hm c gi tr tr v l kiu mng.
khai bo mt hm tr v mng, thm cp k t ( ) sau khai bo hm

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


<kiu_d_liu> ()
[Khi_lnh]
End Function

V d: vit chng trnh con sp xp cc phn t trong mng mt chiu v tr v mt mng c


th t tng dn.
M lnh tham kho nh sau:
Public Function Mang_tangdan(Mang_bandau() As Double) As Double()
Dim Lb As Long, Ub As Long ' bien dau va cuoi cua mang
Dim i As Long, j As Long
Lb = LBound(Mang_bandau): Ub = UBound(Mang_bandau)
Dim Mang_tamthoi() As Double Khai bao mot mang tam thoi
Mang_tamthoi = Mang_bandau
Dim Tg As Double
For i = Lb To Ub - 1
For j = i + 1 To Ub
If Mang_tamthoi(i) > Mang_tamthoi(j) Then
Tg = Mang_tamthoi(i)
Mang_tamthoi(i) = Mang_tamthoi(j)

55
GIOTRNHTNGHOTHITKCUNG

Mang_tamthoi(j) = Tg
End If
Next
Next
Mang_tangdan = Mang_tamthoi
Erase Mang_tamthoi ' Huy mang tam thoi
End Function

Chng trnh th nghim hm trn:


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

Kt qu nh sau:

9.4. Bin trong chng trnh con


Nh trnh by phn trc, bin trong chng trnh con 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

56
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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

57
GIOTRNHTNGHOTHITKCUNG

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.

<Tn_m-un>.<Tn_hm>(<danh_sch_tham_s>)

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

<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

58
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

php gi chng trnh con vi trt t tham s tu m vn m bo s truyn tham s chnh


xc thng qua tn ca tham s.
V d, vi hm DT(w,h,r) phn trn th hai cch gi sau l tng ng:
DT (100,200,30)
DT (r:=30, w:=100, h:=200)

Trong dng th nht, lun c s ngm hiu trnh t cc tham s l: w,h,r, y chnh l trnh t
khi nh ngha hm DT. Cn dng th 2, trnh t theo nh ngha ca hm DT khng c
ngha na bi c s ch r: Tn bin := Gi tr cn gn. Ch n k hiu ( := ) v
trnh t bt k ca cc tham s.
Vic s dng tham s gn theo tn khi gi chng trnh con c bit tin li khi chng trnh
con c nhiu tham s tu chn v ngi dng khng c nh s dng ht cc tham s .
9.6. Thot khi chng trnh con.
thot khi hm s dng lnh Exit Function
thot khi th tc s dng lnh Exit Sub
Ngay khi gp hai hm ny trong thn ca chng trnh con, ton b cc dng lnh pha sau n
s b b qua v chng trnh s thot ngay khi chng trnh con .
10. T chc cc chng trnh con theo h thng cc m-un
chun
Vi 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 m-
un v cc chng trnh con theo hnh v di y di y

Hinh_Hoc Tinh_Duyet
(Module) (Module)

TinhDTHH_MCatBT LapTH_TaiTrong

TinhDTHH_MCatCT TTGH_CuongDo

TinhDTHH_TinhDoi TTGH_SuDung

59
GIOTRNHTNGHOTHITKCUNG

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

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


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

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

61
GIOTRNHTNGHOTHITKCUNG

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.

Hnh III-18: B tr cc iu khin trn UserForm.

62
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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
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
iu khin c to bng cch ko/th vo UserForm
la chn trn
Control Toolbox

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
.

63
GIOTRNHTNGHOTHITKCUNG

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

64
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Thuc tnh Gii thch


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 Gi tr kiu Long th hin mu nn ca UserForm hay iu khin.
Caption Gi tr kiu String th hin tiu ca UserForm hay iu khin.
Enable 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 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 Gi tr kiu String th hin ch thch v iu khin khi chut di chuyn qua
(Tooltip) 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.

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.

65
GIOTRNHTNGHOTHITKCUNG

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

GI Tn_iu_khin hay Tn_UserForm y chnh l gi tr thuc tnh Name ca


iu khin c t khi thit k. Khi vit m lnh trong mt UserForm th c th thay
vic dng tn ca UserForm bng t kho Me.

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


m lnh nh sau:
UserForm1.Caption = Cua so chinh

11.1.3. Cc phng thc ca UserForm v cc thnh phn iu khin.


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

<Tn_iu_khin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>
<Tn_UserForm>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>

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


sau:
UserForm1.Show

Trong phm vi ca gio trnh, khng th lit k tt c cc phng thc ca cc iu khin.


Trong phn sau s trnh by mt s cc phng thc c bn ca mt s loi iu khin thng
dng. bit chi tit v nhng phng thc khc, c th tra cu trong Object Browser hoc
trong Help 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.

66
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 kin Gii thch
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 ngang qua mt iu khin hoc trn UserForm
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.

67
GIOTRNHTNGHOTHITKCUNG

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

GI Trong on m trn, vbBlack l hng s tng ng vi mu en, vbWhite l hng


s tng ng vi mu trng. Hai hng s ny c nh ngha sn trong VB.

11.2. Lm vic vi UserForm


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

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

68
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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

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

2. Chn vo UserForm va to, chn biu tng trong hp cng c iu khin (Control
Toolbox). Sau , r th chut trn UserForm to mt hp vn bn (TextBox).

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

Sau , chn UserForm v nhn phm F5 chy chng trnh. Nhp mt dng vn bn vo
trong hp vn bn. Kch chut vo nt Undo, sau l nt Redo v theo di kt qu.
11.3. Cc iu khin thng dng
Theo mc nh, trn Toolbox c sn mt s iu khin thng dng trong th Control, nhng
iu khin ny p ng c hu ht nhu cu thit k giao din thng thng trn UserForm.
69
GIOTRNHTNGHOTHITKCUNG

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

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 tnh M t Ghi ch
Text Ni dung vn bn cha trong iu khin. Kiu String
TextAlign Cch thc hin th vn bn trong iu khin Tham kho Object Browser
MaxLength Qui nh di ti a ca vn bn trong iu khin Kiu Long
(Nu t MaxLength=0, di ca vn bn l tu )

70
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

MultiLine Hin th nhiu dng hay mt dng Kiu Boolean


ScrollBars Hin th thanh cun ngang hay dc nu ni dung Tham kho Object Browser
vn bn ln hn kch thc ca iu khin

Cc phng thc h tr vic nhp vn bn vo TextBox


Phng thc M t Ghi ch
Copy Chp ni dung c nh du trong iu khin vo b nh Tham kho
m trong
Object
Cut Di chuyn ni dung c nh du trong iu khin vo b
Browser
nh m
hoc Help
Paste Chp ni dung t b nh m vo iu khin

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.

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:
71
GIOTRNHTNGHOTHITKCUNG

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
Dim tong As Double
tong = 0
Dim buocnhay As Long ' buoc nhay cua bien chay
If chkChonsochan.Value Then xet lua chon chi tinh tong so chan
buocnhay = 2
Else
buocnhay = 1
End If
For i = 0 To so Step buocnhay
tong = tong + i
Next
lblKetqua.Caption = "Ket qua: " & Str(tong) hien thi ket qua
End Sub

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.

72
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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

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 tnh M t Ghi ch
List Tr v danh sch cc gi tr trong iu khin Tham kho Object Browser
ListCount Tr v s lng cc gi tr trong danh sch Kiu Long
ListIndex Tr v ch s ca gi tr c chn trong danh sch Kiu Variant
Text Tr v ni dung ca gi tr c chn Kiu String
Selected(i) Kim tra xem phn gi tr i c c chn hay khng. Kiu Boolean

Phng thc:
Phng thc M t Ghi ch
AddItem Thm mt gi tr vo trong danh sch Tham kho trong Object Browser
hoc Help
RemoveItem Xo mt gi tr khi danh sch
Clear Xo ton b danh sch

V d: to UserForm vi ListBox nh hnh di:

73
GIOTRNHTNGHOTHITKCUNG

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

GI Phng thc AddItem c hai tham s u l tham s tu chn: tham s th nht


l ni dung ca phn t, tham s th hai l v tr chn phn t trong danh sch.

Kt qu chy chng trnh nh sau:

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

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

74
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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.

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

75
GIOTRNHTNGHOTHITKCUNG

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.

12. Cc hp thoi thng dng


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

MsgBox Prompt, [Buttons], [Title]

76
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Dng hm

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

(Gi tr tr v ca hm c kiu VbMsgBoxResult tham kho trong Object Browser)


Tham s M t
Prompt Kiu String. Ni dung dng nhc trong MsgBox.
Buttons Kiu VbMsgBoxStyle (tham kho trong Object Browser). Kiu hin th biu tng v
nt lnh trong MsgBox.
Title 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"

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 s M t
Prompt Kiu String. Ni dung dng nhc.
Title Kiu String. Ni dung tiu .
Default Kiu Variant. Gi tr mc nh hin th trong InputBox.
XPos, YPos 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"))

77
GIOTRNHTNGHOTHITKCUNG

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.
a iu khin ny vo trong hp cng c iu khin (Control Toolbox) chn menu Tools
Additional Controls, sau chn Microsoft Common Dialog Control.

Cc thuc tnh ca iu khin Common Dialog.


Thuc tnh M t Ghi ch
DialogTitle Tiu ca hp thoi Kiu String
FileName Tr v ng dn v tn ca file c chn - Hp thoi Open, Kiu String
Save.
FileTitle Tr v tn ca file c chn (khng cha ng dn) - Hp Kiu String
thoi Open, Save.
Filter M t cc kiu file s c hin th trong hp thoi - Hp thoi Kiu String
Open, Save.

78
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

FilterIndex Kiu file mc nh s c hin th trong hp thoi - Hp thoi Kiu Integer


Open, Save.
DefaultExt Phn m rng mc nh c gn trong hp thoi (khi ngi Kiu String
dng khng chn m nhp text vo trong phn tn file) - hp
thoi Open, Save.
InitDir ng dn khi to trong hp thoi - Hp thoi Open, Save Kiu String
CancelError Qui nh c pht sinh li hay khng khi ngi dng chn nt Kiu Boolean
Cancel trong hp thoi.
Color Tr v mu c chn trong hp thoi Hp thoi Color Tham kho
Object Browser

Cc phng thc ca iu khin Common Dialog.


Phng thc M t Ghi ch
ShowOpen Hin th hp thoi m file (Open) Tham kho trong Object
Browser hoc Help
ShowSave Hin th hp thoi ghi file (Save)
ShowColor Hin th hp thoi chn mu (Color)
ShowFont Hin th hp thoi chn font ch (Font)
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: cmdColor
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 (*.*)|*.*"
With cmDlg
.DialogTitle = "Chon file"
.InitDir = "C:\Program Files" ' duong dan mac dinh

79
GIOTRNHTNGHOTHITKCUNG

.Filter = strFilter
.ShowOpen
strPath = .Filename ' lay ve ten day du cua file duoc chon
End With
lbPath.Caption = strPath
End Sub

M lnh vi th tc s kin Click ca cmdColor


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

13. Lp trnh x l tp tin


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

80
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 tin
Truy 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).

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:

81
GIOTRNHTNGHOTHITKCUNG

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:

Open <ng dn> For [Kiu thao tc] as <filenumber> [Len=Buffersize]

Trong :
<ng dn>: l mt gi tr kiu String dng xc nh ng dn ca tp tin (v tr
ca n trn a).
<Kiu thao tc>: 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 my 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 <ng dn>.
Append: ghi d liu vo cui tp tin c (ghi thm, ni vo nhng d liu c).
<filenumber>: 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 <filenumber> 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:

82
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

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 #<filenumber>, <strVar>

Cu lnh ny c d liu t dng hin ti ca tp tin c m (c ch s l <filenumber>)


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

83
GIOTRNHTNGHOTHITKCUNG

Input # <filenumber>, <danh sch cc bin>

Cu lnh ny c khi d liu t v tr hin ti ca con tr c d liu trong tp tin c ch s


<filenumber>. D liu c c s c gn vo cho <danh sch cc bin> (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 <danh sch cc bin>. 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
Open 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:

84
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Print # <filenumber>, [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()
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

85
GIOTRNHTNGHOTHITKCUNG

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:

13.2.4. ng tp tin
Sau khi thao tc c/ghi d liu ln tp tin ta cn phi ng chng li bng lnh Close theo c
php sau:

Close <filenumber>

CH Trong tt c cc v d c v ghi d liu trn u c lnh ng tp tin sau khi kt


thc cc thao tc c/ghi.

13.3. X l d liu trong tp tin theo m hnh FSO (File System Object)
Cc thao tc vi tp tin phn trn ch bao gm hai loi c bn nht l c d liu t tp tin v
ghi thng tin ln tp tin, cn nhng thao tc khc, thng xuyn c s dng, nh: la chn
tp tin, sao chp, di chuyn, xa, tuy c th thc hin c t nhng lnh c/ghi c bn
trn nhng kh rc ri. V vy, to thun li cho ngi dng, VB cung cp nhng chc
nng ny thng qua m hnh FSO. y l mt tp hp cc lp i tng, m nhim v ca
chng l cung cp cho ngi dng hu ht cc cng c thao tc vi tp tin.
Cc lp i tng theo m hnh FSO l mt dng b sung cho VBA v c cung cp di
dng th vin lp trnh vi tn gi Microsoft Scripting Runtime. s dng th vin ny
trong VBA IDE cn thc hin thao tc sau: trong VBAIDE chn trnh n Tools
References nh du chn Microsoft Scripting Runtime Chn OK

86
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Hnh III-25: S dng th vin lp trnh Microsoft Scripting Runtime.

CH Khi thao tc vi tp tin, m hnh FSO ch h tr cch thc truy cp tun t.

Cc lp (class) chnh trong m hnh FSO:


Tn lp M t Ghi ch
FileSystemObject i tng qun l trong m hnh FSO Tham kho trong
Object Browser hoc
Drive i tng a
Help.
Folder i tng th mc
File i tng tp tin
TextStream i tng lung d liu (dng text) phc v vic
thao tc vi d liu trong tp tin

Cc phng thc chnh ca lp FileSystemObject phc v cho thao tc tp tin


Tn phng thc M t Ghi ch
CopyFile Sao chp tp tin
DeleteFile Xo tp tin Tham kho Object Browser
MoveFile Di chuyn tp tin Tham kho Object Browser
FileExists Kim tra s lm vic ca tp tin Tr v gi tr Boolean
CreateTextFile To tp tin mi (dng text) Tr v i tng kiu TextStream
GetFile Nhn v mt tp tin c Tr v i tng kiu File
OpenTextFile M mt tp tin dng text lm vic Tr v i tng kiu TextStream

Cc phng thc ca lp TextStream


Tn phng M t Ghi ch
thc
Read c mt xu d liu trong tp tin Tr v d liu kiu String

87
GIOTRNHTNGHOTHITKCUNG

ReadLine c mt dng d liu trong tp tin Tr v d liu kiu String


ReadAll c ton b d liu trong tp tin Tr v d liu kiu String
Skip B qua mt xu d liu trong tp tin Tr v i tng kiu TextStream
SkipLine B qua mt dng d liu trong tp tin
Write Ghi mt xu d liu vo trong tp tin
WriteLine Ghi mt xu d liu thnh mt dng
trong tp tin
WriteBlankLines Chn mt dng trng vo trong tp tin
Close ng lung d liu.

TrnhtlmvicvidliucatptintheomhnhFSO
1. To i tng <FSO> thuc lp FileSystemObject nhm qun l tp tin, th mc hoc
a theo c php sau:
Dim FSO As New FileSystemObject

Hoc:
Set FSO = CreateObject("Scripting.FileSystemObject")

Trong : <FSO> l tn ca i tng (chnh l tn bin), m da vo n ta s thao tc vi tp


tin.
2. To i tng <TxtStr> thuc lp TextStream nhm phc v cho vic thao tc vi d
liu trong tp tin theo c php sau:
Dim TxtStr As New TextStream

3. Thao tc vi d liu vi i tng TxtStr.


4. ng lung d liu kt thc thao tc theo c php sau
TxtStr.Close

CH Hai cch khai bo bin i tng sau l tng ng nhau:


Dim FSO As New FileSystemObject
V:
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject

13.3.1. To tp tin mi
S dng phng thc CreateTextFile to tp tin mi v m sn n cho cc thao tc
c/ghi. C php nh sau:

Set TxtStr=FSO.CreateTextFile(FileName,[Overwrite],[Unicode])

Trong :

88
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

FileName: tn ca tp tin cn to, kiu String, phi bao gm y ng dn xc


nh v tr ca tp tin, nu ch c tn tp tin th tp tin ny s c to vo th mc mc
nh.
[Overwrite]: la chn c ghi hay khng trong trng hp tp tin c. Tham s ny
l tu chn v c kiu l Boolean, gi tr mc nh l True (cho php ghi ). Nu t
tham s ny l False v tp tin c th s pht sinh li v lm dng chng trnh.
[Unicode]: la chn c s dng bng m Unicode trong tp tin hay khng. Tham s
ny l tu chn v c kiu l Boolean, gi tr mc nh l False.
V d sau s to ra tp tin Test.txt trong a C, nu tp tin ny c, n s b ghi ln, ngha
l cc thng tin c s b xa ht:
Dim FSO As New FileSystemObject
Dim TxtStr As TextStream
Set TxtStr=FSO.CreateTextFile(C:\Test.txt,True,True)

13.3.2. M tp tin c thao tc


Khi mun lm vic vi mt tp tin c (c/ghi), s dng c php sau:

Set TxtStrObj=FSO.OpenTextFile(FileName,[IOMode],[Create],[Format])

Trong :
FileName: Tn v v tr ca tp tin (kiu String).
[IOMode]: Kiu thao tc vi tp tin. Tham s ny l tu chn, c th nhn mt trong 3
gi tr sau:
ForAppending (hoc 8): thm d liu vo cui tp tin c.
ForReading (hoc 1): c d liu t tp tin. y l gi tr mc nh ca tham s.
ForWriting (hoc 2): ghi d liu vo tp tin.
[Create]: Ty chn c to tp tin hay khng trong trng hp tp tin cha tn ti. N
c kiu l Boolean, gi tr mc nh l False.
[Format]: tham s tu chn, ch cch m tp tin theo nh dng. Tham s ny c th
nhn mt trong 3 gi tr sau:
TristateUseDefault (hoc -2): m tp tin theo nh dng chun ca h thng.
TristateTrue (hoc -1): m tp tin vi nh dng Unicode.
TristateFalse (hoc 0): m tp tin vi nh dng theo chun ASCII. y l gi
tr mc nh ca tham s.
Trong qu trnh c d liu t tp tin, phi lun chc chn rng v tr con tr c d liu khng
cui tp tin bi iu ny s lm pht sinh li. kim tra xem v tr con tr c d liu
cui tp tin cha, dng thuc tnh AtEndOfStream ca lp TextStream. Thuc tnh ny tr v
gi tr True nu cui, tr v false nu cha.
V d: on chng trnh sau s c ni dung ca tp tin C:\file1.txt v in ra ca s
Immediate.
Sub FSOReadFile()
Dim FSO As New FileSystemObject

89
GIOTRNHTNGHOTHITKCUNG

Dim TxtStr As TextStream


Dim StrTemp As String
If FSO.FileExists("C:\file1.txt") Then
Set TxtStr = FSO.OpenTextFile("C:\file1.txt", ForReading)
Do While Not (TxtStr.AtEndOfStream)
StrTemp = TxtStr.ReadLine
Debug.Print StrTemp
Loop
TxtStr.Close
Else
MsgBox "Tap tin khng co hoac Duong dan sai",vbCritical,"Thong
bao"
End If
End Sub

Kt qu thc thi on chng trnh trn nh sau:

Tp tin Kt qu
Nhng thao tc khc nh Copy, Move, Delete hay lm vic vi th mc khng c cp
trong gio trnh ny, tuy nhin ngi c c th tm hiu trong cc ti liu tham kho nu
cui gio trnh ny hoc trong Help Online ca VBA IDE.
14. G ri v by li trong VBAIDE
Trong qu trnh xy dng mt d n phn mm, vic gp cc li l khng th trnh khi. V
vy, vic tm v x l li l iu tt yu. Trnh t ca cng vic ny nh sau:
1. Tm v phn loi li.
2. Tm kim v tr m lnh pht sinh li.
3. Sa li.
4. Ngn chn li c th xy ra trong tng lai (by li).
14.1. Phn loi li trong lp trnh
Cc li c th c phn loi nh sau:
Li c php (Syntax Error): l cc li pht sinh do vit m lnh sai quy tc. V d: t tn
bin trng t kho, vit sai t kho, Tuy nhin trong VBA IDE, cc li c php c
hn ch rt nhiu nh cc tnh nng pht sinh m lnh t ng, gi m lnh hoc t
ng kim tra c php ca m lnh. Mt chng trnh ch chy khi khng cn li c
php.
Li khi chy chng trnh (Runtime Error): l cc li pht sinh trong khi chng trnh
ang chy. y l mt loi li m nguyn nhn gy li rt a dng cho nn vic pht hin
v sa cha li loi ny kh kh khn. V d nh li do trn b nh, cc ti nguyn m
chng trnh cn s dng khng c trong h thng, Cc li thc thi thng dn ti s
chm dt hot ng ca chng trnh, thm ch ca ton b h thng.

90
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Li do gii thut: l cc li xy ra do thut ton hoc do vic ci t v s dng cc thut


ton cha ng. Cc li gii thut thng dn ti kt qu x l ca chng trnh b sai,
trong nhiu trng hp cc li gii thut cng c th l nguyn nhn lm pht sinh cc li
thc thi. VBA IDE khng th pht hin c cc li loi ny m phi do ngi lp trnh
hoc ngi s dng chng trnh mi tm ra c. V vy, y l loi li kh pht hin
v khc phc nht.
14.2. G ri trong lp trnh
Cc li c php c th c khc phc kh d dng do ngi lp trnh c thng bo ca trnh
bin dch ngay trong qu trnh vit m lnh (tham kho thm mc Cc tr gip v c php
trong qu trnh vit m lnh trang 25 v Tnh nng gi nh v t hon thin m lnh trang
26). Ngoi ra, cng c mt s li v c php m VBA IDE khng th pht hin ngay lc vit
m lnh c, vi nhng trng hp ny, thng thng ngay trc khi chng trnh c thc
thi, VBA IDE s bo li vi ngi dng.
Do cc li c php rt d dng c pht hin nn phn ny s tp trung vo cc tnh nng
dng pht hin li thc thi v li gii thut.
14.2.1. Pht hin li lc thc thi
i vi cc li pht sinh lc thc thi chng trnh, VBA IDE s t ng dng chng trnh v
hin th thng bo li, sau cho php ngi dng la chn kt thc chng trnh hoc tip tc
g ri chng trnh.
hiu r hn tnh nng ny, nhp on m lnh sau vo m-un chun ca VBA IDE
Sub VDLoiThucThi()
Dim i As Integer
i = InputBox("Nhap so nguyen: ", "VD loi thuc thi")
MsgBox i
End Sub

on m lnh trn s hin th hp thoi InputBox ngi dng nhp mt s nguyn, sau
hin th kt qu va c nhp vo thng qua hm MsgBox.
Thc thi chng trnh con ny, sau trong hp thoi va hin th, nhp vo mt chui k t l
s nguyn, v d l 123, sau nhn OK mt hp thoi khc s hin th kt qu va nhp.
Tip tc thc thi chng trnh mt ln na, ln ny nhp mt chui k t khng phi l s
nguyn, v d l ABC, sau chn OK. VBA IDE s hin th thng bo li nh sau:

Hnh III-26: Thng bo li pht sinh lc thc thi chng trnh.

91
GIOTRNHTNGHOTHITKCUNG

Trong ca s thng bo li c hin th M li v M t li ngi dng c th tra cu, khc


phc li. Trong v d ny, l li s 13, li Type missmatch Khng ph hp kiu d liu.
Nu ngi dng chn nt lnh End chng trnh s kt thc thc thi.
Nu ngi dng chn nt lnh Debug, chng trnh s dng li ngay ti dng lnh lm pht
sinh li trn. VBA IDE s hin th ca s m lnh v nh du dng lnh ni pht sinh ra li
thc thi.

Hnh III-27: VBA IDE nh du dng lnh lm pht sinh li thc thi.

Nh c iu ny m ngi lp trnh c th r c nguyn nhn pht sinh li v ni lm pht


sinh li thc thi, t c c hng khc phc hp l.
14.2.2. Cc phng php thc thi m lnh
Trong cc trnh bin dch hin i ni chung v VBAIDE ni ring, ngi dng c h tr rt
nhiu thng qua cc tnh nng g ri nh bin dch theo tng bc, theo cc im dng, hin
th cc kt qu trung gian. Tu thuc vo mc ch m ngi lp trnh c th s dng mt
phng php ph hp hoc c th s dng phi hp gia cc phng php. Cc phng php
thc thi m lnh c th c truy cp thng qua trnh n Debug ca VBAIDE:
Chytngbc(StepInto)

Nt lnh: . Phm tt: F8.


Chng trnh c dch theo tng dng lnh. Mi khi ngi lp trnh nhn F8 th chng trnh
s thc thi mt dng lnh, c nh th cho n khi kt thc chng trnh.
Nu ti mt dng lnh c li gi n chng trnh con khc th khi tip tc thc hin vi Step
Into, con tr bin dch s c nhy n dng u tin ca chng trnh con c gi.
Chytngbcvikhilnh(StepOver)

Nt lnh: . Phm tt: SHIFT+F8.


Phng php ny tng t nh chy tng bc (Step Into) nhng vic thc thi mt chng
trnh con c coi nh thc thi mt dng lnh. V vy nu trong chng trnh hin ti c mt
li gi chng trnh con th chng trnh con s c thc thi nh mt lnh v do con tr
bin dch sau s nhy ti dng lnh tip theo ca chng trnh con hin ti.
Chyrangoichngtrnhcon(StepOut)

Nt lnh: . Phm tt: CTRL+SHIFT+F8.

92
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Nu con tr bin dch ang trong mt chng trnh con, th lnh bin dch Step Out s dch
ton b cc lnh cn li trong chng trnh con v a con tr lnh ti v tr tip sau v tr c
li gi chng trnh con.
Chytivtrcontrchut(RuntoCursor)

Nt lnh: . Phm tt: CTRL+F8.


Chy t v tr con tr bin dch hin ti ti v tr c con tr son tho. Phng php ny thng
c dng khi ngi lp trnh mun thc thi qua ton b nhng khi lnh lp n dng lnh
m mnh cn quan tm.
Toimdng(Breakpoint)khichychngtrnh

Nt lnh: . Phm tt: F9.


Vi phng php ny, khi ngi lp trnh thc thi chng trnh, trnh bin dch s dng li ti
cc v tr dng lnh tng ng c nh du trc. to im dng cho mt dng lnh,
a con tr son tho chn dng lnh tng ng v nhn phm F9.

V tr con tr bin
dch hin ti

im dng (Break point)

Nu mun xo im dng cho mt dng lnh, a con tr son tho n dng lnh c im
dng v nhn phm F9. Nu mun xo ht tt c cc im dng to, nhn phm tt
CTRL+SHIFT+F9.
14.2.3. Ca s tr gip g ri
Ngoi vic g ri s dng cc phng php thc thi chng trnh, VBAIDE cn h tr ngi
lp trnh cc cng c dng th nghim cc dng lnh v kim sot cc bin trong chng
trnh. y l cng c rt hu ch gip ngi lp trnh c th theo di v t pht hin ra li
trong chng trnh, nht l cc li pht sinh do gii thut.
Castrunggian(ImmediateWindow).
hin th ca s trung gian, trong VBAIDE chn trnh n View Immediate window,
hoc s dng phm tt CTRL+G:

Hnh III-28: Ca s trung gian.

93
GIOTRNHTNGHOTHITKCUNG

Vi ca s trung gian, ngi dng c th:


G mt dng lnh vo v nhn ENTER thc thi dng lnh trc tip t ca s trung
gian.
Hin th gi tr ca biu thc ln ca s trong qu rnh g ri. hin th gi tr ca biu
thc, trong ca s trung gian g ?Biu_Thc ri nhn phm ENTER.
Ngi lp trnh c th in gi tr ca biu thc ra ca s trung gian t m lnh chng
trnh s dng c php:

Debug. Print <danh_sch_cc_biu_thc>

Thay i gi tr ca mt bin trong khi chy chng trnh t ca s trung gian. Chng
hn nh trong chng trnh ang thc thi c bin a, ngi lp trnh c th thay i gi tr
ca bin a thnh 5 bng cch g a=5 trong ca s trung gian v nhn phm ENTER.
Castheodi(WatchWindow).
hin th ca s theo di, trong VBA IDE chn trnh n View Watch Window.

Hnh III-29: Ca s theo di.

Ca s ny thng c s dng theo di s bin i ca cc bin hoc cc biu thc trong


qu trnh m lnh c thc thi. Ngoi ra, trong ca s theo di, ngi lp trnh c th thay i
gi tr cho bin trong lc ang thc thi chng trnh. Cn lu l gi tr ca bin/biu thc cn
theo di ch c hin th khi trnh bin dch ang thc thi mt dng lnh nm trong phm vi
hiu lc ca bin/biu thc . V d nh bin a trong chng trnh con VD1 ch hin th gi tr
trong ca s theo di khi trnh bin dch ang thc thi mt dng lnh nm trong chng trnh
con VD1 .
thm mt biu thc vo trong danh sch cc biu thc ang c theo di ca ca s
Watch, thc hin theo cc bc sau:
1. Trong VBA IDE, chn trnh n Debug Add Watch hin th hp thoi Add Watch.
2. Nhp biu thc cn theo di trong mc Expression.
3. Chn tn m-un v tn ca chng trnh con, ni c cha bin/biu thc cn theo di
trong mc Module v Procedure.
4. Nhn ENTER hoc chn OK thm vo ca s theo di.

GI khng phi thc hin cc bc v , trc khi hin th ca s theo di,


cn nh du chn bin/biu thc s c theo di. Khi , cc mc Expression, Module
v Procedure s c t ng in cc gi tr tng ng.

94
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

Hnh III-30: Thm biu thc vo ca s theo di.

14.3. By li trong VBAIDE


Nh cp trn, khi gp phi nhng li pht sinh lc thc thi chng trnh s gy ra
nhng kt qu khng th tin on c hoc chng trnh s dng li v s hin th thng bo
li rt phc tp. Nu ng v pha ngi s dng chng trnh th nhng hp thoi nh vy
thng gy ra s lng tng khi s dng chng trnh. trnh nhng hin tng nh vy,
ngi lp trnh cn phi thc hin cc k thut by li trong khi vit chng trnh.
By li thc cht l vit cc on m lnh chn cc thng bo li mc nh ca h thng v
hng dn chng trnh cch thc x l li chn c. Cc on chng trnh x l li cn
c gi l b x l li (error-handler). VBA c cung cp cc cu lnh nhm gip ngi lp
trnh thc hin by li trong chng trnh ca mnh.
14.3.1. Cu lnh On Error
Cu lnh On Error s thc bt ch by li trong chng trnh v xc nh ni s thc hin
x l cc li khi li xy ra. tt ch by li, ngi lp trnh cng dng chnh cu lnh ny.
Cc dng c php ca cu lnh ny nh sau:
C php M t

On Error GoTo <Label> Bt ch by li. Khi c li xy ra, chng trnh s c t ng nhy


n dng lnh c nhn <Label> tip tc thc thi m lnh. y chnh
l ni cha b x l li ca chng trnh. Cn lu l phn m lnh c
nhn <Label> phi nm trong cng mt chng trnh vi cu lnh On
Error. Khi dng by li kiu ny, trc nhn <Label> thng c lnh Exit
Sub hoc Exit Function (tu thuc chng trnh con c by li) nhm
trnh thc thi b x l li trong trng hp li khng xy ra.

95
GIOTRNHTNGHOTHITKCUNG

On Error Resume Next Bt ch by li. Khi c li xy ra, chng trnh s t ng nhy n


dng lnh ngay sau dng lnh gy li tip tc thc thi m lnh. Cu
lnh ny thng c s dng khi c cu lnh truy xut n mt i
tng no . nm r li pht sinh, cu lnh ny thng c s
dng kt hp vi i tng Error (xem thm mc i tng Err trang
96)
On Error GoTo 0 Tt ch by li. Khi thc hin dng lnh ny, cc li pht sinh
trc s c xo v ng thi k t sau dng lnh ny, cc li s
khng c chn li v x l na, v nh vy chng trnh c th
ngng hot ng nu c li thc thi xy ra.

Khi s dng cu lnh On Error GoTo <Label>, ngay trc nhn <Label> thng c lnh
Exit Sub hoc Exit Function (tu thuc chng trnh con c by li) nhm trnh thc
thi b x l li trong trng hp li khng xy ra. V vy, khun mu ca cc chng trnh c
b x l li c th c tham kho thao on m lnh sau:
Sub InitializeMatrix(Var1, Var2, Var3, Var4)
On Error GoTo B_x_l_li
. . .
Exit Sub
B_x_l_li:
. . .
Resume Next
End Sub

on chng trnh sau y s thc hin truy xut n mt tp, sau ng tp li. Nu
trong qu trnh thao tc c li xy ra, chng trnh s c t ng nhy n dng lnh pha
sau nhn lbErr hin th thng bo v li xy ra cho ngi s dng.
Sub SolveErrorExample()
On Error GoTo lbErr
Open "C:\fileABC.txt" For Input As 1
Close 1
Exit Sub
lbErr:
MsgBox "Loi xay ra: " & Err.Description, vbCritical, "Thong bao
loi"
End Sub

Khi thc thi chng trnh, trong trng hp tp C:\fileABC.txt khng tn ti, ngi dng
s nhn c thng bo li nh sau:

Hnh III-31: Thng bo li do ngi dng t to

14.3.2. i tng Err


i tng Err cha tt c cc thng tin v li thc thi ca chng trnh. i tng ny thng
c s dng cng vi cu lnh On Error Resume Next. Nh c i tng Err m ngi
lp trnh c th bit r c cc thng tin v li xy ra c hng x l thch hp.

96
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC

i tng Err c nhiu phng thc v thuc tnh khc nhau phc v cho vic x l li. Trong
, nhng thuc tnh v phng thc c s dng nhiu nht bao gm: Description,
Number v Clear.

ThuctnhNumber
Thuc tnh Number tr v s hiu ca li thc thi. y cng l thuc tnh mc nh ca i
tng Err, ngha l hai biu thc Err.Number v Err l tng ng nhau, u tr v s hiu
ca li thc thi.
Trong trng hp khng c li xy ra, thuc tnh ny tr v gi tr 0.
ThuctnhDescription
Thuc tnh Description tr v chui k t m t thng tin ngn gn v li thc thi xy ra.
Thng thng, khi li xy ra, nn t nht l hin th thng bo li cho ngi dng bng cch s
dng hm MsgBox kt hp vi thuc tnh Description.
Trong trng hp khng c li xy ra, thuc tnh ny tr v chui k t rng .
PhngthcClear
Phng thc Clear s xo tt c cc thuc tnh ca i tng Err, c ngha l sau khi thc thi
phng thc Clear, i tng Err s c tr v trng thi nh khi khng c li xy ra.
Phng thc ny thng c gi sau khi tin hnh x l xong cc li thc thi.
V d sau s minh ho cch thc s dng i tng Err. Trong v d ny c thc hin php
chia cho 0, v vy chng trnh s lm pht sinh li thc thi. Nh c cu lnh On Error GoTo
out nn khi c li, chng trnh s t ng nhy n cu lnh sau nhn out. V vy cc cu
lnh sau cu lnh lm pht sinh li nh MsgBox x v Exit Sub s khng bao gi c thc
hin. on m lnh sau nhn out thc hin nhim v thng bo cho ngi dng s hiu li v
m t v li
Sub test()
On Error GoTo out

Dim x, y
x = 1 / y ' Dng lnh ny lm pht sinh li chia cho 0
MsgBox x
Exit Sub
out:
' Hin th thng bo li cho ngi dng
MsgBox Ma loi: & Err.Number
MsgBox Err.Description
End Sub

14.3.3. Hm Error
Hm Error tr v chui k t cha m t v li tng ng ca mt s hiu li. C php ca
hm nh sau:

Error[(errornumber)]

Tham s errornumber l tham s tu chn, l s nguyn cha s hiu ca mt li no .


Nu errornumber l mt li hp l nhng cha c nh ngha, hm Error s tr v chui
Application-defined or object-defined error.. Nu errornumber l mt s
khng hp l th s lm pht sinh li. Nu tham s errornumber b b qua, hm Error s tr
v m t ca li thc thi gn nht.
97
GIOTRNHTNGHOTHITKCUNG

V d sau s hin th m t li tng ng ca cc s hiu li trong ca s trung gian.


Sub VD_Error()
Dim ErrNumber
For ErrNumber = 61 To 64 ' Lp qua cc gi tr 61 - 64.
Debug.Print Error(ErrNumber) ' In m t li trong ca s trung
gian.
Next ErrNumber
End Sub

98
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

CHNG IV: LP TRNH TRN MICROSOFT EXCEL


1. Tng quan v Microsoft Excel
1.1. Kh nng ca Excel
Microsoft Excel l mt phn mm chuyn x l bng tnh ca hng phn mm ni ting
Microsoft. Excel thc s l mt cng c rt mnh m phc v cng tc tnh ton, lp bng
biu Vi cc bi ton t n gin n phc tp, ta u c th s dng Excel gii quyt
mt cch d dng vi rt nhiu tnh nng sn c:
Kh nng t chc d liu mnh m vi h thng cc , vng d liu, cc bng tnh;
Kh nng x l d liu nh truy vn, lc, tnh ton vi h thng rt phong ph cc hm
c bn cng nh cc hm chc nng chuyn bit;
Kh nng lp bo co vi cch t chc bng biu v h thng biu tng i hon
chnh;
Kh nng in n vi nhiu la chn khc nhau.
Vi cch t chc ging nh bng tnh thng thng, Excel l mt phn mm bng tnh trc
quan v rt d s dng. Chnh bi iu ny khin cho Excel l mt trong nhng phn mm
c s dng ph bin nht.
1.2. Giao din ca Excel
Giao din l ni m ngi dng tng tc vi chng trnh v mt giao din hp l l giao
din quen thuc vi ngi dng. Do chuyn v bng tnh, nn giao din ca Excel (nh hnh
di) c thit k da trn s m phng ca cu trc bng tnh thng thng.

Hnh IV-1: Giao din chnh ca Excel.

Cc thnh phn chnh trong giao din ca Excel bao gm:

99
GIOTRNHTNGHOTHITKCUNG

1. Thanh trnh n l ni cha cc lnh dng gi n cc chc nng ca chng trnh.


H thng thanh trnh n c truy cp bng chut, v trong mt s lnh ph bin cn c
th s dng t hp phm (v d lu bng tnh c th bm phm Ctrl+S).
2. Thanh cng c c rt nhiu thanh cng c khc nhau, mi thanh cng c cha cc nt lnh
trc quan hoc cc la chn dng thc hin mt nhm chc nng no trong chng
trnh. Hay ni cch khc, mt lnh c th c gi t thanh cng c hoc t thanh trnh
n.
3. Thanh cng thc bao gm cha a ch ca hin hnh v cha ni dung ca hin
hnh. Ti y ta c th xem c cng thc trong mt no trong khi vn cha kt
qu ca cng thc .
4. Workbook l mt tp ti liu ca Excel. Mi Workbook c th cha nhiu bng tnh
(Worksheet) v cc d liu m rng khc. Ti mi thi im ch c mt worksheet hin
hnh v ta ch c th lm vic vi worksheet ny.
5. Worksheet l loi ti liu chnh trong tp ti liu ca Excel, mi worksheet cha cc tnh
(cell) c t chc thnh cc hng v ct.
1.3. Kh nng m rng ca Excel
Vi hng trm hm v rt nhiu lnh c sn trong Excel khin cho n l mt chng trnh x l
bng tnh rt mnh, c th gii quyt hu ht cc bi ton t n gin n phc tp. Tuy vy,
vic lp trnh m rng trn Excel vn lun c cp n, khng nhng ch vi mc ch l
lp trnh to thm nhng tnh nng mi cho Excel m cn kt hp cc tnh nng sn c ca
chng trnh Excel gii quyt nhng vn mang tnh chuyn bit ho cao.
B chng trnh D Ton l mt v d c th cho vic lp trnh m rng trn Excel. Cc bi
ton chuyn bit v tnh ton d ton cng trnh c gii quyt mt cch d dng da trn
s kt hp gia cc hm c sn trong Excel v mt s tnh nng mi v c s d liu.
Vic lp trnh m rng Excel c th c thc hin theo nhiu cch khc nhau, nhng n gin
v hiu qu nht c th k n nhng cch sau:
Lp trnh m rng thng qua mi trng lp trnh VBAIDE c tch hp sn trong
Excel. Theo cch ny, ngi dng s s dng ngn ng lp trnh VB lp trnh m rng
Excel. Cc ng dng c to ra theo cch ny gn lin vi tp ti liu ca Excel
(Workbook).
Lp trnh m rng thng qua b cng c lp trnh Visual Studio Tools for Office (VSTO)
trong b cng c pht trin phn mm Microsoft Visual Studio. Theo cch ny, ngi s
dng c th lp trnh to ra cc ng dng chuyn nghip dng Add-in (ng dng b sung
trong Excel) bng cc ngn ng c h tr trong Microsoft Visual Studio. ng dng
m rng dng ny c lu tr tch bit vi tp ti liu ca Excel nn rt d dng phn
phi.
Vi nhng u im vn c ca VBA v cng vi kh nng sn c ca Excel, hu ht cc bi
ton trong lnh vc thit k cng trnh giao thng u c th gii quyt c thng qua vic lp
trnh m rng Excel. V vy, trong ton b ti liu ny, vic lp trnh m rng Excel s c
cp n theo cch da trn mi trng lp trnh VBAIDE.
khi ng VBAIDE, t ca s chnh ca Excel, chn trnh n ToolsMacroVisual
Basic Editor, hoc c th s dng t hp phm ALT+F11.
2. Macro
Cch tt nht lm quen vi vic lp trnh trn Excel chnh l s dng Macro v tm hiu
cch thc hot ng ca n.

100
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

2.1. Macro l g?
Khi lm vic trong Excel, i lc gp phi nhng tnh hung m ngi s dng phi lp i lp
li rt nhiu thao tc thc hin cc nhim v tng t nhau, v d nh thng xuyn phi
nh dng d liu thnh mt kiu bng ging nhau. iu ny rt d dn n s nhm chn trong
cng vic. Do , khi thit k Excel, Microsoft a ra khi nim Macro c th gi gn tt
c cc thao tc y vo mt thao tc duy nht.
Macro l tp hp cc lnh v hm c lu tr trong mt m-un m lnh ca VBA nhm thc
hin mt nhim v no . Macro c th c to bng cch:
Excel s t ghi li thao tc ca ngi dng khi lm vic trn n (Macro dng kch bn) v
khi gi Macro ny, Excel s t ng lp li ton b cc thao tc trn;
Ngi dng t vit cc on m lnh thc hin cc thao tc tng ng.
Sau khi c to ra, mi khi thc thi Macro, tt c cc thao tc c lu trong Macro s
c thc hin t ng.
V thc cht, Macro l mt chng trnh con dng th tc (Sub) vi t kho Public. Tuy nhin,
khc vi cc th tc khc, Macro l th tc khng c tham s. Chnh v vy, tt c cc th tc
vi t kho Public v khng c tham s u c xem l Macro v s c hin th trong trnh
qun l Macro ca Excel (cch gi: chn trnh n Tools Macro Macros hoc bm
Alt+F8).
Trong cc khai bo chng trnh con trong v d sau, ta s thy c cch nh ngha mt
Macro:
Sub Macro() Macro
Public Sub Macro () Macro
Private Sub Macro() Th tc vi t kho Private, khng phi
Macro
Sub Macro(Input as Double) Th tc c tham s, khng phi Macro
Public Function Macro() as Double Hm, khng phi Macro

2.2. To Macro
2.2.1. To Macro theo kch bn
y l cch to Macro d dng nht, theo cch ny, ngi s dng s chun b trc tt c cc
thao tc s thc hin (xy dng mt kich bn), sau yu cu Excel bt u ghi Macro, ngi
dng s ln lt thc hin cc thao tc theo kch bn, Excel s ghi nhn cc thao tc v t ng
chuyn tng thao tc thnh cc on m lnh VBA tng ng, on m lnh ny s c lu
li trong tp XLS v mc nh l trong Module1.
CH Nu trong qu trnh thu Macro, ngi s dng thc hin khng ng theo kch
bn d nh (b li) v c thm nhng thao tc sa li cc li , th ton b nhng
thao tc pht sinh ny cng s c ghi nhn nh l mt phn ca Macro.

V d sau s tin hnh thu Macro c nhim v nh dng mt bng d liu vi nh dng nh
sau:
Tiu Tiu Tiu Tiu
Ni dung Ni dung Ni dung Ni dung
Ni dung Ni dung Ni dung Ni dung
ToMacrotheokchbndngnhdngbngdliu:

101
GIOTRNHTNGHOTHITKCUNG

1. Chn vng d liu cn nh dng, v d vng A1:D5.


2. Trong trnh n Tools, chn MacroRecord New Macro hin th hp thoi
Record Macro.

Hnh IV-2: Hp thoi Record Macro.

3. Trong mc Macro name, nhp tn ca Macro, v d l Macro1.


4. Nu mun thc thi Macro bng cch nhn phm tt, nhp mt ch ci thng thng vo
Shortcut Key. Sau , thc thi Macro, ta ch cn nhn t hp phm CTRL+Ch ci (vi
ch vit thng) hoc CTRL+SHIFT+Ch ci (vi ch vit hoa). Ch ci t lm phm tt
khng c php l s hay cc k t c bit nh @ hoc #. Nu phm tt ny trng vi
cc phm tt c th nhng phm tt c s b v hiu ho.
5. Trong mc Store Macro In, chn ni s lu tr Macro. Nu munMacro c th s dng
c ngay cho mi bng tnh mi khi s dng Excel, th chn mc Personal Macro
Workbook. Trong v d ny, chn This Workbook.
CH Nu ngi dng to mt Macro kh hu dng v mun dng li nhiu ln th nn
chn lu Macro trong Personal Macro Workbook. Tp bng tnh ny l mt tp bng tnh
n c tn l Personal.xls, c lu trong th mc Xlstart. Mi khi khi ng Excel, tp
bng tnh ny s c t ng ti ln nhng ch n. Mc nh, tp Personal.xls
khng tn ti cho n khi ngi dng to Macro v Macro c lu vo Personal Macro
Workbook (chn trong Store Macro In ca hp thoi Record Macro).

6. Nhp cc thng tin vo mc Description nu cn m t thm v Macro ny.


7. Chn OK.
CH Trong qu trnh to Macro kch bn, nu mun lu a ch tng i so vi

hin hnh, ta lm nh sau: trn thanh cng c Stop Recording , chn vo biu
tng Relative Reference . K t thi im y, a ch s c lu tng i so vi
hin hnh cho n khi thot khi Excel hoc chn mt ln na vo biu tng Relative
Reference .

8. Thc hin cc thao tc m sau ny s c lp li khi Macro kch bn thc thi.


a. nh dng cc ng k cho bng d liu: Chn trnh n FormatCells Chn
th Border nh dng cc ng k cho bng d liu.

102
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

b. nh dng dng tiu ca bng d liu: Chn dng u tin ca bng d liu Chn
trnh n FormatCells Chn th Font chn Font Style l Bold Chn th
Partern Chn mu xm.
9. Trn thanh cng c Stop Recording, nhn chut vo biu tng Stop Recording
hon thnh vic to Macro theo kch bn.
Sau khi kt thc qu trnh to Macro theo kch bn, Excel s t ng pht sinh mt on m
lnh nh sau:
Sub Macro1() 'Tn Macro
'
' Macro1 Macro
' Macro recorded 6/10/2007 by TTH
'
' Keyboard Shortcut: Ctrl+Shift+L Phm tt ca Macro
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
ActiveWindow.SmallScroll Down:=-6
Range("A1:D1").Select 'La chn hng tiu
With Selection.Font 'Phng ch cho hng tiu
.Name = "Arial"
.FontStyle = "Bold"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False

103
GIOTRNHTNGHOTHITKCUNG

.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
With Selection.Interior 'T mu cho hng tiu
.ColorIndex = 48
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub 'Kt thc Macro

on m trn c thm vo mt vi dng ghi ch lm r hn tng phn ca Macro, mi


ghi ch bt u bng du '.
2.2.2. To Macro s dng VBA
Trong thc t, Macro kch bn khng th p ng c mi nhu cu, thng thng n ch p
ng tt nhng yu cu v thao tc c bn khi tng tc vi Excel. khc phc nhc im
ny, ngi dng c th vit cc on m lnh ring vi VBA to ra cc Macro c kh nng
p ng c nhu cu ca mnh. Nh vy, ngoi cch to Macro theo kch bn, cn c th to
Macro bng cch lp trnh trong VBAIDE.
V d sau minh ho cch thc to mt Macro s dng VBA. Mc ich ca Macro l nh dng
li phng ch cho vng ang c la chn trong bng tnh: thay i tn phng ch thnh
Time News Roman, kiu ch thnh Italic, kch c ch 11.
ToMacrosdngVBAIDE
1. Trong mn hnh chnh ca Excel, chn trnh n ToolsMacroVisual Basic Editor.
2. Trong mn hnh ca VBAIDE va c hin th, chn trnh n InsertModule.
3. Nhp on m lnh sau:
Sub Dinh_dang()
With Selection.Font
.Name = "Times New Roman"
.FontStyle = "Italic"
.Size = 11
End With
End Sub

4. Sau khi nhp xong on m lnh, chn trnh n FileClose and Return to Microsoft
Excel tr v mn hnh chnh ca Excel.
CH Mi Macro u c mt tn ring v tn ny l duy nht trong mt ti liu Excel
(Workbook).

2.3. Qun l Macro


Nhm to iu kin thun li cho ngi s dng trong khi lm vic vi Macro, Excel tch
hp sn mt trnh qun l Macro.
hin th trnh qun l Macro, chn trnh n ToolsMacroMacros hoc nhn t hp
phm ALT+F8.

104
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh IV-3: Trnh qun l Macro

Trong ca s Macro, cc Macro c to theo kch bn hoc bng VBAIDE c trong phin lm
vic hin ti ca Excel s c hin th trong mt danh sch. Tt c cc thao tc qun l Macro
s c thc hin d dng thng qua trnh qun l ny. bt u mt thao tc no , trc
ht cn phi chn Macro tng ng c trong danh sch:
thc thi Macro (chy Macro): kch chut vo nt Run.
hiu chnh Macro: kch chut vo nt Edit, ca s lnh trong VBAIDE cha cc m
lnh ca Macro c chn s c hin th ngi s dng c thay i m lnh trong
Macro .
xo Macro: kch chut vo nt Delete, Macro c chn s c xo c trong danh
sch Macro v m lnh ca Macro .
Kch chut vo nt Options s hin th hp thoi la chn, cho php ngi s dng
thit lp li phm tt hoc thay i m t cho Macro c chn.

Hnh IV-4: Hp thoi Macro Options.

2.4. S dng Macro


Vic s dng cc Macro c to, thc cht l thc thi on m lnh to nn Macro . C
nhiu cch khc nhau chy mt Macro:
Thc thi bng cch bm phm tt gn cho Macro;

105
GIOTRNHTNGHOTHITKCUNG

Thc thi Macro theo cch thng qua trnh qun l Macro;
Thc thi Macro trc tip t VBAIDE;
Thc thi bng cch nhn chut vo mt nt lnh hay mt iu khin ho m c
gn tr ti Macro cn thc hin;
Thc thi bng cch nhn chut vo mt i tng ho m c gn tr ti Macro;
Thc thi thng qua nt lnh trn thanh cng c;
Thc thi thng qua mc trn thanh trnh n.
Chi tit v cc cch thc thi Macro xin tm hiu thm trong ti liu Microsoft Office Excel
Help c ci t sn cng Excel. y ch trnh by cch thc thi Macro theo mt s cch
thng thng.
2.4.1. Thc thi Macro bng phm tt
Trong qu trnh to Macro theo kch bn, ngi s dng c th gn mt phm tt cho Macro .
V thc thi Macro, ngi dng ch cn nhn t hp phm tt gn cho Macro. Trong v d
phn To Macro theo kch bn trang 101, Macro c gn mt t hp phm tt l
CTRL+SHIFT+L, do vy, thc thi Macro ny, ngi s dng ch cn chn vng d liu
nh dng bng, sau nhn t hp phm CTRL+SHIFT+L.
i vi Macro c to bng cch s dng VBAIDE, ngi dng ch c th to phm tt cho
Macro thng qua trnh qun l Macro. Chi tit tham kho phn Qun l Macro trang 104.
2.4.2. Thc thi Macro thng qua trnh qun l Macro
Chi tit tham kho phn Qun l Macro trang 104.
2.4.3. Thc thi Macro trc tip t VBAIDE
Cch thc thi Macro trc tip t VBAIDE rt thch hp khi ngi s dng mun th nghim
ngay Macro trong qu trnh xy dng n.
thc thi Macro no trong VBAIDE, cn thc hin nh sau:
1. Trong ca s m lnh ca VBAIDE, t con tr vo gia khi Sub End Sub.
2. Nhn phm F5 hoc chn biu tng trn thanh cng c.

Hnh IV-5: Thc thi Macro trc tip t VBAIDE

106
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Trong trng hp ngi s dng khng t con tr gia, mt danh sch cc Macro s c
hin ra ngi dng la chn Macro cn thc thi.
2.5. Hiu chnh Macro
Khi Macro c to ra cha p ng nhu cu th ngi s dng c th thay i, b sung m
lnh cho Macro . Qu trnh hiu chnh Macro c thc hin thng qua VBAIDE. hiu
chnh Macro, ta c th dng trnh qun l Macro (xem mc Qun l Macro trang 104) hoc
truy cp trc tip trong VBAIDE. V bn cht, vic hiu chnh (sa i) Macro tng ng
nh viclp trnh xy dng nn Macro .
2.6. Vn an ton khi s dng Macro
Do Macro l nhng on m lnh c th t ng thc thi v nhng on m lnh ny c th
gy nguy him cho my tnh ca ngi dng (dng Macro Virus). Chnh v vy, Excel s dng
c ch bo v chng li nguy c ly nhim virus thng qua Macro. C ch ny c th c
iu chnh thng qua cc mc an ninh khc nhau:
Very High
High
Medium
Low
GI Mc an ninh ca Excel c th c thit lp bng cch chn trnh n
ToolsMacroSecurity

Thng thng, khi s dng Excel vi cc tp bng tnh c cha Macro, nn t mc an ninh
Medium. mc ny, Excel s yu cu ngi dng xc thc xem cc on m lnh trong tp
bng tnh c phi t ngun tin cy hay khng.

Hnh IV-6: Hp thoi cnh bo an ninh ca Excel

Nu ngi dng chn Enable Macros, cc Macro cha trong workbook s c php thc
thi.
Nu ngi dng chn Disable Macros, cc Macro cha trong workbook vn tn ti trong
workbook nhng khng th thc thi c.
3. Xy dng hm mi trong Excel
3.1. Khi nim v hm trong Excel
Hm l nhng cng thc c nh ngha sn trong Excel thc hin tnh ton da trn
cc s liu u vo, gi l tham s, theo mt trnh t c lp trnh sn nhm thc hin cc
php tnh t n gin n phc tp.

107
GIOTRNHTNGHOTHITKCUNG

hiu r hn v cu trc ca mt hm, ta tm hiu v hm ROUND c sn trong Excel, l


hm dng lm trn s:

1. Cu trc. Mt hm bt u bng du bng =, tip sau l tn hm, du ngoc n (,


danh sch cc tham s cch nhau bng du phy , v cui cng l du ngoc n ).
2. Tn hm. n phm SHIFT+F3 hin th danh sch tt c cc hm trong Excel.
3. Cc tham s. Tham s c th l s, ch, gi tr logic nh TRUE hoc FALSE, mng, gi tr
li nh #NA, hoc tham chiu n mt khc. Tham s truyn vo phi c kiu thch hp
vi kiu ca tng tham s tng ng ca hm. Tham s truyn vo c th l mt hng s,
cng thc, hoc l mt hm bt k.
4. Ch thch hm. Ch thch hm dng th hin cu trc v danh sch cc tham s ca
hm, hin ln khi ta nhp vo tn hm. Ch thch hm ch xut hin i vi nhng hm
c xy dng sn trong Excel.
3.2. To hm mi bng VBA
3.2.1. Ti sao phi dng hm?
Trong qu trnh tnh ton vi cc bng tnh, ngi ta thy rng lun tn ti mt nhu cu: gi tr
trong mt no s c tnh da vo hai yu t:
Tnh theo mt hoc nhiu cng thc hoc theo mt trnh t logic no .
Vic tnh ton cn phi da trn nhng thng s bn ngoi khc.
Nu i chiu hai yu t trn vi cu trc ca mt hm ( mc trc) ta c th thy rng nhu
cu trn ch c th c gii quyt mt cch tha ng vi vic s dng hm. Hn na, khi s
dng hm, vic s dng lp cho nhiu hoc hiu chnh ni dung tnh ton sau ny u rt
thun tin so vi vic khng dng hm (tnh trc tip trong ). Chnh bi u im ny m hng
lot hm c Excel xy dng sn v phn loi theo nhm to thun tin cho ngi dng.
Mt cu hi t ra l vi hn 300 hm c sn trong Excel cng vi cc hm c sn trong VBA,
ti sao li cn phi to ra hm mi? Cu tr li rt n gin: n gin ho cng vic. Vi
mt cht sng to, ngi dng c th to thm cc hm mi phc v cho nhng nhu cu ca
mnh.
Khng phi lc no cc hm c sn cng c th gii quyt c cng vic ca ngi dng,
hoc c th gii quyt c nhng phi thng qua rt nhiu hm khc nhau hoc thc hin theo
mt cch rt phc tp. Thay vo , ngi dng c th to ra mt hm mi m nhn nhim v
ny. Hm mi ny c th c cch thc tnh ton hon mi, hoc cng c th ch l vic tp hp
li cc hm sn c to thnh mt hm n gin hn. Cng n gin, cng d hiu, d nh v
d s dng.
Ly v d nh trong Excel, c cung cp mt b cng c c tn l Lookup. B cng c ny cho
php ngi s dng tin hnh tra bng 2 chiu mt cch d dng. Nhng vic tra bng v ni
suy khng th thc hin c nh b cng c ny. V th, xy dng mt hm mi dng tra
bng v ni suy 2 chiu s l mt cng c tt phc v cho qu trnh tnh ton, nht l i vi
ngnh cng trnh.
Excel cho php xy dng cc hm mi bng VBA, v c bit, vic s dng cc hm mi ny
khng khc g so vi vic s dng cc hm c sn ca Excel. Hm mi lun mang c tnh:

108
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Tr v mt gi tr no , tng t nh hm c sn trong Excel;


Hm mi c th s dng nh mt chng trnh con trong VBA, ngha l n va c th s
dng trong bng tnh (trong cc ), ng thi c th s dng trong cc chng trnh vit
bng VBA.
3.2.2. Cu trc hm
Thc cht, hm l mt chng trnh con dng Function. Khc vi Macro, hm l chng trnh
con c gi tr tr v v c th c tham s.
Khi to hm mi, ngi s dng cn phi tun th theo dng thc khai bo nh sau:

[Public/Private] Function Tn_hm([DSch_tham_s])[as kiu_d_liu]


[Cu_lnh]
[Tn_hm = biu_thc]
[Exit Function]
[Cu_lnh]
[Tn_hm = biu_thc]
End Function

Trong :
Public: (tu chn) l t kho biu th phm vi ca hm, hm c th c s dng bt
k u trong tt c cc d n VBA hin c. Khi c t kho Public, tn hm s c hin
th trong danh sch hm ca Excel.
Private: (tu chn) l t kho biu th phm vi ca hm, hm ch c th c s dng
bn trong m-un c cha hm . Khi c t kho Private, tn hm s khng c hin
th trong danh sch hm ca Excel, nhng ngi s dng vn c th dng hm ny trong
bng tnh mt cch bnh thng.
CH Nu khng khai bo phm vi cho hm (t kho Public/Private), th mc nh, hm
s c phm vi l Public.

Function: (bt buc) l t kho bo hiu bt u mt hm.


Tn_hm: (bt buc) l tn ca hm, cch t tn hm tng t nh cch t tn ca bin.
Tn_hm s c s dng nh l bin trong ton b hm, khi hm kt thc gi tr tr v
ca hm chnh l gi tr gn cho bin Tn_hm cui cng.
Danh_sch_tham_s: (tu chn) l danh sch cc tham s u vo ca hm. Cc tham
s c phn cch vi nhau bng du phy.
Kiu_d_liu: (tu chn) quy nh kiu gi tr tr v ca hm. Nu khng quy nh
kiu d liu, hm s c kiu d liu mc nh l Variant.
Exit Function: (tu chn) l cu lnh dng kt thc hm ngay lp tc (cho d pha
sau cu lnh ny vn cn cc khi lnh khc).
End Function: (bt buc) l t kho bo hiu kt thc mt hm.
3.2.3. To hm mi
minh ho r hn cch thc to hm mi, ly v d to mt hm rt n gin: hm tnh din
tch hnh ch nht. Hm ny c tn l Dien_tich, vi hai tham s u vo l chiu rng v
chiu cao. Kiu d liu ca cc tham s l kiu s thc v gi tr tr v ca hm cng l kiu s
thc.
to mt hm mi, thc hin theo cc bc sau:
109
GIOTRNHTNGHOTHITKCUNG

1. Khi ng VBAIDE. Trong trnh n Tools, chn mc MacroVisual Basic Editor;


2. Trong trnh n Insert, chn mc Module to mt m-un mi, ni s cha hm do
ngi dng nh ngha.
3. Trong trnh n Insert, chn mc Procedure hin th hp thoi Add Procedure. Sau
in tn hm vo mc Name, chn kiu chng trnh con l Function v phm vi l
Public. Cui cng chn OK;

Hnh IV-7: Hp thoi Add Procedure.

4. Chng trnh s t ng pht sinh on m lnh nh sau:


Public Function Dien_Tich()

End Function

5. Thay on m lnh trn bng on m lnh sau:


Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
Hm tnh din tch hnh ch nht
Dien_Tich = Rong * Cao
End Function

6. Trong trnh n File, chn mc Close and Return to Microsoft Excel quay tr v mn
hnh chnh ca Excel;
7. Lc ny, hm m ta va xy dng, c tn l Dien_Tich, c th c s dng bnh
thng nh cc hm khc ca Excel.

110
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh IV-8: S dng hm mi trong Excel.

CH Cc bc to hm mi cng tng t nh cc bc to Macro phn trc. Tuy


nhin, do hm cn phi c gi tr tr v nn khi khai bo kiu chng trnh con cho hm,
ngi dng cn phi chn l Function (khc vi khi to Macro, phi chn l Sub).

Thng thng, vi yu cu tnh ton trn khng nht thit phi to hm mi, y ch l mt
on v d rt n gin nhm minh ho cch thc to hm v cu trc ca hm. hiu r hn
v hm, ta cng xem li on m trn:
Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
Hm tnh din tch hnh ch nht
Dien_Tich = Rong * Cao
End Function

dng u tin, c bt u bng t kho Public, do vy tn hm s c hin th trong


danh sch hm trong Excel (c hin th khi nhp du bng vo v bm phm Shift+F3).
Tip sau l t kho Function (ch khng phi l Sub nh Macro) v tn hm, Dien_Tich.
Hm c hai tham s, nm gia hai du ngoc n, l Rong v Cao, v u c kiu s thc. T
kho As Double cui xc nh kiu tr v ca hm Dien_Tich l kiu s thc.
dng th 2, n gin ch l mt dng ch thch v c bt u bng du phy trn ().
dng th 3, gi tr ca hm c tnh da trn hai tham s u vo l Rong v Cao.
Hm c kt thc bng cu lnh End Function.
CH Khi xy dng hm mi, cn phi ch s khc bit gia hm gi t cc chng
trnh con trong VBA v hm s dng trong bng tnh. Cc hm s dng trong bng tnh
mang tnh b ng, tc l khng th thao tc trn cc vng d liu hoc thay i ni
dung no trong bng tnh.
Nu ngi dng c to mt hm m trong c thay i nh dng ca mt , nh
mu nn chng hn, th nhng hm nh vy s khng thc hin c, v hm s lun tr
v gi tr li.
Nh vy, khi to hm mi cn ghi nh: Hm ch n gin l tr v mt gi tr no ;
Hm khng th thc hin thao tc lm thay i i tng.

3.3. Hm tr v li
Trong mt s trng hp, hm c th s phi tr v mt gi tr li no . lm r hn iu
ny, ly v d hm phn loi sinh vin.
Function PhanLoai(DiemTB) As String
If (DiemTB >= 5) Then
PhanLoai = "Do"

111
GIOTRNHTNGHOTHITKCUNG

Exit Function
End If

If (DiemTB < 5) Then


PhanLoai = "Truot"
Exit Function
End If
End Function

Hm ny ly tham s u vo phn loi l im trung bnh ca sinh vin thng qua bin
DiemTB vi thang im 10. Hm s tr v gi tr kiu chui: nu im trung bnh ln hn
hoc bng 5, v ngc li l Trt.
Tuy nhin, vi nhng trng hp im trung bnh, v mt l do no , c nhp vo gi tr
nh hn 0 hoc ln hn 10 th hm vn tr v thng bo Trt hoc . Nh vy l khng
hp l. Trong nhng trng hp , cn phi tr v thng bo cho ngi s dng bit l khng
th p dng hm vi im trung bnh nh vy. Nh vy, hm s c thay i li nh sau:
Function PhanLoai(DiemTB) As String
If (DiemTB < 0) Or (DiemTB > 10) Then
PhanLoai = #N/A
Exit Function
End If

If (DiemTB >= 5) Then


PhanLoai = "Do"
Exit Function
End If

If (DiemTB < 5) Then


PhanLoai = "Truot"
Exit Function
End If
End Function

V nh vy, k t lc ny, mi khi v tnh nhp cc gi tr im khng thch hp, hm s tr v


mt thng bo li l #N/A. Mc d trng rt ging li trong Excel, nhng thc cht y vn
ch l mt chui thng thng.
tr v gi tr li thc s, VBA cung cp thm mt hm tn l CVErr, hm ny s chuyn
i mt s thnh mt gi tr li tng ng. Vi gi tr li thc s nh th, tt c nhng hm c
tham chiu cha gi tr li cng s tr v gi tr li tng t. V nh vy, ngi dng ch cn
thay i cu lnh PhanLoai = #N/A bng cu lnh PhanLoai = CVErr(xlErrNA). Cn
lu l kiu tr v ca hm CVErr l kiu Variant, do vy cng cn phi thay i kiu gi tr
tr v ca hm l Variant.
Hm s c hiu chnh li nh sau:
Function PhanLoai(DiemTB) As Variant
If (DiemTB < 0) Or (DiemTB > 10) Then
PhanLoai = CVErr(xlErrNA)
Exit Function
End If
If (DiemTB >= 5) Then
PhanLoai = "Do"
Exit Function
End If

112
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

If (DiemTB < 5) Then


PhanLoai = "Truot"
Exit Function
End If
End Function

CH s dng hm tr v thng bo li, ngha l c s dng hm CVErr, ngi dng


phi khai bo kiu d liu tr v ca hm l kiu Variant.

V nh vy, mi khi gi tr u vo khng ng, hm s tr v gi tr li, gip ngi s dng


c th nhn ra v sa li kp thi.

Hnh IV-9: Hm tr v li

Trong on m lnh trn, tr v thng bo li #N/A th tham s ca hm CVErr phi l


hng s xlErrNA. C rt nhiu gi tr li khc nhau, mi gi tr li c mt hng s tng ng.
Bng di y s lit k mt s gi tr li cng nh cc hng s tng ng trong VBA.
Gi tr li Hng s Gii thch
#DIV/0! xlErrDiv0 Cng thc c chia mt s cho 0. Li ny cng pht sinh khi chia cho
mt trng.
#N/A xlErrNA Li ny biu th d liu khng c.
#NAME? xlErrName Hm c tn m Excel khng th nhn dng c. Thng xy ra khi
nhp tn hm sai, hoc thay i tn hm nhng cha cp nht
trong bng tnh.
#NULL! xlErrNull Gi tr rng, chng hn nh tm giao ca hai vng khng giao nhau.
#NUM! xlErrNum C vn vi gi tr no . V d nh ngi dng nhp vo s m,
trong khi ch chp nhn s dng.
#REF! xlErrRef Tham chiu n khng tn ti. iu ny thng xy ra khi b
xo khi bng tnh.
#VALUE! xlErrValue Hm c cha tham s hoc cng thc khng ph hp v kiu d
liu

4. Add-in v Phn phi cc ng dng m rng


Mt tnh nng rt hu ch cho ngi lp trnh trong Excel l kh nng to Add-In. Phn ny s
trnh by nhng li ch khi s dng Add-In, cch thc to v s dng Add-In.

113
GIOTRNHTNGHOTHITKCUNG

4.1. Khi nim v Add-In


Add-In l mt chng trnh gn thm vo Excel nhm b sung thm tnh nng cho Excel.
Thng thng, cc tp cha Add-In c phn m rng l XLA v c cu trc tng t nh cc
workbook ca Excel.
So vi cc ng dng trong tp XLS ca Excel, vic s dng Add-In c mt s u im sau:
n gin ho vic s dng hm. i vi cc hm lu trong Add-In, khi s dng khng
cn phi thm tn workbook pha trc tn hm. Ly v d nh ngi dng to mt
hm c tn l MOVAVG trong workbook c tn l Newfuncs.xls. Khi mun s dng
hm trong mt workbook khc, ngi dng phi s dng hm vi cch thc nh sau:
=Newfuncs.xls!MOVAVG(A1:A50)
Nhng nu hm c lu trong mt Add-In ang c m trong Excel, ngi dng
khng cn phi thm tn Add-In hay tn workbook trc tn hm na, ch n gin l
s dng tn hm m thi:
=MOVAVG(A1:A50)
n gin ho qu trnh m ng dng. Mi Add-In sau khi c ci t s c t ng m
mi khi bt u khi ng chng trnh Excel. Hn na, hp thoi cnh bo an ninh ca Excel
s khng xut hin (xem mc Khi Macro c to ra cha p ng nhu cu th ngi s
dng c th thay i, b sung m lnh cho Macro . Qu trnh hiu chnh Macro c thc
hin thng qua VBAIDE. hiu chnh Macro, ta c th dng trnh qun l Macro (xem mc
Qun l Macro trang 104) hoc truy cp trc tip trong VBAIDE. V bn cht, vic hiu
chnh (sa i) Macro tng ng nh viclp trnh xy dng nn Macro .
Vn an ton khi s dng Macro trang 107), trnh gy ra s lng tng cho nhng
ngi dng cha c kinh nghim.
Trnh gy ra s bi ri cho ngi dng bi ton b d liu trong cc Sheet ca tp Add-
In c che du, nh vy, vi ngi dng t kinh nghim, h s khng phi thc mc hay
cm thy kh hiu khi khng nhn thy nhng d liu ny.
Ngn chn vic truy cp vo m lnh. Khi phn phi ng dng dng Add-In c t ch
bo mt bng mt khu, ngi dng khng th xem hoc thay i m lnh ca ng dng.
iu ny trnh c vic sao chp m lnh ca chng trnh.
4.2. Trnh qun l Add-In
Vic qun l cc Add-In trong Excel c thc hin rt n gin thng qua trnh qun l Add-
In. hin th trnh qun l Add-In, chn trnh n ToolsAdd-Ins

114
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh IV-10: Trnh qun l Add-In

ti/d b Add-In trong Excel: kch chut vo hp kim bn tri tn ca Add-In.


m mt Add-In: chn nt lnh Browse Chn Add-In cn m.
GI Thng thng, tp Add-In s c phn m rng l XLA v c lu tr trong th
mc %UserProfile%\Application Data\Microsoft\AddIns.

4.3. To Add-In
Nhn chung, vic to Add-In c thc hin rt d dng bng cch chuyn t workbook thng
thng sang dng Add-In. ng nhin, khng phi workbook no cng thch hp chuyn
thnh Add-In. Nhn chung, workbook thch hp nht chuyn thnh Add-In l workbook c
cha m lnh. Mt workbook nu ch cha worksheet th c th s khng th s dng c khi
chuyn thnh Add-In, bi l tt c cc sheet trong workbook s b n i khi c chuyn thnh
Add-In.
Vic to Add-In t mt workbook thng thng c thc hin rt d dng theo cc bc sau:
1. Vit m lnh cho workbook nh bnh thng, m bo tt c cc m lnh u c th thc
hin bnh thng m khng c li xy ra. Nn nh l to giao din sao cho ngi dng c
th truy cp v s dng c cc tnh nng trong Add-In. Mt cch thc hin vic ny l
to mt trnh n mi cho Add-In, trong y c cha cc mc trnh n tng ng vi cc
tnh nng ca ng dng. Chi tit v cch to trnh n, xem mc To trnh n tu bin
trang 174.
2. Kim tra ng dng bng cch thc thi khi ang kch hot mt workbook khc. iu ny
m phng c tnh hung nh khi workbook c chuyn thnh Add-In, bi l bn
thn Add-In khng hin th cc sheet m lc ny tt c cc thao tc u thc hin trn cc
sheet ca workbook khc.
3. Nu khng mun ngi khc xem c m lnh ca ng dng th thc hin bc ny: t
mt khu bo v. Kch hot VBAIDE chn workbook tng ng trong ca s Project.
Chn trnh n Tools xxx Properties (xxx l tn D n VBA), sau chn th

115
GIOTRNHTNGHOTHITKCUNG

Protection. Tch vo Lock project for viewing, v nhp vo mt khu (2 ln) chn
OK.

Hnh IV-11: Hp thoi Project Properties

4. Kch hot li Excel, chn trnh n File Properties, sau chn th Summary. Nhp
vo cc thng tin cho Add-In hin th trong trnh qun l Add-In. Mc Title s l tn
ca Add-In, nu khng nhp vo mc ny, tn ca Add-In s l tn tp Add-In. Mc
Comments s l phn m t v Add-In.
5. Chn trnh n File Save As
6. Trong hp thoi Save As, chn Microsoft Excel add-in (*.xla) trong mc Save as type.

Hnh IV-12: Hp thoi Save As

7. Chn Save. Mt bn sao ca workbook c lu (vi phn m rng l *.xla), v tp


XLS cha workbook vn cn gi nguyn trong Excel.

116
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

CH Mt workbook khi c chuyn thnh Add-In phi c t nht mt worksheet.


Chng hn nh khi mt workbook ch cha Chart Sheet hoc Dialog Sheet, th la chn
Microsoft Excel add-in (*.xla) s khng xut hin trong mc Save as type trong hp thoi
Save As. La chn ny ch xut hin khi c mt worksheet c chn lc chn trnh n
File Save As.

Sau khi to Add-In, nn lu gi li workbook ngun (dng XLS) c th hiu chnh hay
cp nht m lnh v cc d liu khc sau ny. Cn phi lm iu ny v tp Add-In khng th
chuyn i ngc li thnh workbook.
4.4. Phn phi v Ci t Add-In
Vic phn phi cc Add-In c thc hin rt n gin, ch cn sao chp tp *.xla n cc my
khc, sau ci t cc Add-In thng qua trnh qun l Add-In trong Excel.
ci t Add-In, thc hin theo cc bc sau:
1. Trong Excel, chn trnh n Tools Add-Ins hin th trnh qun l Add-In
2. Chn nt Browse, sau tr n tp Add-In cn ci t trong Excel chn OK. Tn ca
Add-In s c hin th trong trnh qun l Add-In.
3. Chn OK ln na chp nhn ci t Add-In. Gi y, ngi dng c th s dng tt c
cc tnh nng c trong Add-In va c ci t.
5. H thng cc i tng trong Excel
im khc bit ca lp trnh trn Excel so vi vic lp trnh trn cc ng dng nn khc chnh
l vic thc hin cc thao tc nhm tc ng trc tip n cc thnh phn trong Excel thng qua
cng c lp trnh. V vy, c th to ra cc ng dng trn nn Excel, ngi dng cn phi
hiu r thnh phn cng nh cch thao tc trn cc thnh phn ca Excel.
5.1. M hnh i tng trong Excel
to ci nhn tng quan cho ngi lp trnh, Microsoft cung cp m hnh i tng s dng
trong Excel. Nh c m hnh i tng ny m ngi lp trnh c th hiu r cu trc h thng
i tng trong Excel, tm c ng i tng khi cn thc hin mt thao tc no . M
hnh i tng y c trnh by trong ti liu hng dn ca Excel hoc trong cc ti liu
tham kho cui gio trnh ny. y ch cp n mt s i tng thng c s dng
trong lp trnh trn Excel.

117
GIOTRNHTNGHOTHITKCUNG

Application

Workbooks

Workbook

Worksheets
Rows

Worksheet

Columns
Ch gii:
Range Tp i tng

i tng
Cells
Mi i tng (Object), cng ging nh mt vt th, u c nhng tnh cht v nhng hnh vi
c trng cho chng v c thng nht gi l thnh phn ca i tng. Trong lp trnh, tnh
cht ca i tng c biu din thng qua khi nim thuc tnh (properties), cn hnh vi
c biu din thng qua khi nim phng thc (methods). Chng hn nh i tng
Application, l i tng th hin cho Excel, c thuc tnh Caption cha tiu ca Excel
v phng thc Quit dng thot khi Excel.
truy cp n cc thnh phn (phng thc, thuc tnh, ) ca i tng, ta s dng du
chm ( . ), v d sau thc hin phng thc Quit thot khi Excel nh cp trn:
i tng
Th nh ph n

Application.Quit

Du chm

Cutrcphncpitng
i tng Application (chnh l ng dng Excel) cha nhiu i tng khc, chng hn nh:
Workbooks (tp i tng cha tt c cc i tng Workbook ti liu Excel)
Windows (tp i tng cha tt c cc i tng Window - cc ca s trong Excel)
AddIns (tp i tng cha tt c cc i tng Add-in)
Tp i tng Workbooks cha tt c cc i tng Workbook ang m, v mi i tng
Workbook li cha cc i tng khc nh:
Worksheets (tp i tng cha cc i tng Worksheet)
Charts (tp i tng cha cc i tng Chart)
n lt mnh, cc i tng trn cng c th cha nhiu i tng khc na. Mt i tng
Worksheet trong tp i tng Worksheets c th cha cc i tng khc, chng hn nh:
118
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

ChartObjects (tp i tng cha tt c i tng ChartObject biu trong Excel)


Range
PageSetup
C nh vy, ngi lp trnh c th truy cp n tng thnh phn ca Excel thng qua h thng
phn cp cc i tng trong Excel.
TpitngCollection
Mt khi nim rt quan trng trong lp trnh VBA l khi nim tp i tng (hay Collection).
Tp i tng l mt nhm cc i tng cng lp vi nhau (v ng nhin, bn thn tp i
tng cng l mt i tng). Chng hn nh tp i tng Workbooks cha tt c cc i
tng Workbook ang c m hay tp i tng Worksheets cha tt c cc Worksheet trong
mt Workbook no . Ngi lp trnh c th thao tc trn ton b cc i tng c trong tp
i tng hoc c th trn mt i tng ring l trong tp i tng . tham chiu n
mt i tng ring l trong tp i tng, c th s dng tn ca i tng theo cch sau:
Worksheets(Sheet1)

Nu Sheet1 l sheet u tin trong tp i tng Worksheet, th ta cn c th tham chiu da


trn s th t ca Sheet1 theo cch sau:
Worksheets(1)

Tng t, tham chiu n Sheet th 2 trong tp i tng Worksheets, ta c th s dng


lnh: Worksheets(2).
Mi tp i tng c cc phng thc dng thao tc trn chnh tp i tng . Cc
phng thc ny rt khc nhau trn cc tp i tng khc nhau. V vy, ngi lp trnh c th
s dng Object Browser tm hiu v cc phng thc trong tp i tng.
5.2. Mt s i tng c bn trong Excel
H thng i tng trong Excel rt a dng v tng ng dng biu din cc thnh phn
trong Excel. Phn ny s gii thiu chi tit v cc i tng v tp i tng chnh trong Excel
cng vi cc phng thc/thuc tnh ca chng thng qua cc m lnh tng ng.
5.2.1. i tng Application
i tng Application chnh l ng dng Excel m ngi dng ang lm vic trn , mi
ln chy Excel s c mt i tng Application c to ra. Application l i tng cao
nht (i tng gc) trong cy i tng ca Excel. Vic truy cp n cc i tng khc, cn
phi c thc hin thng qua i tng Application.
i tng Application c cha nhiu thit lp cho ng dng (chng hn nh cc la chn
trong trnh n ToolsOptions) v rt nhiu i tng trong ng dng (chng hn nh cc
ti liu ang c m - Workbooks, hay bng tnh hin hnh -ActiveSheet).
Vic to mi mt i tng Application tng ng vi vic khi ng Excel, do ,
khi ng Excel t mi trng lp trnh khc, ngi lp trnh phi vit on m lnh to
mi mt i tng Application. on m lnh sau s khi ng Excel t chng trnh ngoi
(v d nh khi lp trnh trn VB) v m mt workbook trong Excel:
Dim xl As Excel.Application
Set xl = New Excel.Application Khi ng Excel
xl.Workbooks.Open "newbook.xls" M mt Workbook

119
GIOTRNHTNGHOTHITKCUNG

Di y l cc phng thc v thuc tnh thng c s dng trong i tng


Application.

ActiveCell
Thuc tnh ActiveCell th hin cho hin thnh trong bng tnh Excel. Kiu d liu ca
ActiveCell l kiu Range. Ngi dng c th truy cp n a ch ca hin hnh bng cch
truy cp thm vo mt cp na trong cy phn cp i tng, l thuc tnh Address:
MsgBox Application.ActiveCell.Address

on m trn hin th a ch ca hin hnh theo dng a ch tuyt i, chng hn nh $A$6.


Cn lu l thuc tnh Address ch tr v a ch ca , ch khng phi a ch y bao gm
c tn sheet v workbook.
ActivePrinter
Thuc tnh ActivePrinter cha tn ca my in hin hnh. Kiu d liu ca thuc tnh
ActivePrinter l kiu String. on m sau hin th tn ca my in hin hnh:
MsgBox Application.ActivePrinter

Thuc tnh ny rt c ch khi thng bo cho ngi dng bit v my in hin hnh trc khi in
mt bng tnh no .
ActiveSheet
Thuc tnh ny tr v i tng sheet ang hin hnh trong Excel. Cng cn ch rng trong
Excel c nhiu loi sheet khc nhau nh Worksheet (loi hay dng nht), Chartsheet, chi tit
xem thm mc i tng Workbook trang 123. on m sau s dng hm TypeName, hm
tr v kiu d liu ca bin, t bit c kiu ca sheet hin hnh:
MsgBox TypeName(Application.ActiveSheet)

ActiveWindow
Thuc tnh ny tr v i tng cha ca s hin hnh, nu khng ca s no c m th s
tr v gi tr Nothing. Kiu d liu ca thuc tnh ny l Window. on m sau s thu nh ca
s hin hnh thng qua thuc tnh WindowState:
Application.ActiveWindow.WindowState = xlMinimized

ActiveWorkbook
Thuc tnh ny tr v i tng cha workbook nm trong ca s hin hnh (tp XLS ang lm
vic), nu khng c ca s no c m hoc ca s l ca s khng cha workbook (nh
ca s Info, Clipboard,...) th s tr v gi tr Nothing. Kiu d liu ca thuc tnh ny l
Workbook. on m lnh sau s hin th nn ca workbook hin hnh:
MsgBox Application.ActiveWorkbook.Name

Thuc tnh ActiveWorkbook v ActiveWindow rt d nhm ln vi nhau. Thot nhn, mi


workbook cng ging nh mt ca s trong Excel, nhng thc cht khng phi vy. r hn
s khc bit gia workbook v ca s, ta to thm mt ca s mi bng cch chn trnh n
WindowNew Window. Ca s mi c to c ni dung ging nh ca s ban u, nhng
ngi dng c th la chn nhng vng khc nhau trn hai ca s (mc d c hai ca s u l

120
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

th hin ca cng mt workbook). V nh vy, mi mt workbook c th c hin th trn


nhiu ca s khc nhau, nhng mi mt ca s ch hin th c mt workbook m thi.
AddIns
L tp i tng cha tt c cc add-in c ti vo trong Excel. on m lnh sau s ln
lt hin th tn ca tt c cc add-in, bao gm c ng dn:
Sub Hien_thi_Add_in()
Dim MyAddin As AddIn
For Each MyAddin In Application.AddIns
MsgBox MyAddin.FullName
Next MyAddin
End Sub

Calculate
L phng thc thc hin qu trnh tnh ton li trn ton b sheet, ging nh khi nhn phm
F9.
Application.Calculate

Calculation
L thuc tnh dng thit lp ch thc hin tnh ton trong chng trnh Excel. Cc gi tr
c th gn cho thuc tnh ny l xlCalculationAutomatic (tnh t ng), xlCalculationManual
(tnh th cng) v xlCalculationSemiautomatic (tnh bn t ng tnh t ng ngoi tr phn
bng). V d on m sau chuyn ch tnh thnh bn t ng:
Application.Calculation= xlCalculationSemiautomatic

iu ny tng ng vi vic chn trnh n ToolsOptions, chn th Calculation v chn


la chn Automatic except tables.
Ch tnh mc nh trong Excel l ch tnh t ng. Tuy nhin, i vi nhng bng tnh c
khi lng tnh ton ln, nu ch tnh t ng th mi ln thay i s liu l mt ln thc
hin tnh ton. Trong nhng trng hp nh vy, nn chuyn sang ch th cng, sau tin
hnh thay i s liu tnh ton. Sau khi thay i xong cc s liu th mi tin hnh tnh ton
mt ln cui.
Caption
L thuc tnh dng cha tiu ca chng trnh Excel. Kiu d liu ca thuc tnh ny l
String. on m sau s thay i tiu ca chng trnh Excel:
Application.Caption = "Chuong Trinh EXCEL"

V y l kt qu thc thi on m trn

121
GIOTRNHTNGHOTHITKCUNG

Mun thit lp li gi tr mc nh (Microsoft Excel), ch cn gn gi tr ca Caption=


ColumnsvRows
L hai tp i tng th hin tt c cc ct v cc hng trong sheet hin hnh, ta c th s dng
truy cp mt ct hoc mt hng no .
on m sau s chn ton b ct C:
Application.Columns(3).Select

Cn on m sau s chn ton b hng th 9:


Application.Rows(9).Select

Dialogs
Dialogs l tp i tng cha tt c cc hp thoi c nh ngha sn trong Excel. Chi tit
v tp i tng ny, tham kho mc Cc hp thoi mc nh trong Excel Tp i tng
Dialogs trang 166.
Help
Phng thc ny hin th tp tr gip do ngi dng ch nh.
Application.Help "C:\Program Files\" & _
"Microsoft Office\OFFICE11\1033\VBAXL10.CHM"

Nu khng ch ra tp tr gip, phng thc ny s hin th tp tr gip mc nh trong Excel.


Quit
Phng thc ny s ng chng trnh Excel li, ging nh khi la chn trnh n FileExit.
Chng trnh s nhc ngi dng lu li cc tp cha c lu.
Application.Quit

RecentFiles
RecentFiles l tp i tng lu gi nhng tp m sau cng nht trong Excel. Mi i tng
trong tp i tng RecentFiles c kiu d liu l RecentFile. V d sau s hin th ln lt tn
ca cc tp m sau cng nht trong Excel:
Public Sub RecentFile()
Dim myRecentFile As RecentFile
For Each myRecentFile In Application.RecentFiles
MsgBox myRecentFile.Path
Next myRecentFile
End Sub

Selection
Thuc tnh ny th hin cho i tng ang c chn trong Excel. Kiu d liu tr v ca
thuc tnh ny tu thuc vo i tng c chn. Nu i tng chn l cc , biu , hoc
mt ng thng th kiu d liu tr v tng ng s l Range, ChartArea, Line... V vy khi
lp trnh, cn phi ch kim tra kiu d liu tr v ca thuc tnh ny c cc thao tc hp
l, trnh li xy ra khi thc thi chng trnh. V d sau s hin th a ch ca cc ang c
chn trong Excel:

122
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Dim mySelection As Variant


Set mySelection = Selection
If TypeName(mySelection) = "Range" Then Kim tra kiu d
liu
MsgBox mySelection.Address
Else
MsgBox "i tng c chn khng phi kiu Range"
End If

Sheets
Sheets l tp i tng cha tt c cc sheet c trong workbook hin hnh, gm c 4 loi sheet:
worksheet, chart sheet, macro sheet v dialog sheet. on macro sau s hin th tn v kiu ca
tt c cc sheet c trong workbook hin hnh:
Sub Sheets()
Dim mySheet As Variant
For Each mySheet In Application.Sheets
MsgBox mySheet.Name & " - " & TypeName(mySheet)
Next mySheet
End Sub

ThisWorkbook
Thuc tnh ny tr v i tng th hin cho workbook hin hnh, ni ang thc hin macro.
Kiu d liu ca thuc tnh ny l Workbook.
Undo
Phng thc ny s khi phc li cc thao tc trc trong Excel. Thao tc ny tng t nh
khi chn trnh n EditUndo trong Excel.
Application.Undo

CH Khi truy cp n mt i tng thuc mt i tng khc, nu khng ch r tham


chiu i tng th i c tham chiu s l i tng hin hnh. V d nh nu mun
truy cp vo A1 ca Sheet1 ca workbook hin hnh, thay v s dng cu lnh
ActiveWorkbook.Worksheets(Sheet1).Range(A1) ch cn dng cu lnh
Worksheets(Sheet1).Range(A1). Hoc nu s dng cu lnh Range(A1).Select th
A1 ca sheet hin hnh s c chn.

5.2.2. i tng Workbook


Workbook l mt i tng ph bin trong Excel. Hu ht tt c cc thao tc trn Excel u
c thc hin trn mt workbook no . Trong mi phin lm vic ca Excel c th c rt
nhiu workbook c m, v vic truy cp n mt workbook no s c thc hin thng
qua tp i tng Workbooks, da trn tn hoc ch s ca cc workbook, ch s ny ph thuc
vo trnh t m/to workbook. Ngoi ra, ngi lp trnh cn c th truy xut n workbook
hin hnh thng qua i tng ActiveWorkbook.
to mi mt workbook, s dng phng thc Add c trong tp i tng Workbooks:
Workbooks.Add To mi mt Workbook

Mi workbook trong Excel c th cha nhiu sheet khc nhau (tu thuc vo dung lng b
nh). C 4 loi sheet khc nhau:

123
GIOTRNHTNGHOTHITKCUNG

Worksheet: y l loi sheet ph bin nht, l loi sheet thc hin vic tnh ton v thao
tc chnh trong Excel. Mi sheet bao gm 256 ct v 65536 hng to thnh h thng cc
cha d liu. Ngoi ra, trn mi worksheet cn th cha cc i tng khc nh biu
, cc i tng ho, cc iu khin,
Chart sheet: mi chart sheet thng ch cha mt biu . Thng thng, ngi dng
thch s dng biu nhng trong worksheet hn l s dng biu trong mt chart
sheet ring bit. Tuy nhin, chart sheet li gip cho vic b tr v in n biu thc hin
d dng hn
XLM macro sheets (cn gi l MS Excel 4 macro sheet, l loi sheet li thi, nhng
vn cn h tr): dng cha cc macro XLM. XLM macro sheet cng c cha cc d
liu nhng ch hin th cng thc ch khng hin th kt qu tnh.
Dialog sheets ( li thi, nhng vn cn h tr): l ni cha cc hp thoi tu bin do
ngi dng t to (ging nh Userform trong VBA).
Cc phng thc v thuc tnh thng c s dng ca i tng workbook:
Activate
Phng thc ny s kch hot mt workbook trong tp i tng Workbooks thnh workbook
hin hnh, v sheet hin hnh ca workbook s c kch hot lm sheet hin hnh trong
Excel.
kch hot workbook c tn Book1 lm workbook hin hnh, thc hin nh sau:
Workbooks(Book1).Activate

Cn kch hot workbook u tin trong Excel, thc hin nh sau:


Workbooks(1).Activate

ActiveSheet
Thuc tnh ny tham chiu n sheet hin hnh ca workbook. Trong mi phin lm vic ca
Excel, s lng Workbook c m l khng hn ch, mi workbook ny u c mt sheet
hin hnh, ngha l khi ta chn lm vic vi workbook th con tr s nm trong sheet ny.
Kiu d liu tr v ca thuc tnh ny tu thuc vo kiu sheet hin hnh (mt trong 4 loi).
Trong i tng Application cng c thuc tnh ActiveSheet, nhng thuc tnh ny l sheet
hin hnh ca workbook hin hnh, ngha l ni c con tr ang hot ng, nh vy, nu
workbook ny l hin hnh th thuc tnh ActiveSheet ca i tng Application v ca i
tng Workbook l nh nhau.
on m lnh sau hin th tn ca sheet hin hnh ca workbook tn l Book1:
MsgBox Workbooks(Book1).ActiveSheet.Name

Close
Phng thc ny s ng workbook li, tng t nh khi s dng trnh n FileClose trong
Excel. Ngoi ra cn c cc tham s tu chn khc phc v cho vic lu tr tp.
Workbooks(Book1).Close ([SaveChanges],[Filename])

Trong ngha ca cc tham s nh sau:

124
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

SaveChanges: tham s tu chn. Bng TRUE nu mun lu tt c cc thay i, v bng


FALSE nu ch mun ng workbook m khng lu. Nu b qua, tu chn ny th
phng thc ny s ging hon ton nh khi ta chn trnh n FileClose.
Filename: tham s tu chn. S lu tp vi tn cha trong Filename.
PrintOut
Phng thc ny s in sheet hin hnh ca workbook ra my in.
Workbooks(1).PrintOut

Phng thc ny cn c rt nhiu tham s khc na, tt c u l tham s tu chn:


From: s th t trang bt u in, nu b qua th s in t u.
To: s th t trang cui cng c in, nu b qua th s in n trang cui cng.
Copies: s bn sao khi in ra, nu b qua th ch in mt bn.
Preview: nu bng TRUE, Excel s hin th ca s xem trc khi in. Nu bng FALSE,
hoc b qua, th s in trc tip.
ActivePrinter: thit lp tn cho my in hin hnh.
PrintToFile: nu bng TRUE s in ra tp. Trong trng hp , nu khng gn gi tr
cho tham s PrToFileName, Excel s hin th hp thoi ngi dng nhp vo tn tp.
Collate: nu bng TRUE v s bn sao ln hn 1, Excel s sp xp cc bn in thnh tng
tp hon thin.
PrToFileName: nu tham s PrinToFile gn bng TRUE th tham s ny s thit lp tn
tp in ra.
PrintPreview
Phng thc ny s hin th ch xem trc khi in cho sheet hin hnh ca workbook tham
chiu.
Workbooks(1).PrintPreview

SavevSaveAs
Cc phng thc ny s lu workbook v thng c dng trc khi ng workbook.
Phng thc Save s lu nhng thay i vo chnh workbook . Cn phng thc SaveAs s
lu workbook ra mt tp mi. on m sau s lu workbook c tn Book1 v sau lu
workbook c tn l Book3 vi tn mi l MyFile.xls:
Workbooks(Book1).Save
Workbooks(Book3).SaveAs C:\MyFile.xls

Saved
Thuc tnh ny tr v gi tr TRUE nu workbook c lu, v ngc li l FALSE. on
m sau s hin th trng thi lu ca workbook:
MsgBox Workbooks(1).Saved

Sheets

125
GIOTRNHTNGHOTHITKCUNG

Tp i tng Sheets ca workbook cng ging nh tp i tng Sheets ca i tng


Application (xem li mc Sheets trang 123). Tuy nhin, tp i tng sheets ca workbook
tham chiu trc tip n cc sheet trong workbook , cn tp i tng sheets ca i tng
Application li tham chiu n cc sheet trong workbook hin hnh.
Windows
Windows l tp i tng cha tt c cc ca s c trong i tng Workbook. Chi tit v tp
i tng Windows, xem thm mc i tng Window trang 126.
Worksheets
Worksheets l tp i tng cha tt c cc worksheet c trong i tng Workbook. Chi tit
v tp i tng Worksheets, xem thm mc i tng Worksheet trang 128.
5.2.3. i tng Window
i tng Window th hin cho mt ca s bn trong ng dng Excel. Nh c cp,
i tng Window rt d nhm ln vi i tng Workbook. Thot nhn, mi workbook cng
ging nh mt ca s trong Excel, nhng thc cht khng phi vy. r hn s khc bit
gia i tng workbook v i tng window, ta to thm mt ca s mi bng cch chn
trnh n WindowNew Window. Ca s mi c to c ni dung ging nh ca s ban
u, nhng ngi dng c th lm vic trn hai ca s ny ging nh khi lm vic trn 2
workbook ring bit (mc d c hai ca s u l th hin ca cng mt workbook). ng
nhin, s thay i ca s ny s c t ng cp nhp trong cc ca s cn li. V nh vy,
mi mt workbook c th c th hin bng nhiu ca s khc nhau, nhng mi mt ca s
ch th hin c mt workbook m thi.
truy xut n mt i tng trong tp i tng Windows, ngi dng c th truy cp theo
tn hoc theo th t ca ca s. truy xut n ca s c tiu l Book1 (l dng ch xut
hin trn thanh tiu ca ca s), ta s dng cu trc sau:
Windows(Book1)

truy xut n ca s th 2 trong tp i tng Windows, ta s dng cu trc sau:


Windows(2)

S th t ca mt ca s l khng c nh m thay i tu theo s ca s hin th v s thay


i ca ca s hin hnh. Ca s hin hnh lun c th t l l.
Di y l cc phng thc v thuc tnh thng s dng trong i tng Window:
Activate,ActivateNextvActivatePrevious
Cc phng thc ny dng kch hot mt ca s no trong tp i tng Windows.
Activate, ActivateNext v ActivatePrevious dng kch hot ca s c ch nh, ca s tip
theo v ca s trc ca ca s c ch nh. on m sau s kch hot ca s tn l Book1,
sau s kch hot ca s nm pha trc ca ca s Book1.
Windows("Book1").Activate
Windows("Book1").ActivatePrevious

ActiveCell
Thuc tnh ny tham chiu n hin hnh, l c con tr ang hot ng, trong i tng
Window. on m sau s hin th a ch ca hin hnh trong ca s th 2 trong tp i
tng Windows:

126
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

MsgBox Windows(2).ActiveCell.Address

ActiveSheet
Thuc tnh ny tham chiu n sheet hin hnh ca workbook ang xt.
Caption
Thuc tnh ny cha ni dung ghi trn thanh tiu ca ca s. on m sau s thay i dng
tiu ca ca s hin hnh:
ActiveWindow.Caption = MyWindow

Close
Close l hm thc hin ng ca s ang xt. Hm ny tr v gi tr TRUE nu ng c ca
s, v tr v gi tr FALSE nu ca s khng c ng. Hm ny cng cha cc tham s tu
chn khc, chi tit xem thm phng thc Close ca i tng Workbook trang 124.
Ccthuctnhvhinth
i tng Window c cha nhiu thuc tnh thit lp cc la chn v hin th trong ca s
nh sau:
Thuc tnh Gii thch
DisplayFormulas TRUE: tt c cc s hin th cng thc ch khng phi gi tr
DisplayGridlines TRUE: hin th cc ng li bn trong ca s
DisplayHeadings TRUE: hin th thanh th hin v tr ca ct v hng
DisplayHorizontalScrollBar TRUE: hin th thanh cun ngang
DisplayOutline TRUE: hin th thanh th hin Outline
DisplayRightToLeft TRUE: hin th trt t ct tng dn t phi sang tri. Mc nh l FALSE
DisplayVerticalScrollBar TRUE: hin th thanh cun ng
DisplayWorkbookTabs TRUE: hin th th cha cc sheet trong workbook
DisplayZeros FALSE: cc c gi tr bng 0 s khng hin th

on m sau s n i th cha cc sheet trong workbook hin hnh:


ActiveWindow.DisplayWorkbookTabs = False

NewWindow
Phng thc ny s to mt ca s mi da trn ca s ang c tham chiu ging nh khi
chn trnh n WindowNew Window trong Excel vy.
ActiveWindow.NewWindow

RangeSelection
127
GIOTRNHTNGHOTHITKCUNG

Thuc tnh ny tham chiu n vng ang c chn trong ca s c tham chiu. Kiu d
liu ca thuc tnh ny l Range. on m sau s hin th a ch ca vng c chn trong ca
s hin hnh:
MsgBox ActiveWindow.RangeSelection.Address

Gi tr hin th c th dng a ch tuyt i ca mt - $C$3, hoc mt vng chn -


$B$10:$D$12.
SelectedSheets
SelectedSheets l tp i tng cha tt c cc sheet ang c ngi dng la chn. Kiu d
liu ca thuc tnh ny l Sheets, v th tt c cc thao tc trn tp i tng SelectedSheets
cng ging nh trn tp i tng Sheets
WindowState
Thuc tnh ny lu tr trng thi ca i tng Window. C 3 trng thi ca i tng
Window nh sau:
Trng thi i tng Window Gi tr ca thuc tnh
Ca s c phng i ton mn hnh xlMaximized
Ca s c thu nh xlMinimized
Ca s trng thi thng thng xlNormal

on m sau s thu nh ca s hin hnh:


ActiveWindow.WindowState = xlMinimized

Zoom
Thuc tnh ny dng thit lp ch phng i cho cho ca s, ging nh khi ta s dng
trnh n ViewZoom trong Excel. on m sau s phng i ca s hin hnh ln 120%:
ActiveWindow.Zoom = 120

GI Trong Excel, thu/phng ca s, ch cn nhn phm CTRL + cun phm gia ca


chut.

5.2.4. i tng Worksheet


i tng Worksheet th hin cho mt worksheet trong mt workbook. y l i tng rt
ph bin trong excel, hu ht cc thao tc u c tin hnh trong mt worksheet.
CH Worksheet ch l mt trong nhiu dng sheet ca mt workbook. Chi tit v cc
loi sheet trong Excel, xem thm mc i tng Workbook trang 123.

Trong cy phn cp i tng, i tng Worksheet nm sau tp i tng Worksheets ca i


tng Workbook. V vy, cc i tng Worksheet u c truy cp thng qua tp i tng
Worksheets. Tng t nh i vi i tng Window, mi i tng Worksheet u c truy
cp thng qua tp i tng Worksheets bng tn ca worksheet hoc theo th t ca n.
Mt cch khc bit th t ca worksheet, l xem th t xut hin trn th cha cc sheet
trong bng tnh.

128
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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 121):
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
EditDelete 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
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
125.

1
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 InsertComment trong Excel.
129
GIOTRNHTNGHOTHITKCUNG

Worksheets(Sheet2).PrintOut PrintPreview:=True In, c xem


trc
Worksheets(Sheet3).PrintPreview Xem trc khi
in

ProtectvUnprotect
Phng thc Protect s bt ch bo v cho worksheet ging nh khi chn t trnh n
ToolsProtectionProtect 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 Protect
Worksheets(Sheet2).Protect Bt ch bo v
Worksheets(Sheet2).Protect Password:="Excel" 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 131.
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
FormatSheetBackground 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 nh
nn

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
FormatSheetHide/Unhide trong Excel.
Worksheets(Sheet1).Visible = False n Sheet1
Worksheets(Sheet1).Visible = True Hin th li Sheet1

NamettnchomtvngdliutrongWorksheet

130
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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

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 Cch th nht
Worksheets("Sheet1").Range("B2.C3") = 9 Cch th hai

131
GIOTRNHTNGHOTHITKCUNG

Worksheets("Sheet1").Range("B2", "C3") = 9 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 Cch th nht
Worksheets("Sheet1").[B2.C3] = 9 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:C3
Worksheets("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:C4
Worksheets("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
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

132
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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 Xo ch thch vng A1:C3
Range("B2").AddComment "Chu thich moi" 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 135.
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 Xo tt c
Worksheets(Sheet2).Range(A1:C3).ClearContents Xo ni dung
Worksheets(Sheet2).Range(A1:C3).ClearFormats Xo nh dng

ColumnvRow
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 Hin th gi tr
2
MsgBox Worksheets("Sheet1").Range("B3:D12").Row Hin th gi tr
3

133
GIOTRNHTNGHOTHITKCUNG

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 th t
ct
Next myColumns
End Sub

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:
Worksheets("Sheet1").Range("A4:B5").Offset(-2, 3).Value = 9

134
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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 c v hin th gi tr A1
Range("B2:C3").Value = 9 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.
Excel 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


135
GIOTRNHTNGHOTHITKCUNG

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

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.

136
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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 Excel


Khi 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).
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).

137
GIOTRNHTNGHOTHITKCUNG

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 kin
Nhng 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.

138
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

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 Workbook


Cc 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 kin Thao tc lm pht sinh s kin
Activate Workbook c chn lm workbook hin hnh
AddinInstall Workbook c ci t lm Add-In
AddinUninstall Workbook b g ci t, khng cn l Add-In na
BeforeClose Ngay trc khi workbook b ng li
BeforePrint Ngay trc khi workbook c in hoc xem trc khi in
BeforeSave Ngay trc khi lu workbook
Deactivate Workbook khng cn hin hnh

139
GIOTRNHTNGHOTHITKCUNG

NewSheet Mt worksheet va c to trong workbook


Open M workbook
SheetActivate Mt sheet no c chn lm sheet hin hnh
SheetBeforeDoubleClick Ngi dng kch p chut trn sheet no . S kin ny xy ra ngay
trc khi kch p.
SheetBeforeRightClick Ngay trc khi ngi dng kch phi chut trn sheet
SheetCalculate Khi trn workshet c thc hin tnh ton no
SheetChange Khi worksheet b thay i
SheetDeactivate Khi mt worksheet no khng cn l sheet hin hnh na
SheetSelectionChange Khi ngi dng thay i vng la chn trn worksheet
WindowActivate Khi mt ca s c chn l ca s hin hnh
WindowDeactivate Khi mt ca s khng cn l ca s hin hnh
WindowResize 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, nhc nh ngi dng thc hin sao lu workbook hng tun. Nu khng phi l
th 6, th s khng c g xy ra c.
Private Sub Workbook_Open()
Dim strThongBao As String
If Weekday(Now) = vbFriday Then
strThongBao = "Hm nay l th Su.
strThongBao = strThongBao & "Nh phi sao lu workbook hng tun!
"
MsgBox strThongBao, vbInformation
End If
End Sub

140
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

SkinBeforeClose
S kin BeforeClose xy ra trc khi mt workbook chun b ng. S kin ny thng c
dng kt hp vi s kin Open. Ly v d nh, c th s dng s kin Open to trnh n
tu bin cho workbook, sau s dng s kin BeforeClose xo trnh n trc khi
workbook c ng. V nh vy, theo cch ny, workbook lun c mt trnh n tu bin m
khng lm nh hng n chng trnh Excel ni chung.
Khun mu ca b x l s kin BeforeClose nh sau:

Private Sub Workbook_BeforeClose(Cancel As Boolean)


M lnh s c t y
End Sub

Tham s Gii thch


Cancel Mc nh, tham s ny bng FALSE khi xy ra s kin. Nu trong b x l s kin c
gn gi tr cho tham s Cancel=TRUE th Excel s dng qu trnh ng workbook li,
workbook s vn cn c m trong Excel.

V d sau s minh ho cch thao tc vi s kin BeforeClose. V d ny s kim tra xem khi s
kin BeforeClose xy ra, workbook c lu hay cha. Nu cha lu s hin th mt hp
thoi yu cu ngi dng la chn cc phng n: lu khng lu quay tr li workbook
(khng ng workbook na bng cch gn tham s Cancel = TRUE):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg As String
Dim Ans As Integer
If Not (Me.Saved) Then
Msg = "Bn c mun lu workbook: "
Msg = Msg & Me.Name & "khng ?"
Ans = MsgBox(Msg, vbQuestion + vbYesNoCancel)
Select Case Ans
Case vbYes
Me.Save
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If
End Sub

Trong on m trn, khi ngi dng chn Yes th s thc hin phng thc Save c trong i
tng workbook. Khi ngi dng chn No th s gn thuc tnh Saved ca i tng
workbook thnh TRUE, iu ny s lm cho Excel ngh l workbook c lu, nhng thc
cht l khng thc hin thao tc lu workbook. Khi ngi dng chn Cancel th tham s
Cancel s c gn bng TRUE, khi Excel s khng ng workbook li.

6.3. S kin trong Worksheet


S kin mc worksheet xy ra bn trong mt worksheet no . Vic x l tt cc s kin
mc worksheet s gip ng dng m rng hot ng hiu qu v chuyn nghip hn. Di y
l mt s s kin trong worksheet:
S kin Thao tc lm pht sinh s kin

141
GIOTRNHTNGHOTHITKCUNG

Activate Worksheet c chn lm worksheet hin hnh


BeforeDoubleClick Ngi dng kch p chut trn sheet. S kin ny xy ra ngay trc
khi kch p.
BeforeRightClick Ngay trc khi ngi dng kch phi chut trn sheet
Calculate Khi trn workshet c thc hin tnh ton no
Change Khi mt no trong worksheet b thay i
Deactivate Worksheet khng cn hin hnh
FollowHyperlink Ngi dng kch chut vo mt siu lin kt trong worksheet
SelectionChange Khi ngi dng thay i vng la chn trn worksheet

Cn phi lu l m lnh ca cc b x l s kin ca worksheet phi c t trong m-un


m lnh ca worksheet tng ng.
SkinChange
S kin Change xy ra khi c mt no trong worksheet b thay i. S kin ny s khng
xy ra khi qu trnh t ng tnh ton ca Excel lm thay i gi tr ca , hoc khi chn mt
i tng vo trong worksheet.
Khun mu ca b x l s kin Change nh sau:

Private Sub Worksheet_Change(ByVal Target As Range)


M lnh s c t y
End Sub

Tham s Gii thch


Target Tham s kiu Range, l /vng d liu b thay i

Khi th tc Worksheet_Change c thc thi (ngha l khi s kin xy ra), th tc ny s nhn


c mt i tng kiu Range c truyn thng qua tham s Target. i tng ny c th l
mt hoc mt vng d liu b thay i. V d sau s hin th mt hp thng bo th hin
a ch ca b thay i (a ch ca i tng Target):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox Vng d liu & Target.Address & thay i.
End Sub

c th hiu r hn cc loi thao tc lm pht sinh s kin Change ca workshet, nhp on


m trn vo trong m-un m lnh ca worksheet. Sau khi nhp xong on m lnh trn, quay
tr li Excel v thc hin thay i worksheet bng nhiu cch khc nhau. Mi khi s kin
Change xy ra, mt hp thng bo s c hin ln thng bo a ch ca vng d liu b tc
ng. Khi thc hin theo cch nh vy, ta c th tnh c pht hin ra nhiu iu th v v s
kin ny. Mt s thao tc lm pht sinh s kin, nhng mt s thao tc khc li khng nh th:
Thay i nh dng ca khng lm pht sinh s kin Change nh mong i, nhng nu
s dng trnh n Edit Clear Formats th li lm pht sinh s kin ny.
Thm, hiu chnh hoc xo ch thch ca cc khng lm pht sinh s kin Change.
Nhn phm DEL trn bn phm s lm pht sinh s kin Change (mc d hin ti ang
l mt trng).

142
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Nhng b thay i khi s dng cc lnh ca Excel c th c hoc khng lm pht sinh
s kin ny. V d, chn trnh n Data Form v Data Sort khng lm pht sinh
s kin. Nhng nu chn trnh n Tools Spelling v Edit Replace th li lm pht
sinh s kin ny.
Nu trong cc chng trnh con ca VBA c lm thay i mt no th s lm pht
sinh s kin Change.
R rng, s kin Change kh phc tp v c th c tnh cht khc nhau tu theo tng phin bn
ca Excel. Tuy nhin, s kin ny li rt hu ch, c bit l nhng ng dng quan trng, i
hi cn phi c s kim tra, gim st n gi tr ca tng .
S kin Change pht sinh khi c mt no b thay i, nhng thng thng ngi lp trnh
ch cn quan tm n mt vng no trong worksheet m thi. V d sau s thc hin gim
st mt vng d liu c tn l SoLieu trong worksheet. Nu ngi dng lm thay i gi tr bt
k no trong vng ny, chng trnh s xut hin thng bo cho ngi dng:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim VRange As Range
Set VRange = Range("SoLieu")
If Not Intersect(Target, VRange) Is Nothing Then
MsgBox " thay i nm trong vng d liu: SoLieu."
End If
End Sub

V d trn s dng bin kiu Range c tn l VRange, th hin cho vng d liu cn gim st
s thay i (l vng d liu c tn l SoLieu). Th tc ny cn s dng hm Intersect ca
VBA, l hm tm giao ca hai vng d liu, kim tra xem vng d liu Target (c truyn
qua tham s ca s kin) c nm trong vng d liu VRange hay khng. Hm Intersect tr v
gi tr Nothing c ngha l hai vng d liu khng c no chung nhau. Do c s dng ton
t Not nn biu thc Not Intersect(Target, VRange) Is Nothing s tr v gi tr
TRUE nu hai vng d liu c t nht mt chung nhau. V vy, nu vng d liu b thay i
c chung no vi vng d liu tn l SoLieu th chng trnh s hin th hp thng bo.
Cc trng hp khc, th tc s t kt thc v khng c g xy ra c.
6.4. S kin trong UserForm
Cc s kin trn UserForm 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 ). Tham kho mc Lm vic vi UserForm v cc thnh
phn iu khin trang 60 bit thm chi tit.
Di y l danh sch cc s kin trong UserForm:
S kin Xy ra khi
Activate UserForm c chn l hin hnh.
Click Ngi dng kch chut vo UserForm.
DblClick Ngi dng kch p chut vo UserForm.
Deactivate UserForm khng cn l ca s hin hnh.
Initialize UserForm c to ra.
KeyDown Ngi dng nhn mt phm (nhng cha th ra).
KeyPress Ngi dng nhn v th mt phm.
KeyUp Ngi dng th mt phm (sau khi nhn xung).
Layout Thay i kch thc hoc v tr ca UserForm.

143
GIOTRNHTNGHOTHITKCUNG

MouseDown Ngi dng kch chut (nhng cha th nt chut).


MouseMove Chut c di chuyn trn UserForm.
MouseUp Ngi dng th mt nt chut (sau khi kch chut).
QueryClose Trc khi UserForm b ng.
Resize Thay i kch thc ca UserForm.
Terminate UserForm b hu (UnLoad).

6.5. S kin khng gn vi i tng


Cc s kin c cp u c gn vi mt i tng no . Phn ny s gii thiu mt
s kin khng gn vi i tng no c rt hay dng, l s kin v OnKey. S kin ny s
c truy cp thng qua i tng Application.
SkinOnKey
Trong khi ngi dng ang lm vic trn bng tnh, Excel lun gim st nhng g ngi dng
g vo t bn phm. V vy, ngi lp trnh c th thit lp phm tt (hoc t hp phm tt)
khi ngi dng nhn phm tt th s t ng thc thi mt th tc mong mun.
ci t cho s kin OnKey, s dng phng thc OnKey c trong i tng Application.
C php ca phng thc ny nh sau:

expression.OnKey Key, Procedure

Tham s Gii thch


expression Biu thc tr v i tng kiu Application
Key Chui k t i din cho phm hoc t hp phm c nhn
Procedure Tham s tu chn kiu Variant, l chui k t cha tn ca th tc s c thc thi
khi ngi dng nhn phm. Nu gi tr ca tham s ny l (chui rng) th s
khng c g xy ra khi ngi dng nhn phm c. Nu tham s Procedure c b
qua, th phm tng ng vi tham s Key s c thit lp li gi tr mc nh ca
Excel, tt c cc th tc c gn cho phm s khng cn hiu lc na.

Cn lu l, tham s Key c th l mt phm hoc mt t hp phm kt hp vi cc phm


ALT, CTRL hoc SHIFT, Mi phm s c i din bng mt k t hoc chui k t,
chng hn nh a i din cho phm a, hay {ENTER} i din cho phm ENTER.
xc nh cc phm khng hin th trn mn hnh khi ngi dng nhn phm tng ng
(chng hn nh phm TAB hoc phm ENTER) cn phi s dng cc gi tr c nh ngha
sn. Di y l danh sch cc m phm c bit . Mi m phm tng ng vi mt phm
trn bn phm.
Phm M phm ENTER ~ (du ng)
ENTER (phm s) {ENTER}
BACKSPACE {BACKSPACE} hoc {BS}
ESC {ESCAPE} hoc {ESC}
BREAK {BREAK}
F1 n F15 {F1} n {F15}
CAPS LOCK {CAPSLOCK}
HELP {HELP}
CLEAR {CLEAR}
HOME {HOME}
DELETE hoc DEL {DELETE} hoc {DEL}
MI TN XUNG {DOWN}
END {END} Phm M phm

144
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

INS {INSERT} SCROLL LOCK {SCROLLLOCK}


MI TN TRI {LEFT} TAB {TAB}
NUM LOCK {NUMLOCK} MI TN LN {UP}
PAGE DOWN {PGDN} SHIFT + (du cng)
PAGE UP {PGUP} CTRL ^ (du m)
RETURN {RETURN} ALT % (phn trm)
MI TN PHI {RIGHT}

s dng t hp phm, ch cn gn tham s Key bng hp ca tt c cc phm n. V d nh


nu cn gn s kin cho t hp phm CTRL+Phm cng, gn tham s Key= ^{+}; hoc vi
t hp phm SHIFT+CTRL+Mi tn phi, gn tham s Key= +^{RIGHT}.
V d sau s x l s kin OnKey ci t li chc nng ca phm PgUp v phm PgDn. Sau
khi thc thi th tc Setup_ConKey, nu ngi dng nhn phm PgDn, Excel s thc thi th tc
DgDn_Sub, cn nu ngi dng nhn phm PgUp, Excel s thc thi th tc PgUp_Sub. V kt
qu s l: khi ngi dng nhn phm PgDn s di chuyn con tr xung hai hng, cn khi nhn
phm PgUp s di chuyn con tr ln hai hng.
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
End Sub

Sub PgDn_Sub()
On Error Resume Next
ActiveCell.Offset(2, 0).Activate
End Sub

Sub PgUp_Sub()
On Error Resume Next
ActiveCell.Offset(-2, 0).Activate
End Sub

V d ny c s dng cu lnh On Error Resume Next b qua cc li c th pht sinh. Chng


hn nh nu hin hnh ang hng u tin, nu c gng di chuyn ln trn s lm pht sinh
li. Hoc nu sheet hin hnh khng phi l worksheet m l chartsheet th cng lm pht sinh
li v khng c hin hnh no trn chartsheet c.
xo s kin OnKey cho mt phm no y, cn phi thc thi li phng thc OnKey m
khng c tham s Procedure. Thao tc ny s tr v chc nng mc nh cho phm c
gn:
Sub Cancel_OnKey()
Application.OnKey {PgDn}
Application.OnKey {PgUp}
End Sub

Mc d bng cch ny, ngi lp trnh c th gn phm tt cho mt Macro bt k, tuy nhin tt
nht l nn s dng trnh qun l Macro gn phm tt cho Macro (xem thm mc Qun l
Macro trang 104)
7. Cc thao tc c bn trong Excel
Phn ny s gii thiu cc on m thc hin nhng thao tc c bn trong Excel.

145
GIOTRNHTNGHOTHITKCUNG

7.1. iu khin Excel


Cc thao tc lin quan n vic iu khin chng trnh Excel u c thc hin thng qua
i tng Application, i tng cp cao nht trong cy phn cp i tng trong Excel.
7.1.1. Thot khi Excel
S dng phng thc c trong i tng Application thot khi Excel. Thng thng, nu
c workbook no cha c lu, Excel s hin th hp thoi nhc ngi dng lu
workbook. Tuy nhin, ngi lp trnh c th thay i cch ng x trn bng mt s cch sau:
Lu tt c cc workbook trc khi thot
Gn thuc tnh Saved ca workbook trc khi thot
Gn thuc tnh DisplayAlerts bng FALSE
V d sau s lu tt c cc workbook ang m trong Excel m khng cn hin th thng bo
cho ngi dng:
Sub QuitSaveAll( )
Dim wb As Workbook
For Each wb In Workbooks
wb.Save
Next
Application.Quit
End Sub

Ngc li, on m sau s thot khi Excel m khng lu cc workbook:


Sub QuitSaveNone()
Dim wb As Workbook
For Each wb In Workbooks
' nh du coi nh cc workbook c lu
' nhng thc cht, cc workbook vn cha c lu
wb.Saved = True
Next
Application.Quit
End Sub

Hoc c th s dng on m sau:


Sub QuitSaveNone()
' Tt tt c cc thng bo, hp thoi
Application.DisplayAlerts = False
Application.Quit
End Sub

Cch thot khi Excel s dng thuc tnh Saved hoc DisplayAlerts s c th lm mt tt c
nhng thay i cha c lu. V th cng c th s dng mt cch khc, l s dng
phng thc SaveWorkspace lu trng thi lm vic ca Excel ca trc lc thot vo tp
.xlw, v khi m tp ny, trng thi lm vic ca Excel ti thi im s c khi phc li.
on m sau s lu ton b trng thi lm vic vo tp Resume.xlw:
Sub QuitWithResume()
Application.SaveWorkspace "C:\Resume.xlw"
Application.Quit
End Sub

146
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

7.1.2. Kho tng tc ngi dng


Trong mt s trng hp, trnh ngi dng thot khi Excel khi ang thc hin mt s
bc tnh ton mt nhiu thi gian, cn phi gii hn tng tc gia ngi dng v chng
trnh Excel. i tng Application c mt s phng thc/thuc tnh thc hin iu ny:
Gn thuc tnh DisplayAlerts bng FALSE n cc hp thoi Excel khi ang thc thi
m lnh.
Gn thuc tnh Interactive bng FALSE ngi dng hon ton khng th tng tc
c vi Excel.
Gn thuc tnh ScreenUpdating bng FALSE tt qu trnh cp nht li mn hnh, lm
n i nhng thay i din ra trong lc thc thi m lnh.
Nhng cch trn u cn phi thc hin u on m lnh v phi thc hin li cui ca
on m lnh thit lp li cc gi tr mc nh, nu khng s lm kho hon ton chng
trnh Excel.
V d sau minh ho cch tm thi kho tng tc ngi dng khi thc hin cc on m lnh
mt nhiu thi gian:
Sub Khoa_nguoi_dung()
Dim cel As Range
' Chuyn con tr chut thnh biu tng ch.
Application.Cursor = xlWait
' Tt tng tc ngi dng v vic cp nht mn hnh.
Application.Interactive = False
Application.ScreenUpdating = False
' on m lnh m phng vic tnh ton mt nhiu thi gian.
For Each cel In [a1:iv999]
cel.Select
Next
' Khi phc li trng thi ban u.
Application.Interactive = True
Application.ScreenUpdating = True
Application.Cursor = xlDefault
[a1].Select
End Sub

Mt li im na ca vic gn thuc tnh ScreenUpdating bng FALSE l vic on m lnh s


thc thi vi tc nhanh hn v Excel khng cn phi cp nht li mn hnh khi tin hnh chn
tng trong vng d liu t A1:IV999. Nhng cn lu phi khi phc li cc gi tr mc
nh trc khi kt thc m lnh.
GI Gn thuc tnh ScreenUpdating bng FALSE trong khi thc khi cc on m lnh
c lin quan n vic hin th trn mn hnh, chng hn nh i mu nn cho vng d
liu , s lm tng tc thc thi ca m lnh

7.1.3. Thao tc vi ca s
i tng Application c tp i tng Windows cho php m, sp xp, thay i kch thc v
ng cc ca s bn trong Excel. Chng hn nh on m sau to thm mt ca s mi v sau
xp chng cc ca s bn trong workbook hin hnh:
Sub OpenCascadeWindows()
ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub

147
GIOTRNHTNGHOTHITKCUNG

Ngi lp trnh c th ng, thay i trng thi ca ca s s dng cc phng thc v thuc
tnh c trong i tng Window. V d sau s ng ca s c to ra v d trc v khi
phc li trng thi ca ca s ban u trong Excel:
Sub CloseMaximize()
ActiveWindow.Close ng ca s hin hnh
ActiveWindow.WindowState = xlMaximized
End Sub

Vic ng ca s cui cng ca Workbook tng ng vi vic ng workbook .


CH Trong cng mt workbook c th c nhiu ca s con, tt c cc ca s con
u c ni dung ging nhau v u l mt th hin ca workbook. Chi tit, xem li mc
i tng Window trang 126.

iu khin ca s chnh ca Excel, s dng cc thuc tnh WindowState v


DisplayFullScreen c trong i tng Application. on m sau s thc hin thay i trng
thi ca s chnh ca Excel, gia cc thi thi s c mt thng bo:
Sub ChangeExcelWindowState()
Application.WindowState = xlMaximized Phng i ca s
MsgBox "Trang thai phong dai"
Application.WindowState = xlMinimized Thu nh ca s
MsgBox "Trang thai thu nho"
Application.WindowState = xlNormal Trng thi thng thng
MsgBox "Trang thai thong thuong"
Application.DisplayFullScreen = True Xem ton mn hnh
MsgBox "Trang thai toan man hinh"
Application.DisplayFullScreen = False Trng thi bnh thng
MsgBox "Trang thai thong thuong"
End Sub

7.1.4. Khi ng Excel t chng trnh khc


Thng thng, khi s dng VBA trong Excel, chng trnh Excel c khi ng sn v
ngi lp trnh khng cn quan tm n cc thao tc khi ng chng trnh Excel. Tuy
nhin, vn c nhng lc cn khi ng chng trnh Excel t chng trnh khc, chng hn
nh khi mun xut d liu tnh ton sang Excel chng hn. Lc , cn phi lp trnh khi
ng Excel, hay ni theo cch n gin hn, l to i tng Application cha ng dng Excel.
thc hin c vic ny, cn phi thc hin cc bc sau:
1. Tham chiu n vi th vin m rng ca chng trnh Excel.
2. Vit m lnh thc hin vic khi ng chng trnh Excel (to i tng Application ca
Excel).
Di y s trnh by cch thc khi ng chng trnh Excel t VBA trong AutoCAD.
ThamchiuthvinmrngcachngtrnhExcel
1. Khi ng chng trnh AutoCAD Khi ng VBAIDE trong AutoCAD bng cch
nhn t hp phm ALT+F11.
2. Chn trnh n Tools References hin th hp thoi References dng tham
chiu n th vin m rng.
3. Trong danh sch cc th vin c sn, chn Microsoft Excel 11.0 Object Library Chn
OK. Nh vy l d n VBA trong AutoCAD c tham chiu n th vin m rng ca

148
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Excel, ngha l ngi lp trnh c th truy cp n m hnh i tng ca Excel ngay t


bn trong VBA ca AutoCAD

Hnh IV-14: Hp thoi References trong VBAIDE ca AutoCAD.

CH Tu tng phin bn chng trnh Excel ang c s dng m tn ca th vin


m rng Excel c th khc nhau.

VitmlnhkhingchngtrnhExcel
4. Trong VBAIDE ca AutoCAD, chn trnh n Insert Module to mi mt m-un
chun.
5. Trong ca s m lnh ca m-un chun, nhp on m lnh dng khi ng chng
trnh Excel nh sau:
Sub ConnectToExcel()
Dim App As Excel.Application
On Error Resume Next
Set App = GetObject(, "Excel.Application")
Kim tra xem Excel c khi ng cha
Nu cha s tin hnh to i tng Application
If Err Then
Err.Clear
Set App = CreateObject("Excel.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Hin th ca s chnh ca Excel
App.Visible = True
MsgBox "Now running " + App.Name + _
" version " + App.Version
====== Kt thc vic khi ng chng trnh Excel ======

149
GIOTRNHTNGHOTHITKCUNG

Bt u thc hin cc thao tc trong Excel


ging nh khi thc hin trong mi trng VBA ca Excel
Dim WBook As Workbook, WSheet As Worksheet
Set WBook = App.Workbooks.Add
Set WSheet = WBook.Worksheets(1)
WSheet.Range("A1") = "Vi du ket noi voi Excel"
WBook.SaveAs "C:\Test.xls"
WBook.Close
Set WBook = Nothing
Set WSheet = Nothing
End Sub

6. Thc thi Macro: ConnectToExcel nh trn, chng trnh Excel s c khi ng To


mt Worksheet mi Lu thnh tp c tn Test.xls nm trong th mc gc ca a
C:\ Thot khi chng trnh Excel.

7.2. Lm vic vi Workbook


7.2.1. To mi, m, lu v ng workbook
Tomiworkbook
to mi workbook, s dng phng thc Add c trong tp i tng Workbooks:
Dim wb As Workbook
Set wb = Application.Workbooks.Add

Mworkbook
m mt workbook c, s dng phng thc Open c trong tp i tng Workbooks:
Dim wb As Workbook
Set wb = Application.Workbooks.Open("C:\MyBook.xls")

Nu tham s tn tp ch c tn m khng bao gm ng dn, Excel s tm tp trong th


mc hin hnh. Nu tp khng tn ti th s lm pht sinh li trong Excel.
Luworkbook
lu workbook, s dng phng thc Save v SaveAs c trong i tng Workbook. Th
mc mc nh lu trong Excel c th c thit lp thng qua thuc tnh DefaultFilePath
ca i tng Application, thng thng th mc mc nh l th mc My Documents. V d
sau s lu workbook mi to vo th mc My Documents vi tn l NewWorkbook.xls:
ActiveWorkbook.SaveAs "NewWorkbook"

Phng thc SaveAs thch hp khi lu workbook ln u tin, hoc khi mun lu workbook
thnh mt workbook c tn khc. Cn phng thc Save s lu workbook v gi nguyn tn
hin ti ca workbook.
ngworkbook
ng workbook, s dng phng thc Close c trong i tng workbook. Phng thc
ny khng t ng lu workbook, nhng khi c s thay i no cha lu, Excel s hin th
hp thoi SaveChanges trc khi ng workbook. Ngi lp trnh c th tt hp thoi ny bng
cch truyn thm tham s vo cho phng thc thc Close:
ThisWorkbook.Close True

150
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

on m s lu tt c cc thay i v sau ng workbook hin hnh. ng m khng lu


nhng thay i ca workbook, s dng on m sau:
ThisWorkbook.Close False

ng tt c cc workbook, s dng phng thc Close c trong tp i tng Workbooks.


Tuy nhin phng thc ny khng c tham s, v vy hp thoi SaveChanges s xut hin khi
c workbook no cha c lu.
Sub TestCloseAll()
Workbooks.Close
End Sub

7.3. Lm vic vi Worksheet


7.3.1. To mi, xo v i tn worksheet
Tomiworksheet
to mi Worksheet, s dng phng thc Add c trong tp i tng Worksheets hoc tp
i tng Sheets.
Sub Tao_moi_worksheet()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Thm mt worksheet vo trc worksheet hin hnh
Set ws1 = Worksheets.Add
Thm mt worksheet khc vo sau sheet cui cng ca workbook
Set ws2 = Sheets.Add(After:=Sheets(Sheets.Count), Type:=xlWorksheet)
End Sub

Do tp i tng Sheets bao gm nhiu loi sheet khc nhau nn khi thm worksheet s dng
phng thc Add c trong tp i tng Sheets, cn phi xc nh r loi sheet s c thm
vo.
Xoworksheet
xo worksheet, s dng phng thc Delete c trong i tng worksheet. V d sau s xo
worksheet c tn l Sheet1.
Sub Xoa_worksheet()
Dim mySheet As Worksheet
Set mySheet = Worksheets("Sheet1")
Application.DisplayAlerts = False
mySheet.Delete
Application.DisplayAlerts = True
End Sub

Khi s dng phng thc Delete xo worksheet, Excel s hin th hp thng bo xc


nhn thao tc xo worksheet. V vy, khi chc chn xo worksheet phi tt ht tt c cc
thng bo bng cch gn thuc tnh DisplayAlerts bng FALSE, v cng nn nh l phi tr v
cc gi tr mc nh trc khi kt thc chng trnh.
itnworksheet
Vic i tn worksheet c thc hin mt cch d dng, ch cn thay i thuc tnh Name c
trong i tng worksheet. on m sau s i tn Sheet2 thnh MySheet:

151
GIOTRNHTNGHOTHITKCUNG

Worksheets("Sheet2").Name = "MySheet"

7.4. Lm vic vi Range v Cells


7.4.1. Duyt qua tng trong vng d liu
duyt qua tng trong vng d liu, s dng vng lp For Each Next duyt qua tng
i tng trong tp i tng Cells. Trnh t duyt l theo s th t ca : duyt t tri sang
phi l t trn xung di. V d sau s duyt qua tng trong vng d liu A1:D3, in s
vo tng theo th t c duyt. Thng qua v d ny, ta s hiu r hn v trnh t duyt cc
trong vng d liu:
Sub Duyet_O()
Dim myCell As Range
Dim i As Integer
i = 0
For Each myCell In Range("A1:D3").Cells
Cc thao tc x l nm y
V d: in s th t duyt vo tng
i = i + 1
myCell.Value = i
Next myCell
End Sub

7.4.2. Duyt qua tng trong vng d liu theo hng v ct


Qu trnh duyt theo hng hoc ct c thc hin s dng vng lp For EachNext trn cc
tp i tng Rows, Columns v Cells. i tng thnh phn trong cc tp i tng ny u
c kiu l Range. V d sau s tnh tng tng ct ca vng d liu c tham chiu v in gi
tr tng ny vo ngay pha di tng ct.
1. Sub Duyet_O_Theo_Cot()
2. Dim myCell As Range
3. Dim myColumn As Range
4. Dim Tong As Double
5. For Each myColumn In Range("A1:D3").Columns
6. Tong = 0
7. For Each myCell In myColumn.Cells
8. Tong = Tong + Val(myCell.Value)
9. Next myCell
10. myColumn.Cells(myColumn.Rows.Count + 1, 1) = Tong
11. Next myColumn
12. End Sub

Dng th 5 l vng lp cho php duyt qua tng ct trong vng d liu A1:D3. Mi ct li l
mt vng d liu, v th li tip tc duyt qua tng trong vng d liu , iu ny c thc
hin dng th 7. Dng th 10 dng gn gi tr tng tnh c ca mi vo di cng
ca ct.

152
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

7.4.3. Vng c cha d liu Thuc tnh UsedRange


UsedRange l mt thuc tnh rt hu dng ca i tng Worksheet. Thuc tnh ny tr v
vng d liu l hnh ch nht bao ca tt c cc c cha d liu. Gc trn bn tri ca hnh
ch nht l u tin c cha d liu, cn gc di bn phi ca hnh ch nht l cui cng
c cha d liu. Cc c cha d liu c hiu l nhng c cha thng tin nh: gi tr, nh
dng v ch thch. Hnh sau minh ho r hn v thuc tnh UsedRange.

Mc d trong vng d liu tr v ca thuc tnh UsedRange c cha c nhng khng c d


liu, nhng nh vy l hiu qu v tit kim thi gian hn l so vi vic duyt qua tt c cc
trong worksheet. V d sau s duyt qua tt c cc c cha d liu v chn nhng c gi
tr m trn worksheet hin hnh:
Sub Su_dung_UsedRange( )
Dim cel As Range, str As String
For Each cel In ActiveSheet.UsedRange
If cel.Value < 0 Then str = str & cel.Address & ","
Next
If str <> "" Then
str= Left(str, Len(str) - 1)
ActiveSheet.Range(str).Select
End If
End Sub

V d trn ly v a ch ca tt c cc c gi tr m v s dng du , ngn cch gia a ch


ca cc ly hp ca tt c cc (xem thm mc Tham chiu n i tng Range trang
131). Sau khi kt thc vng lp, chui str s c kiu l $A$1,$D$5, nn dng lnh If cui
cng s ct k t cui cng ca chui str chuyn v dng thc a ch ng
$A$1,$D$5. Cu lnh Len(str) tr v chiu di ca chui k t str. Cn cu lnh
Left(str,n) tr v n k t nm bn tri ca chui k t str.

7.5. Lm vic vi biu


Tnh nng biu trong Excel kh n tng. Mt biu c th th hin nhiu kiu d liu
khc nhau trong Excel. Excel h tr hn 100 loi biu khc nhau v ngi dng c th iu
khin hu nh tt c cc thnh phn trong biu bi l, mi thnh phn trong biu chnh l
mt i tng vi cc phng thc v thuc tnh khc nhau. V vy, vic lp trnh vi biu
153
GIOTRNHTNGHOTHITKCUNG

l khng d, nhng mt khi hiu r cy phn cp i tng th kt qu s n tng hn rt


nhiu.
Tu theo v tr m biu trong Excel c phn thnh 2 loi sau:
Biu nhng ChartObject: l dng biu nm bn trong mt worksheet. Trong mt
worksheet c th cha nhiu biu nhng khc nhau v cc biu ny c th c
truy xut thng qua tp i tng ChartObjects c trong i tng worksheet.
Biu c lp ChartSheet: l dng biu nm trong mt sheet ring bit, gi l
chartsheet. Mi mt chartsheet ch c th cha mt biu dng ny m thi. Biu
dng ny c th c truy xut thng qua tp i tng Charts c trong i tng
workbook.
Biu , d l dng nhng hay c lp, u c cng mt kiu d liu l Chart. Hn na, trong
hu ht cc bng tnh, cc biu thng c nhng trong worksheet tin cho vic trnh
by. Chnh v vy, ni dung trong gio trnh ny ch tp trung thao tc i vi biu nhng.
7.5.1. To mi biu
Cch nhanh nht to biu bng m lnh l s dng phng thc ChartWizard ca i
tng Chart. Vi phng thc ny, ngi lp trnh c th to c biu ch trong 2 bc:
1. To mi i tng Chart, s dng phng thc Add.
2. Gi phng thc ChartWizard ca i tng Chart va c to.
Phng thc ChartWizard c rt nhiu tham s khc nhau, tt c u l tham s tu chn.

ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels,


SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle,
ExtraTitle)

Tham s Gii thch


Source Vng d liu cha s liu u vo cho biu
Gallery Dng biu , c th l mt trong nhng gi tr sau: xlArea, xlBar, xlColumn,
xlLine, xlPie, xlRadar, xlXYScatter, xlCombination, xl3DArea, xl3DBar,
xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut, xlDefaultAutoFormat.
Format nh dng t ng. Gi tr t 110 tu thuc vo loi biu . Nu b qua tham
s ny, Excel s t chn gi tr mc nh da trn dng biu v s liu u
vo.
PlotBy Xc nh xem s liu cho tng chui s liu l theo ct hay hng, c th l
xlRows hoc xlColumns.
CategoryLabels S nguyn xc nh s hng hoc ct bn trong vng d liu u vo s lm
CategoryLabels.
SeriesLabels S nguyn xc nh s hng hoc ct bn trong vng d liu u vo s lm
SeriesLabels.
HasLegend Bng TRUE th biu s c thm phn ch gii.
Title Tiu ca biu
CategoryTitle Tiu ca trc ngang
ValueTitle Tiu ca trc ng
ExtraTitle Tiu trc i vi biu 3D hoc tiu ca trc gi tr th 2 ca biu 2D

154
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

V d sau to mt biu trong mt chartsheet nm sau worksheet hin hnh, sau s dng
phng thc ChartWizard to biu da trn vng d liu c tn l SoLieu. Ni dung ca
vng d liu nh sau:
Mt Hng A Mt hng B
2000 20.0 35.0

2001 21.0 35.5

2002 24.0 36.0

2003 25.0 37.0

2004 23.0 36.5

2005 23.5 37.0

2006 25.0 38.0

Sub ChartWizard()
Dim ws As Worksheet, chrt As Chart
Set ws = ActiveSheet
' To mi chartsheet, nm sau worksheet hin hnh.
Set chrt = Charts.Add(, ws)
' t tn cho chartsheet.
chrt.Name = "Bieu Do Gia"
' To biu s dng phng thc ChartWizard.
chrt.ChartWizard ws.[SoLieu], xlLine, , xlColumns, 1, 1, True, _
"Bieu Do Gia Hang Nam", "Nam", "Gia"
End Sub

7.5.2. Thm mt chui s liu vo biu c


Cc s liu c v trong biu c lu tr trong tp i tng SeriesCollection. Mi
hng hoc ct d liu c lu tr trong mt i tng Series tng ng v mi s liu trong
mt i tng Series c lu tr trong i tng Point.

155
GIOTRNHTNGHOTHITKCUNG

Ngi lp trnh c th thm chui s liu vo mt biu c bng cch gi phng thc
Add ca tp i tng SeriesCollection. Phng thc Add c nhng tham s sau:
Tham s Gii thch
Source Vng d liu cha d liu ca chui s liu mi hoc c th l mng s liu
Rowcol Xc nh xem chui s liu b tr theo dng ct hay dng hng, c th l xlRows
hoc xlColumns.
SeriesLabels Gi tr ny s b b qua nu Source l mt mng s liu. Nu Source l vng d
liu th gi tr ny s l TRUE nu hng hoc ct u tin ca vng d liu cha
tn ca chui s liu, nu khng th gn gi tr ny bng FALSE.
CategoryLabels Gi tr ny s b b qua nu Source l mt mng s liu. Nu Source l vng d
liu th gi tr ny s l TRUE nu hng hoc ct u tin ca vng d liu cha
gi tr lm CategoryLabels ca chui s liu, nu khng th gn gi tr ny bng
FALSE.
Replace Nu CategoryLabels l TRUE v Replace l TRUE, th gi tr CategoryLabels
ca biu hin ti s c thay mi. Nu Replace l FALSE th
CategoryLabels ca biu hin ti s c gi nguyn. Mc nh l gi tr
FALSE.

V d sau s thm mt chui s liu mi vo biu c to v d trc, v chuyn dng


biu thnh dng ct .
Sub AddNewSeries()
Dim chrt As Chart, sc As SeriesCollection, sr As Series
' Ly li biu theo tn biu .
Set chrt = Charts("Bieu Do Gia")
' Ly tp i tng SeriesCollection.
Set sc = chrt.SeriesCollection
' Thm chui s liu mi.
sc.Add [ThemSoLieu], xlColumns, True, False, False
' Ly chui s liu cui trong tp i tng SeriesCollection
' chnh l chui s liu mi b sung.
Set sr = sc(sc.Count)
' i dng biu cho chui s liu mi.
sr.ChartType = xlColumnClustered
End Sub

156
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

7.6. S dng cc hm c sn trong Excel


Ngi lp trnh c th tn dng cc hm c sn ca Excel trong khi lp trnh trn VBA thng
qua i tng WorksheetFunction. i tng ny l mt thuc tnh ca i tng gc
Application.
V d sau s tm gi tr nh nht trn vng d liu A1:A10 bng cch s dng hm Min ca
Excel:
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer

8. Giao din ngi dng


Khi xy dng chng trnh, ngi khc c th dng c, ngi lp trnh cn phi c bit
ch n giao din ngi dng. Giao din ngi dng c hiu l cch thc m ngi s
dng s tng tc vi chng trnh bng cch nhn nt bm, chn mt trnh n, nhn phm,
chn trn thanh cng c,
Khi xy dng cc ng dng, cn phi lun ghi nh rng mc ch xy dng chng trnh l
cho ngi dng cui s dng. Ngi lp trnh thng c kinh nghim s dng my tnh hn
ngi dng, cho nn, vi mt giao din no th i vi ngi lp trnh l d s dng trong
khi , i vi ngi s dng li rt kh dng.
Khi mt chng trnh c trin khai xy dng da trn VBA ca Excel th hp l nht l nn
hng n vic s dng nhng tnh nng sn c ca chnh Excel lm giao din, c nh vy ta
mi tn dng c mt trong nhng th mnh ca Excel, l giao din thn thin, n gin
v hiu qu. Vi nh hng thit k giao din nh vy, ta nn s dng h thng trnh n,
thanh cng c v chnh bng tnh lm giao din chnh cho ng dng ca mnh.
Nh vy trong Excel, ngi dng c th s dng nhng tnh nng c cung cp sn thit
k giao din cho chng trnh ca mnh v sau y l mt s phng n thit k giao din nn
s dng khi lp trnh VBA trong Excel:
S dng iu khin nhng trc tip trn worksheet chng hn nh ListBox hoc
CommandButton;
S dng cc hp thoi thng dng c sn trong Excel;
To cc hp thoi tu bin (chnh l vic s dng UserForm);
Tu bin trnh n;
Tu bin thanh cng c;
Tu bin phm tt.
8.1. iu khin nhng trong Worksheet
iu khin nhng trong Worksheet, hay cn gi l iu khin ActiveX, l nhng iu khin c
th chn trc tip vo trong worksheet, lin kt trc tip vi d liu trong cc worksheet m
khng cn thm mt on m lnh no khc. ng nhin, nu cn th ngi lp trnh c th
thm cc on m lnh x l cc tnh hung khc cho tng iu khin. Thanh cng c
Toolbox s gip cho ngi dng thc hin thit k giao din kiu ny.

157
GIOTRNHTNGHOTHITKCUNG

Hnh IV-15: Bng tnh s dng iu khin nhng trong worksheet.

hin th thanh cng c Control Toolbox, chn trnh n ViewToolbarsControl


Toolbox. Trn thanh cng c ny, cn ch n 3 biu tng u tin phc v cho qu trnh
thit k cc iu khin trong worksheet:

Design Mode : khi biu tng ny c hin sng ( ), tc l cc iu khin ang


trong ch thit k. ch ny, ngi lp trnh c th chn cc iu khin, thay i
cc thuc tnh ca chng Khi biu tng ny ch thng thng, tc l cc iu
khin ang trong ch thc thi. ch ny, cc iu khin s trng thi s dng.

Properties : nhn chut vo biu tng ny s hin th ca s Properties, lit k tt c


cc thuc tnh ca iu khin c chn. Thng qua ca s ny, ngi lp trnh c th
thay i tng thuc tnh lin quan n iu khin c chn.

View Code : nhn chut vo biu tng ny s hin th ca s m lnh tng ng vi


iu khin c chn.
Trn thanh cng c Control Toolbox cn c nhiu biu tng khc na, mi biu tng tng
ng vi mt iu khin. V c bn, cc iu khin ny tng ng vi cc iu khin c
trnh by phn trc (tham kho mc Cc iu khin thng dng trang 69).
8.1.1. iu khin Spin Button

Spin button, , l mt nt bm gn vi mt no trong worksheet. tng gi tr trong


, ngi dng s bm vo mi tn ln, cn gim gi tr, ngi dng s bm vo mi tn
xung.
Spin button thch hp khi mun hn ch s liu nhp vo nm trong mt gii hn no .
Cc thuc tnh c bn ca Spin button:
Thuc tnh M t
Name Kiu String. Tn ca iu khin
LinkedCell Kiu String. a ch ca s lin kt trc tip vi iu khin
Max Kiu Integer. Gi tr ln nht c th t c

158
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Min Kiu Integer. Gi tr nh nht c th t c


SmallChange Kiu Integer. S gia mi khi ngi dng nhn vo mi tn ln hoc xung
Value Kiu Integer. Gi tr hin thi ca iu khin, cng l gi tr s hin th trong
lin kt trc tip vi iu khin

8.1.2. iu khin ComboBox

Combo Box, , s dng ngi dng la chn mt phn t trong danh sch xung.
iu khin ny thng c s dng khi ngi lp trnh mun ngi s dng ch c th chn
c nhng phn t c nh trc, trnh nhng sai st trong qu trnh nhp d liu, chng
hn nh ch cho php ngi dng chn mt trong cc loi mc ca b tng m chng trnh h
tr. Thng thng ta nn t Combo Box trng ln m n lin kt.
Cc thuc tnh c bn ca Combo Box:
Thuc tnh M t
Name Kiu String. Tn ca iu khin
LinkedCell Kiu String. a ch ca lin kt trc tip vi Combo Box. Gi tr ca Combo
Box chnh l gi tr ca c lin kt.
ListFillRange Kiu String. a ch ca vng d liu cu thnh danh sch cc phn t trong
Combo Box. Mi mt hng ca vng d liu l mt phn t trong danh sch .
ColumnCount Kiu Integer. S ct s c hin th trong danh sch x xung ca Combo Box.
Mc nh ColumnCount=1.
BoundColumn Kiu Integer. S th t ct trong vng d liu, l ct m gi tr ca ct s
c gn cho thuc tnh Value ca Combo Box khi mt phn t trong Combo
Box c chn.
ColumnHeads Kiu Boolean. Nu bng FALSE, khng hin th phn tiu ca ct trong danh
sch x xung. Nu bng TRUE, hin th tiu ca ct trong danh sch x
xung, v hng d liu nm ngay pha trn ListFillRange s c ly lm tiu
ca ct.
ColumnWidths B rng ca ct, tnh bng pt. Nu c nhiu ct th b rng ca mi ct s c
cch nhau bng du chm phy (;). V d 60:80
Style Kiu Integer. Nu bng 0, ngi dng c th nhp d liu trc tip vo Combo
Box hoc chn t danh sch. Nu bng 1, ngi dng ch c th nhp d liu
bng cch chn t danh sch.
Text Kiu String. L on vn bn/d liu c hin th trong Combox.
Value Kiu Variant. L gi tr thc t ca phn t c chn trong Combo Box. Gi tr
ca thuc tnh Value ny chnh l gi tr ca c lin kt vi Combo Box
thng qua thuc tnh LinkedCell.

ToComboBoxcnhiuct
V d sau s lm r ngha ca cc thuc tnh trn thng qua vic to mt Combo Box c
nhiu ct. Combo Box s hin th cc cp ng thit k, v khi la chn mt cp ng, gi
tr vn tc thit k tng ng s c gn cho . Trnh t thc hin nh sau:
1. To mi Combo Box trn worksheet, di chuyn n v tr thch hp.
2. Chn kiu cho Combo Box bng cch gn thuc tnh Style bng 1, ngha l ngi dng
ch c th la chn t danh sch x xung.
3. Gn gi tr cho cc thuc tnh LinkedCell bng C11 l s cha gi tr vn tc thit k
c chn. Gn gi tr ListFillRange bng F2:G7 l vng d liu cha bng cc gi tr

159
GIOTRNHTNGHOTHITKCUNG

cp ng v vn tc thit k. Thng thng vng d liu ny s c lu tr trong mt


worksheet khc hoc mt ni m ngi dng khng nhn thy c trnh gy ra s lng
tng cho ngi dng.
4. hin th c nhiu ct, gn gi tr thuc tnh ColumnCount bng 2. Do gi tr cn lin
kt l gi tr vn tc thit k, tc l gi tr nm ct th 2 ca vng d liu, do vy cn
phi gn thuc tnh BoundColumn bng 2.
5. hin th tiu cho danh sch x xung, gn gi tr ColumnHeads bng TRUE.

Hnh IV-16: Combo Box c nhiu ct.

8.1.3. iu khin Command Button

iu khin Command Button, , thng c s dng khi cn ngi dng thc hin mt
quyt nh no thng qua vic kch chut vo nt lnh hoc nhn Enter ti nt lnh. Chi tit
v cc thuc tnh ca iu khin ny c trong phn lm vic vi Userform v cc iu khin
phn trc.
ci t m lnh tng ng khi ngi dng kch chut vo nt lnh, s dng s kin Click c
trong iu khin Command Button. Cc bc thc hin nh sau:
1. Khi ng VBAIDE bng cch nhn phm ALT+F11.
2. Trong ca s Project, kch p chut vo worksheet c cha iu khin Command Button
hin th ca s m lnh ca worksheet .
3. Trong danh sch x xung General gc trn bn tri, chn iu khin c tn cn thm s
kin, tn ny chnh l gi tr ca thuc tnh Name m ta gn cho iu khin .
4. Trong danh sch x xung Declarations gc trn bn phi, chn s kin cn ci t m
lnh.
5. VBAIDE s t ng chn on m lnh khi to cho s kin. G on m lnh cn chn
vo v tr con tr ang hot ng.

160
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh IV-17: Cc bc thm s kin cho iu khin Command Button.

on m lnh sau s lm hin th hp thng bo khi ngi dng kch chut vo


CommandButton1:
Private Sub CommandButton1_Click()
MsgBox "Ban vua nhan vao nut lenh nay"
End Sub

8.2. Cc hp thoi thng dng


Hp thoi l mt trong nhng thnh phn hay dng n nht khi thit k giao din, do , ngoi
vic s dng nhng iu khin thit k hp thoi trn Userform c cp phn
trc, hoc s dng chnh nhng hp thoi n gin ca VB nh hm InputBox hoc MsgBox
th ngi dng c th s dng nhng hp thoi c Excel cung cp v ta s thy rng trong
nhiu trng hp, nhng hp thoi ny rt tin dng. Di y l mt s hp thoi c trng
trong Excel.
GI Tham kho mc Cc hp thoi thng dng trang 76 bit thm chi tit v cc
hp thoi c bn thng c s dng.

8.2.1. Hp thoi InputBox ca Excel Hm InputBox


S dng hp thoi InputBox (thay v s dng hp thoi InputBox) c nhiu u im:
nh c kiu d liu tr v;
Ngi s dng c th la chn mt vng d liu trc tip trn worksheet bng cch s
dng chut;
Vic kim tra d liu nhp vo c thc hin t ng.
C php ca hm InputBox ny nh sau:

Application.InputBox(prompt, title, default, left, top, helpFile,


context, type)

Hu ht cc tham s u l tham s tu chn, ch c tham s prompt l bt buc phi nhp vo.


ngha ca cc tham s nh sau:
Tham s Gii thch
prompt on vn bn s hin th trong hp thoi
title Tiu ca hp thoi InputBox
default Gi tr mc nh. Nu ngi dng khng nhp g c, hm s tr v gi tr mc
nh ny.

161
GIOTRNHTNGHOTHITKCUNG

left, top To gc trn bn tri ca hp thoi.


helpFile, context Tn tp tr gip v ch cn hin th
type M xc nh kiu tr v ca hm.

Bng sau th hin cc loi m xc nh kiu tr v ca hm:


M Kiu gi tr tr v l
0 Cng thc
1 S
2 Chui
4 Boolean (True hoc False)
8 i tng kiu Range. Tham chiu n mt vng d liu
16 Gi tr li, chng hn nh #NA
64 Mng gi tr

Hm InputBox ca Excel c s dng kh linh hot. Hm ny c th cho php c nhiu hn


mt kiu gi tr tr v bng cch cng cc loi m thch hp. V d nh mun hp thoi
InputBox cho php nhp vo c s v chui, c th nhp tham s type bng 3 (tc l 1+2, hay
S cng chui). Cn nu gn tham s type bng 8 th ngi dng c th t nhp vo a
ch ca vng d liu trong hp thoi, hoc cng c th chn vng d liu trn worksheet bng
chut.
V d sau, th tc EraseRange, s dng hm InputBox ngi dng la chn mt vng d
liu xo. Ngi dng c th nhp vo a ch ca vng d liu hoc cng c th chn bng
cch dng chut. Hm InputBox vi tham s type bng 8 s tr v i tng kiu Range (ch
t kho Set trc hm InputBox, v lc ny hm s tr v i tng ch khng phi l mt
gi tr n thun). Vng d liu ny s c xo i bng phng thc Clear. Gi tr mc nh
c hin th trong hp thoi InputBox l a ch ca vng c chn hin hnh. Cu lnh On
Error nhm mc ch s thot khi th tc khi c li xy ra.
Sub EraseRange()
Dim UserRange As Range
Dim DefaultRange As String
DefaultRange = Selection.Address
On Error GoTo Canceled
Set UserRange = Application.InputBox _
(Prompt:=Vng d liu cn xo:, _
Title:= Xo vng d liu, _
Default:=DefaultRange, _
Type:=8)
UserRange.Clear
UserRange.Select
Canceled:
End Sub

162
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Mt li im na ca vic s dng hm inputBox ca Excel chnh l vic t ng thc hin


kim tra gi tr nhp vo. Trong v d trn, nu ngi dng nhp vo gi tr khng phi l a
ch ca mt vng d liu, Excel s hin th mt hp thng bo v nhc ngi dng nhp li d
liu.

8.2.2. Hp thoi Open Hm GetOpenFilename


Trong mt s chng trnh, khi cn nhp vo tn tp no , ta c th s dng hp thoi
InputBox yu cu ngi s dng nhp vo tn tp t bn phm. Tuy nhin cch ny c th
pht sinh li do ngi dng nhp vo mt tn tp khng tn ti (c th do g phm sai hoc
khng nh chnh xc tn tp). Mt cch tt hn lm vic ny chnh l s dng phng thc
GetOpenFilename ca i tng Application. Phng thc ny s hin th hp thoi Open
(ging nh khi chn trnh n FileOpen) nhng ch tr v tn tp c chn m khng m
mt tp no c. Ngi dng ch vic chn tp bng cc cng c trc quan c sn trong hp
thoi.
C php ca phng thc ny nh sau (tt c cc tham s u l tham s tu chn):

GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)

Tham s Gii thch


FileFilter Chui cha b lc tp.
FilterIndex S th t ca b lc tp mc nh.
Title Tiu ca hp thoi, gi tr mc nh l Open.
ButtonText Khng s dng.
MultiSelect Nu bng TRUE, ngi dng c th chn nhiu tp cng mt lc. Mc nh l
FALSE.

Tham s FileFilter quy nh cc phn t s c hin th trong danh sch xung File of
type ca hp thoi. Mi phn t tng ng vi mt loi tp no . Phn t l mt cp gi tr
163
GIOTRNHTNGHOTHITKCUNG

gm tn s c hin th trong danh sch v phn m rng ca loi tp tng ng. Nu khng
gn gi tr cho tham s ny, gi tr mc nh s l:
All Files (*.*),*.*

Ch phn u ca chui ny (phn nm pha trc du phy - All Files (*.*)) l on vn bn


s c hin th trong danh sch. Cn phn th hai ca chui (phn nm sau du phy *.*)
chnh l phn m rng ca tp s c hin th.
V d sau minh ho cch to mt chui cha trong bin Filt c th dng truyn vo tham s
FileFilter ca phng thc GetOpenFilename. Nh trong trng hp ny, ngi dng c th
chn 2 loi tp (v mt la chn cho tt c cc tp).
Filt = Text Files (*.txt),*.txt, & _
Comma Separated Files (*.csv),*.csv, & _
All Files (*.*),*.*

V d sau s nhc ngi dng chn mt tp, sau s hin th tn tp c chn.


Sub GetImportFileName()
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As String
' Gn b lc tp
Filt = "Text Files (*.txt),*.txt," & _
"Comma Separated Files (*.csv),*.csv," & _
"All Files (*.*),*.*"
' Hin th cc tp *.csv l mc nh
FilterIndex = 2
' Gn tiu cho hp thoi
Title = "Chon tep"
' Ly tn tp
FileName = Application.GetOpenFilename _
(FileFilter:=Filt, _
FilterIndex:=FilterIndex, _
Title:=Title)
' Thot nu nhn nt Cancel
If FileName = "False" Then
MsgBox "Khong tep nao duoc chon."
Exit Sub
End If
' Hin th tn tp y
MsgBox "Ban vua chon tep: " & FileName
End Sub

164
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh IV-18: Hp thoi Open

8.2.3. Hp thoi Save As Hm GetSaveAsFilename


Phng thc GetSaveAsFilename cng tng t nh phng thc GetOpenFileName. Phng
thc ny s hin th hp thoi Save As, cho php ngi dng chn hoc ch nh tp lu, sau
s tr v tn tp y nhng khng thc hin thao tc lu no c.
C php ca phng thc ny nh sau:

GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,Button
Text)

Tham s Gii thch


InitialFilename Xc nh tn tp gi ban u
FileFilter Chui cha b lc tp.
FilterIndex S th t ca b lc tp mc nh.
Title Tiu ca hp thoi, gi tr mc nh l Save As.
ButtonText Khng s dng.

V d sau s hin th hp thoi Save As ngi dng nhp vo tn tp, sau s hin th tn
tp c la chn.
Sub SaveAs()
Dim fileSaveName As String

165
GIOTRNHTNGHOTHITKCUNG

fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:="TenTep", _
FileFilter:="Excel Workbook (*.xls), *.xls", _
Title:="Luu tap tin")
If fileSaveName <> "False" Then
MsgBox "Save as " & fileSaveName
End If
End Sub

8.2.4. Hp thoi chn th mc i tng FileDialog


Nu cn ngi dng chn mt th mc thc hin thao tc no , c th thc hin theo
nhiu cch khc nhau, nhng n gin nht vn l s dng i tng FileDialog.
V d sau hin th mt hp thoi cho php ngi dng chn th mc. Sau hin th tn th
mc bng cch s dng hp thoi MsgBox. Tn tp s c truy cp thng qua thuc tnh
SelectedItems ca i tng FileDialog.
Sub GetAFolder()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & \
.Title = Please select a location for the backup
.Show
If .SelectedItems.Count = 0 Then
MsgBox Canceled
Else
MsgBox .SelectedItems(1)
End If
End With
End Sub

i tng FileDialog cho php ch nh th mc ban u bng cch gn gi tr cho thuc tnh
InitialFileName. Trong v d trn s dng th mc mc nh ca Excel lm th mc ban
u.
8.2.5. Cc hp thoi mc nh trong Excel Tp i tng Dialogs
Tp i tng Dialogs ca i tng Application bao gm 258 phn t th hin hu ht cc
hp thoi mc nh trong Excel. Mi hp thoi c mt hng s c nh ngha trc gip
ngi dng c th xc nh c hp thoi cn hin th mt cch d dng. Chng hn nh khi
mun hin th hp thoi GoTo ca Excel, s dng hng s xlDialogFormulaGoto.
S dng phng thc Show hin th cc hp thoi. V d sau s hin th hp thoi Go To
ca Excel.
Application.Dialogs(xlDialogFormulaGoto).Show

Ngi lp trnh cn c th vit m lnh kim tra cch thc ng hp thoi. Trong v d sau,
bin Result s tr v TRUE nu ngi dng kch chut vo nt OK, v FALSE nu kch chut
vo nt Cancel hoc nhn phm ESC.
Result = Application.Dialogs(xlDialogFormulaGoto).Show

Cn phi lu rng, tnh nng ny khng c trnh by r rng trong cc ti liu tr gip ca
Excel. Cc ti liu tr gip cho phn ny rt s lc, khng cp n mt s tht: cc hp
thoi hin th khi gi bng VBA khng hon ton ging nh khi gi thng qua trnh n trong

166
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Excel. Chnh v vy, chng c cch no khc ngoi vic th nghim kim tra hot ng ca
cc hp thoi.
CH Cc hp thoi hin th khi gi bng VBA khng hon ton ging nh khi gi thng
qua trnh n trong Excel.

Trong trng hp ca hp thoi Go To, khi hin th bng VBA, nt Special b m i, khng
hon ton ging nh khi chn t trnh n EditGo To.

Ngoi ra, cn c mt vn khc na, l vic khng th hin th c cc hp thoi c


nhiu th khc nhau. Ly v d vi hp thoi Format Cell, khng c cch no hin th y
hp thoi ny vi nhiu th khc nhau t VBA, thay vo , ch c th hin th mt th ti mt
thi im. on m sau ch hin th c th Alignment ca hp thoi Format Cells:
Application.Dialogs(xlDialogAlignment).Show

hin th cc th khc trong hp thoi Format Cells, phi s dng ring l cc hng s
c nh ngha trc nh: xlDialogFormatNumber, xlDialogBorder,
xlDialogCellProtection, xlDialogPatterns, hoc xlDialogFontProperties.

167
GIOTRNHTNGHOTHITKCUNG

C rt nhiu hng s c nh ngha trc tng ng vi mt hp thoi trong Excel. Danh


sch y cc hng s ny c th c tra cu vi Object Browser:
1. Trong m un m lnh VBAIDE, nhn F2 khi ng Object Browser.
2. Trong ca s Object Browser, chn Excel danh sch pha trn.
3. Trong danh sch th 2, g vo xlDialog.
4. Kch chut vo biu tng hnh ng nhm.
CH Hin th mt hp thoi khng ng ng cnh s lm pht sinh li. V d nh khi
ang chn mt chui s liu trong mt biu m li hin th hp thoi Fonts (hng s
xlDialogFontProperties) th s xut hin thng bo li bi v hp thoi ny xut hin trong
tnh hung ny l khng thch hp.

Di y l danh s mt s hng s hay c s dng:


Hng s M t
xlDialogOpen Hp thoi Open
xlDialogSaveAs Hp thoi Save As
xlDialogPageSetup Hp thoi Page Setup
xlDialogPrint Hp thoi Print
xlDialogPrinterSetup Hp thoi Printer Setup

GI Cc hng s tng ng khi s dng tp i tng Dialogs c bt u bng


xlDialog v tip theo l tn ca hp thoi (vit lin nhau). Trong VBAIDE, g xlDialog sau
nhn CTRL+Space hin th ca s gi m lnh, trong s c danh sch y
cc hng s lin quan.

8.2.6. Thc thi mc trnh n Excel t VBA

168
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Mt cch khc na hin th cc hp thoi mc nh l thc thi trc tip thng qua trnh n.
iu ny cng tng ng nh khi s dng chut chn mt mc trnh n trong thanh
trnh n ca Excel.
on m lnh sau tng ng vi vic ngi dng chn trnh n EditGo To trc tip
trong Excel:
Application.CommandBars(Worksheet Menu Bar). _
Controls(Edit).Controls(Go To...).Execute

Cu lnh trn, khi thc thi s hin th hp thoi Go To. Cn ch rng, on vn bn nm


trong du ngoc phi ging ht nh nhng g hin th trn thanh trnh n (bao gm c du ba
chm sau ch Go To).
Vic thc thi mc trnh n nh th ny c thc hin kh n gin, hn na cn khc phc
c nhc im khng hin th hp thoi c nhiu th nh cp phn Cc hp thoi
mc nh trong Excel Tp i tng Dialogs trang 166. V d sau s hin th hp thoi
Format Cells vi y cc th nh dng.
Application.CommandBars("Worksheet Menu Bar"). _
Controls("Format").Controls("Cells...").Execute

Ngoi ra, theo cch ny, ngi lp trnh c th thc thi bt k mt mc trnh n no c trong
thanh trnh n ca Excel.
8.3. Hp thoi tu bin UserForm
Khi cc hp thoi mc nh trong Excel khng p ng c nhu cu, ngi lp trnh Excel c
th to ra cc hp thoi tu bin ca ring mnh thng qua cc UserForm. Vi kh nng tu
bin cao, ngi lp trnh c th s dng UserForm v cc iu khin trn to ra nhng
hp thoi vi nhiu tnh nng hn, ph hp hn vi nhu cu thc t hn. Vic to cc hp thoi
tu bin c thc hin d dng v hn na vi kh nng ca mnh, ngi lp trnh c th to
ra cc hp thoi trng chng khc g hp thoi ca chng trnh Excel.
Hp thoi tu bin c to ra da trn UserForm thng qua VBAIDE. Thng thng, c th
to hp thoi tu bin theo cc bc sau:
1. To mi mt UserForm vo trong d n VBA ca Workbook.
2. Vit th tc hin th UserForm. Th tc ny phi c t trong mt m-un ca VBA
(ch khng phi t trong m-un ca UserForm)
3. Chn thm cc iu khin cn thit trn UserForm.
4. iu chnh cc iu khin va thm.
5. Vit m lnh cho cc s kin tng ng ca cc iu khin (nu cn). Cc th tc ny phi
c t trong m-un ca chnh UserForm .
Sau khi thc hin xong cc bc trn, mi khi cn hin th hp thoi tu bin, ch cn thc thi
th tc to bc 2.
8.3.1. To mi UserForm
to mi UserForm, khi ng VBAIDE (nhn phm ALT+F11), chn d n ng vi
workbook cn thm Userform, sau chn trnh n InsertUserForm. Cc UserForm s
c t ng t tn UserForm1, UserForm2,... Ngi lp trnh c th thay i tn ca
UserForm d dng nhn dng UserForm thng qua ca s Properties (chn UserForm v
nhn phm F4 hin th ca s Properties).

169
GIOTRNHTNGHOTHITKCUNG

Mi mt workbook c th cha nhiu UserForm khc nhau, mi UserForm chnh l mt hp


thoi tu bin.
8.3.2. Hin th UserForm
hin th UserForm, s dng phng thc Show ca i tng UserForm. Phng thc ny
c c php nh sau:

object.Show modal

Trong :
object: l i tng kiu UserForm;
modal: l tham s tu chn, xc nh kiu hin th ca UserForm. Modal c th l mt
trong hai gi tr vbModal hoc vbModeless. Nu l vbModal, ngi dng phi ng
UserForm mi c th tip tc thao tc vi Excel. Nu l vbModeless, ngi dng vn c
th va thao tc trn UserForm, va thao tc trn Excel. Mc nh l gi tr vbModal.
on m sau s hin th UserForm c tn l UserForm1 ch Modal:
UserForm1.Show

Ngoi ra, cn c mt k thut khc hin th UserForm: s dng phng thc Add ca tp
i tng UserForm, sau s dng phng thc Show hin th UserForm. Phng thc
ny thch hp khi trong d n c nhiu UserForm v ngi c th ch nh s xut hin ca mt
UserForm bt k. on m sau s hin th UserForm c tn l UserForm1:
MyForm = UserForm1
UserForms.Add(MyForm).Show

CH Th tc hin th hp thoi tu bin (UserForm) phi c t trong mt m-


un chun ca VBA (ch khng phi t trong m-un ca UserForm).

170
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

VBA cn c lnh Load. Lnh ny ch ti UserForm vo trong b nh m khng hin th cho


n khi s dng phng thc Show ca UserForm . ti UserForm1 vo b nh, thc hin
nh sau:
Load UserForm1

Khi c mt UserForm tng i phc tp (c nhiu thnh phn iu khin cng vi nhiu d
liu bn trong ), nu s dng lnh Load ti UserForm vo b nh th UserForm s c
hin th nhanh hn khi s dng phng thc Show. Tuy nhin, trong i a s cc trng hp,
ch cn s dng phng thc Show, bi l phng thc ny cng t ng thc hin lnh
Load (nu UserForm cha c ti vo b nh) ngay trc khi hin th Userform.
Mt khi c hin th, UserForm s lun tn ti trn mn hnh cho n khi ngi dng ng
n li. V vy, thng thng, ngi lp trnh s to thm mt nt lnh (Command Button) trn
UserFrom thc hin th tc ng UserForm. Th tc ny c th s dng lnh Unload d
b UserForm khi b nh ca my tnh, hoc s dng phng thc Hide ca i tng
UserForm tm thi n UserForm.
on m sau s ng ca s UserForm1:
UserForm1.Hide

Hoc c th s dng on m sau ng ca s UserForm1:


Unload UserForm1

Phng thc Hide ch tm thi n UserForm, bn thn UserForm vn cn trong b nh, cc


thuc tnh ca UserFrom vn c th c truy cp bnh thng. Cn lnh Unload th s g b
UserForm ra khi b nh, lc ny cc thuc tnh ca UserForm s khng th truy cp c
na.
8.3.3. Cc iu khin trn UserForm
Ngi lp trnh c th dng rt nhiu loi iu khin khc nhau ln UserForm. Thng tin chi
tit, xem li mc Lm vic vi UserForm v cc thnh phn iu khin trang 60. Di y
ch trnh by thm mt iu khin ring ca Excel, iu khin RefEdit.
iu khin RefEdit cho php ngi dng la chn mt vng d liu bng cch nhp a ch
hoc nhp tn vng d liu hoc s dng chut chn trc tip trong worksheet. Khi ngi
dng kch chut vo biu tng nh gc phi ca iu khin, hp thoi s tm thi c n i
v mt ca s nh ngi dng chn vng d liu s c hin ln, ging ht nh cc hp
thoi mc nh ca Excel.

171
GIOTRNHTNGHOTHITKCUNG

Hnh IV-19: iu khin RefEdit

iu khin RefEdit cng tng t nh iu khin Textbox, v vy c th tham kho thm v


iu khin TextBox bit thng tin v cc phng thc v thuc tnh ca iu khin RefEdit.
Khi thc hin cc thao tc s dng RefEdit, cn ghi nh nhng im sau:
iu khin RefEdit tr v chui cha a ch ca vng d liu. Sau , c th chuyn
chui thnh i tng kiu Range s dng on m tng t nh sau:
Dim UserRange As Range
Set UserRange = Range(RefEdit1.Text)

Nn khi to gi tr ban u cho iu khin RefEdit bng a ch ca vng d liu hin


hnh. lm c nh vy, trong s kin UserForm_Initialize ca UserForm cn thm
on m lnh tng t nh sau:
RefEdit1.Text = ActiveWindow.Selection.Address

ng bao gi ngh rng RefEdit lun tr v a ch ng. Bi l khng phi ch c mi


cch chn vng d liu bng chut, ngi dng cn c th g v hiu chnh a ch hin
th trn iu khin RefEdit. V vy, phi lun kim tra tnh ng n ca a ch vng d
liu. on m sau minh ho cch kim tra li ny. Nu vng d liu nhp vo khng
ng, mt hp thng bo s hin ln, v cho php ngi dng nhp li:
On Error Resume Next
Set UserRange = Range(RefEdit1.Text)
If Err <> 0 Then
MsgBox Invalid range selected
RefEdit1.SetFocus
Exit Sub
End If
On Error GoTo 0

Ngi dng c th chn mt sheet khc trn th cha cc sheet khi ang chn vng d
liu. V vy, khng nn gi s rng vng d liu c chn s nm trn sheet hin hnh.
Tuy nhin, nu ngi dng chn mt sheet khc, a ch ca vng d liu s c t
ng thm vo mt tin t l tn ca sheet c chn. Chng hn nh:
Sheet2!$A$1:$C$4
Nu ch cn ly a ch ca mt trong vng d liu m ngi dng chn, ngi lp
trnh c th chn ra mt gc trn bn tri ca vng d liu bng cch s dng on
m lnh nh sau:
Set OneCell = Range(RefEdit1.Text).Range(A1)

GI ngi dng chn mt vng d liu no , c th s dng hp thoi InputBox


ca Excel, xem thm mc Hp thoi InputBox ca Excel Hm InputBox trang 161.

8.4. Thao tc trn thanh trnh n


Hu ht cc chng trnh chy trong h iu hnh Windows u c h thng thanh trnh n
bi tnh tin dng v h thng ca n. Thng qua thanh trnh n, cc chc nng ca chng
trnh c t chc v lit k gip ngi s dng c th d dng truy cp n tng tnh nng ca
chng trnh mt cch c h thng.

172
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

i vi cc ng dng m rng vit bng VBA, vic thc thi mt Macro no u c thc
hin thng qua trnh qun l Macro hoc c thc thi trc tip trong VBAIDE. iu ny gy
ra nhiu kh khn cho nhng ngi dng v lm gim tnh chuyn nghip ca ng dng. Thay
vo , vi mt s on m lnh n gin, ngi lp trnh c th t xy dng h thng trnh
n, to nn mt giao din ngi dng c tnh hiu qu cao cho ng dng m rng ca mnh.
Excel c hai h thng thanh trnh n tng ng vi kiu sheet c chn l Worksheet hay
Chartsheet. Thanh trnh n th nht, c tn l Worksheet Menu Bar, c hin th khi sheet
c chn l Worksheet hoc khi ng tt c cc Workbook. y l thanh trnh n mc
nh ca Excel. Thanh trnh n th hai, c tn l Chart Menu Bar, c hin th khi sheet
c chn l Chart sheet hoc ngi dng ang chn mt i tng Chart nhng trong
Worksheet.

Hnh IV-20: Thanh trnh n trong Excel.

8.4.1. Cu trc ca h thng thanh trnh n


Cu trc ca h thng thanh trnh n trong Excel c th c th hin thng qua s hnh
cy nh sau:

Menu Bar: L hng ch nm trn cng, ngay pha di thanh tiu ca ng dng
Excel. Nh cp, tu vo tng ng cnh m thanh Menu Bar c th l Worksheet
Menu Bar hoc Chart Menu Bar.
Menu: L mt thnh phn trong h thng trnh n ca Excel, khi ngi dng kch chut
vo mt Menu th mt danh sch cc MenuItem s hin ra.

173
GIOTRNHTNGHOTHITKCUNG

Menu Item: l mt thnh phn ca Menu xut hin khi ngi dng kch chut vo menu.
Mi Menu Item s thc hin mt tc v trong chng trnh khi ngi dng kch chut ln
Menu Item .
Ngoi ra, trong h thng menu ca Excel cn c khi nim Separator Bar, l mt ng
gch ngang phn cch gia cc Menu Item dng nhm cc Menu Item c lin quan
vi mt mc tiu no .
Cc Menu c th lng vo nhau theo nhiu cp khc nhau. Mt Menu cng c th l MenuItem
nm trong mt Menu khc. Chng hn nh Menu View ca Excel c MenuItem tn l
Toolbars, v n lt mnh, Toolbars cng chnh l mt Menu, c cha cc MenuItem khc
nh: Standard, Formatting,
Hnh sau s minh ho r hn v cu trc ca h thng trnh n trong Excel.

Hnh IV-21: H thng thanh trnh n

8.4.2. To trnh n tu bin


Ngi lp trnh c th d dng thm v hiu chnh h thng trnh n trong Excel thng qua
cc on m lnh bng VBA theo cc bc sau:
1. Phc tho trnh n cn to v cc chc nng tng ng.
2. Vit m lnh cho tng MenuItem. Mi on m lnh ny c cha trong mt chng
trnh con dng Sub.
3. Tham chiu n Menu Bar, ni cn to trnh n tu bin.
4. To Menu v MenuItem.
5. Gn cc on m lnh tng ng to bc 2 cho tng Menu Item.
tham chiu n Menu Bar, c th s dng on m sau:
Dim mnuBar as CommandBar
Set mnuBar = Application.CommandBars("Worksheet Menu Bar")

to Menu v MenuItem, s dng phng thc Add c trong tp i tng Controls. Thc
cht, phng thc ny s thm mt iu khin vo trong tp i tng Controls ca i tng

174
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

gc, ni s cha Menu v MenuItem. C php ca phng thc Add nh sau (tt c cc tham
s u l tham s tu chn):

object.Add(Type, Id, Parameter, Before, Temporary)

Tham s M t
Object i tng cha, ni cha cc i tng s c thm vo bng phng thc
Add.
Type Xc nh kiu i tng s c thm vo trong tp i tng Controls ca
i tng Object. Tham s Type c th bng mt trong cc gi tr sau:
- Nu mun to Menu: gn Type= msoControlPopup
- Nu mun to Menu Item: gn Type= msoControlButton
Id S nguyn xc nh iu khin c xy dng sn. Trong trng hp ny,
khi cn to mt i tng mi, c th gn tham s ny bng 1 hoc b trng.
Parameter Vi Menu tu bin, tham s ny c th c dng gi thng tin n cc
th tc trong Visual Basic. Thng thng, tham s ny c b trng.
Before Mt s xc nh v tr xut hin ca i tng mi c thm vo. Nu tham
s ny c b trng, i tng mi s c thm vo v tr cui cng.
Temporary Nu bng TRUE, i tng ch xut hin tm thi. Ngha l i tng s
c xo i khi thot khi chng trnh. Gi tr mc nh ca tham s ny l
False.

Kiu gi tr tr v ca phng thc Add l i tng kiu CommandBarControl, hoc c th l


mt trong cc kiu d liu sau, tu thuc vo gi tr ca tham s Type:
Nu Type= msoControlPopup: kiu gi tr tr v l CommandBarPopup.
Nu Type= msoControlButton: kiu gi tr tr v l CommandBarButton.
Phng thc Add ch to cc i tng trng trn h thng thanh trnh n. V vy, ngi lp
trnh cn phi gn thm cc thuc tnh khc cho nhng i tng mi ny.
Di y l danh sch cc thuc tnh ca i tng kiu CommandBarControl:
Thuc tch M t
BeginGroup Nu gn bng TRUE, pha trc iu khin s xut hin Separator Bar ngn
cch cc nhm trnh n.
BuiltIn y l thuc tch ch c. Tr v gi tr TRUE nu iu khin ny l iu khin
c xy dng sn trong Excel.
Caption Chui vn bn s c hin th trn trnh n.
Enabled Nu bng TRUE, ngi dng c th kch chut ln i tng. Nu bng FALSE,
ngi dng s khng th kch chut, v iu khin s c mu xm.
FaceID S nguyn th hin cho hnh nh s c hin th bn cnh on vn bn c
hin th trn thanh trnh n.
Id y l thuc tnh ch c. L m s xc nh cc trnh n c nh ngha
trc trong Excel.
OnAction (Ch p dng vi CommandBarButton) Tn ca th tc VBA s c thc thi khi
ngi dng kch chut vo MenuItem.
ShortcutText (Ch p dng vi CommandBarButton) on vn bn hin th phn phm tt cho
MenuItem .

175
GIOTRNHTNGHOTHITKCUNG

State (Ch p dng vi CommandBarButton) Xc nh trng thi ca MenuItem: c c


nhn hay khng.
ToolTipText on vn bn s hin th khi ngi dng tr chut ngay pha trn iu khin.
Type y l thuc tnh ch c. S nguyn xc nh kiu ca iu khin

Thng thng, sau khi to mi Menu v MenuItem cn gn cc thuc tnh sau:


Caption
OnAction
FaceID
Di y l mt v d minh ho cc bc to mi mt Menu trong thanh trnh n Worksheet
Menu Bar
Vd:ToMenumi
1. Phc tho cu trc ca Menu nh sau:

2. Vit m lnh cho tng MenuItem


M LNH CHO MENUITEM2: TINH TONG
Sub Macro1()
MsgBox "Ban da chon MenuItem: Tinh Tong"
End Sub

M LNH CHO MENUITEM3: TINH TICH


Sub Macro2()
MsgBox "Ban da chon MenuItem: Tinh Tich"
End Sub

M LNH CHO MENUITEM6: LUA CHON 1


Sub Macro3()
MsgBox "Ban da chon MenuItem: Lua chon 1"
End Sub

M LNH CHO MENUITEM7: LUA CHON 2


Sub Macro4()
MsgBox "Ban da chon MenuItem: Lua chon 2"
End Sub

176
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

3. To h thng Menu v gn m lnh cho tng MenuItem


Sub TaoMenu()
Dim cb As CommandBar
Dim cpop As CommandBarPopup
Dim cpop2 As CommandBarPopup
Dim cbtn As CommandBarButton
' LY THAM CHIU N THANH TRNH N
Set cb = Application.CommandBars("Worksheet Menu Bar")

' TO MENU1: VI DU MENU (CommandBarPopup).


Set cpop = cb.Controls.Add(Type:=msoControlPopup, Temporary:=True)
cpop.Caption = "&Vi du Menu"

' TO MENUITEM2: TINH TONG (CommandBarButton).


' (thm MenuItem vo MENU1)
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
' Gn thuc tnh cho MenuItem.
cbtn.Caption = "Tinh Tong" Gn tiu
cbtn.OnAction = "Macro1" Gn m lnh

' TO MENUITEM3: TINH TICH (CommandBarButton).


Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Tinh Tich"
cbtn.OnAction = "Macro2"

' TO MENU4: MENU CAP 2 (CommandBarPopup).


' y l MenuItem bt u mt nhm trnh n khc
Set cpop2 = cpop.Controls.Add(msoControlPopup, , , , True)
cpop2.Caption = "Menu Cap 2"
' Thm SeparatorBar vo pha trc Menu ny.
cpop2.BeginGroup = True

' TO MENUITEM5: LUA CHON 1 (CommandBarButton).


Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &1"
cbtn.OnAction = "Macro3"

' TO MENUITEM6: LUA CHON 2 (CommandBarButton).


Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &2"
cbtn.OnAction = "Macro4"
End Sub

Trong cc cu lnh to h thng trnh n nh trn, tham s Temporary ca phng thc Add
u c gn bng True, v vy, khi ngi dng thot khi Excel th cc h thng trnh n
va thm vo s c t ng xo i.
8.4.3. Xo trnh n tu bin
Khi ngi dng ch ng workbook m khng ng Excel, trnh n va c thm vo vn
cn c hin th trn h thng thanh trnh n ca Excel hoc ngi dng lm vic vi mt
workbook khc m khng cn n nhng tnh nng trong trnh n. Nh vy, c nhng lc cn
phi xo trnh n va c thm vo. thc hin iu ny, c th s dng phng thc
Delete c trong i tng kiu CommandBarControl hoc CommandBarPopup hoc
CommandBarButton.
on m lnh sau thc hin xo trnh n Vi du Menu c to ra v d trn.

177
GIOTRNHTNGHOTHITKCUNG

Sub XoaMenu()
Dim cb As CommandBar
Dim cbp As CommandBarPopup
Ly tham chiu n thanh trnh n
Set cb = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
Tham chiu n trnh n Vi du Menu
Set cbp = cb.Controls("Vi du Menu")
If Not IsNull(cbp) Then
cbp.Delete
End If
End Sub

Ngoi ra, thay v xo trnh n va to ra, ngi lp trnh c th thit lp li trng thi ban u
ca h thng thanh trnh n trong Excel thng qua phng thc Reset. Sau khi s dng
phng thc ny, tt c cc trnh n do ngi dng to ra s c xo i, v h thng thanh
trnh n s tr v trng thi mc nh.
Sub ResetMenu()
Dim cb As CommandBar
Dim cbp As CommandBarPopup
Ly tham chiu n thanh trnh n
Set cb = Application.CommandBars("Worksheet Menu Bar")
cbp.Reset
End Sub

Trong hu ht cc trng hp, ngi lp trnh s to trnh n lc m workbook, v s xo


trnh n khi ng workbook v ta c th thc hin t ng qu trnh ny thng qua vic x l
s kin lin quan n vic m v ng Workbook. Trong s kin Workbook_Open, gi n
th tc thc hin vic to trnh n, cn trong s kin Workbook_BeforeClose, gi n th
tc thc hin vic xo trnh n.
S KIN Workbook_Open
Private Sub Workbook_Open()
Gi th tc thc hin vic to trnh n
TaoMenu
End Sub

S KIN Workbook_BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Gi th tc thc hin vic xo trnh n
XoaMenu
End Sub

8.4.4. Gn phm tt cho Menu Item


Gn phm tt cho Menu Item thc cht l gn phm tt cho Macro tng ng vi Menu Item
(l Macro c gn cho Menu Item thng qua thuc tnh OnAction). B sung on m lnh
sau vo cui th tc TaoMenu v d trc gn phm tt l CTRL+SHIFT+T cho Menu
Item Tinh Tong:
To phm tt cho MenuItem
Application.MacroOptions _
Macro:="Macro1", _
HasShortcutKey:=True, _
ShortcutKey:="T"

178
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Trong khi to h thng trnh n Vi du Menu v d trc, Menu Item Tinh Tong c
thuc tnh OnAction c gn bng Macro1. Do gn phm tt cho Menu Item ny,
ngi lp trnh phi thc hin thng qua vic gn phm tt cho Macro c tn l Macro1.

179
GIOTRNHTNGHOTHITKCUNG

180
CHNGV:LPTRNHTRNAUTOCAD

CHNG V: LP TRNH TRN AUTOCAD


1. Tng quan v AutoCAD
1.1. Kh nng ca AutoCAD
AutoCAD l mt phn mm h tr to bn v k thut c dng ph bin nht hin nay. y
l sn phm ca hng Autodesk v c pht trin lin tc trong nhiu nm nay, iu ny th
hin vic cp nht hng nm ca cc phin bn AutoCAD.
Vi AutoCAD, ngi dng c th d dng to ra bn v k thut dng 2 chiu v dng m hnh
ba chiu cho cc vt th vi nhiu cch th hin khc nhau nh dng khung li hoc dng vt
th c nh hnh di.

Hnh v trong AutoCAD c t chc ch yu theo dng vector v chun lu tr dng DWG
c bit n nh l chun lu tr hnh v dng vector hiu qu nht th gii. to s thun
li ti a cho ngi dng, AutoCAD c thit k vi cu trc v tnh nng rt hp l:
Khng gian to bn v c chia thnh hai loi:
Khng gian m hnh (Model), l ni m ngi dng c th v hay dng m hnh ca
bt c vt th no m khng cn quan tm n gii hn v kch thc ca i tng,
ca bn v cng nh t l trnh by.
Khng gian trnh by hay cn gi l khng gian in (Layout), l ni m ngi dng c
th v hay dng m hnh nh khng gian m hnh, nhng y khng phi l mc ch
chnh ca khng gian in. Mc ch chnh ca khng gian in l gip cho ngi dng c
th biu din hoc trnh by bn v theo tng ca mnh da trn m hnh c
dng (hay c v) trong khng gian m hnh. Trong khng gian in, vi s lng
khng hn ch, ngi dng c th d dng to ra nhng bn in c t l khc nhau,
cch b tr, sp t khc nhau t mt m hnh v ny. Hnh di l m hnh ca vt
th c xy dng trong khng gian m hnh.

181
GIOTRNHTNGHOTHITKCUNG

Vi m hnh ny, khi s dng khng gian in (Layout), ta c th to ra mt bn trnh by


kh n tng nh hnh sau:

Thao tc to bn v c thc hin thng qua cc lnh trong thanh trnh n, thanh cng
c, v c bit l thng qua dng lnh ca AutoCAD. Vi hng trm lnh sn c, cng
vi cch thc hin lnh a dng, cho nn ngi dng c th lm quen v s dng
AutoCAD trong mt thi gian ngn.
Hnh v trong AutoCAD, cho d n gin hay phc tp n my, u c to nn t
nhng i tng hnh hc c bn. V nhng i tng hnh hc c bn ny li c mt
h thng cc i tng phi hnh hc khc trong AutoCAD h tr vic to ra chng.
Vi cch t chc cc i tng hnh hc theo lp (Layer), AutoCAD cho php ngi
dng t chc bn v, cho d phc tp n my, thnh tng lp theo nhng ch khc
nhau, khin cho vic qun l v thao tc vi bn v tr nn d dng hn.
Cc tin ch v in bn v khin cho vic in n tr nn n gin v chuyn nghip.
Khi nhng tnh nng sn c ca AutoCAD khng p ng c nhu cu ca ngi dng
th ngi dng c th s dng kh nng cho php lp trnh m rng ca AutoCAD b
sung thm hay to mi nhng tnh nng chuyn bit cho AutoCAD nhm p ng c
nhu cu c nhn.
1.2. Giao din ca AutoCAD
Giao din ca AutoCAD, v c bn, l mt giao din ha kh linh hot, bao gm vng v
v cc thnh phn tr gip cho cc thao tc v. Cc lnh ca AutoCAD c th c thc hin
t thanh trnh n, t thanh cng c v t dng lnh trong giao din chnh (nh hnh di). Vi
cch thit k tng tc trc quan, ngi dng c th la chn hay nh v mt cch linh hot
cc i tng trn bn v, gip cho vic v c nhanh v chnh xc.
Trong thanh trnh n v thanh cng c, cc lnh c t chc theo nhm chc nng v ngi
dng c th t do thm bt hay thay i cc thnh phn trong cc thanh ny thng qua cc thit
lp ty chn trong Customize (bm phm phi chut trn thanh cng c) hoc iu chnh ni
dung tp ACAD.MNU ca AutoCAD. Khng gian v v khng gian in (vi hai khi nim
tng ng trong phn sau l ModelSpace v PaperSpace) c t chc c lp v cho php

182
CHNGV:LPTRNHTRNAUTOCAD

tham chiu, cng vi vic cho php ngi dng to i tng hnh hc trong c hai khng gian
ny khin cho vic t chc bn v t hiu qu cao.

Vi cc lnh, khi c gi t dng lnh, ta c th nh ngha li tn ca chng thun tin


cho vic s dng ca c nhn v d nh.
1.3. Kh nng m rng ca AutoCAD
Mc d AutoCAD c thit k vi cu trc rt linh hot, giao din thn thin v d s dng,
rt nhiu i tng hnh hc v phi hc sn c, hng trm lnh h tr to bn v v iu khin
AutoCAD c sn khin cho vic s dng AutoCAD nhanh, d v hiu qu cao, nhng ngay
t nhng phin bn u tin, AutoCAD c thit k vi kin trc m, ngha l n cho php
ngi dng t pht trin thm nhng phn mm mi chy trn AutoCAD, b sung nhng tnh
nng mi cho AutoCAD vi mc ch gip ngi dng c th bin AutoCAD thnh mt cng
c lm vic chuyn dng vi hiu sut cao.
Bn trong AutoCAD, t phin bn 2000 (R15), tch hp sn hai cng c lp trnh m rng
cho AutoCAD l AutoLISP v VBA. Bn cnh , nu nh ngi dng c nhu cu xy dng
nhng phn mm i hi can thip su vo AutoCAD, th ObjectARX l mt la chn ph
hp. Vi ObjectARX, ngi dng c th s dng ngn ng C++ trong b cng c lp trnh
Visual Studio ca Microsoft, mt b cng c lp trnh c coi l mnh v thn thin nht hin
nay, xy dng phn mm. Nh vy ta c th lp trnh m rng AutoCAD vi cc cng c
sau:
AutoLISP v Visual LISP: l cng c lp trnh n gin vi ngn ng lp trnh l
AutoLISP v mi trng lp trnh Visual LISP. Mt chng trnh vit bng AutoLISP
c lu tr c lp trn tp vn bn v c gi vo AutoCAD khi cn dng n bng
mt lnh ring. Do c th ring ca ngn ng lp trnh, AutoLISP ch thch hp cho vic
xy dng nhng chng trnh dng tin ch vi quy m nh v khng i hi nhng k
thut hay thut ton phc tp.
VB v VBAIDE: thng c gi l VBA, l cng c lp trnh c tch hp sn trong
AutoCAD trn c s ngn ng v mi trng lp trnh ca Visual Basic. Chng trnh
VBA c th c lu tr c lp hay nhng vo bn v. Do xut pht t Visual Basic nn
VBA trong AutoCAD l mt cng c lp trnh mnh, d pht trin v hiu sut cao. Tuy
183
GIOTRNHTNGHOTHITKCUNG

nhin, cng nh AutoLISP, vi VBA, ngi dng khng th can thip su vo bn trong
AutoCAD, v d nh khng th b sung thm vo AutoCAD mt i tng hnh hc
hoc phi hnh hc mi.
ObjectARX v VC++: thng c gi l ObjectARX, thc cht y l mt th vin lp
trnh cho VC++, vi th vin ny, ngi dng c th s dng VC++ to ra cc chng
trnh m khng c bt k s hn ch no trong vic tng tc vi AutoCAD. Chng
trnh s c bin dch thnh dng ARX (chnh l DLL) v khi cn s dng th ngi
dng c th gi chng vo trong AutoCAD bng mt lnh ring.
Qua kinh nghim trin khai cc d n phn mm trn AutoCAD, c th thy rng hu ht cc
nhu cu tnh ton v t ng to bn v thng thng u c th thc hin mt cch d dng v
nhanh chng bng VBA v AutoLISP, v vy, trong khun kh ca gio trnh ny, ni dung lp
trnh m rng AutoCAD bng VBA c t l trng tm bi tnh hiu qu ca n. Bn cnh
, khai thc tt nht AutoCAD, th vic kt hp VBA vi AutoLISP thc hin mt d n
phn mm l mt la chn hay, do , trong gio trnh ny cng cp n mt phn s kt
hp ny. Cn i vi ObjectARX, nhng ai quan tm c th xem trong gio trnh mn hc
Lp trnh trn ng dng nn.
2. Qun l d n VBA trong AutoCAD
2.1. D n VBA trong AutoCAD
Khng ging nh trong Excel, ch c mt loi d n VBA nhng ngay trong tp bng tnh
XLS, cc d n VBA trong AutoCAD c phn thnh 2 loi sau:
D n nhng (Embedded Project): l d n VBA c lu tr trong tp DWG cng
vi cc thng tin khc ca bn v trong AutoCAD. D n nhng c mt s c im sau:
Khng th ng hoc m cc bn v AutoCAD bi d n loi ny c thit lp l ch
lm vic bn trong bn v cha n.
Khi s dng d n nhng, ngi dng khng cn phi nh ni lu tr d n, khng
cn phi thc hin ti d n vo AutoCAD mi khi cn s dng cc chc nng c
trong d n bi tt c cc thao tc u c thc hin t ng khi m bn v c
cha d n nhng.
Cc chc nng c lp trnh trong d n VBA nhng ch c hiu lc i vi bn v
cha n, v nh vy, khi mun s dng cc chc nng ny cho nhng bn v khc,
ngi s dng buc phi sao chp d n VBA sang cc tp bn v ny.
D n c lp (Global Project): l d n c lu tch bit trong mt tp c phn m
rng l *.DVB v khng ph thuc vo mt bn v no c. D n VBA c lp c mt s
c im sau:
s dng mt tnh nng no trong d n VBA c lp, ngi s dng phi ti d
n vo AutoCAD.
D n VBA c lp c kh nng lm vic linh hot hn, c kh nng ng hoc m
bn v bt k hay c th tc ng ln tt c cc bn v ang m trong phin lm vic
ca AutoCAD. Vi d n c lp, vic phn phi v chia s m lnh c thc hin
d dng hn so vi loi d n nhng. D n c lp cng rt thch hp lu tr, tp
hp thnh b th vin s dng trong tt c cc bn v.
Li im ln nht ca d n nhng l kh nng t ng ti d n mi khi m bn v. Tuy
nhin, vic s dng d n nhng cng n cha nhiu im bt li, chng hn nh kch thc
ca tp bn v c cha d n nhng s tng ln do phi cha thm c phn d n VBA; hoc
khi mun hiu chnh d n VBA, ngi lp trnh phi tm li tt c cc tp bn v c cha d
n nhng thay i cho tng tp mt, mt cng vic nhm chn!

184
CHNGV:LPTRNHTRNAUTOCAD

Tuy khng c c kh nng t ng ti vo nh d n nhng, nhng loi d n c lp


thng c s dng nhiu hn bi cc thao tc ti mt d n VBA vo trong AutoCAD
thng rt n gin v nhanh chng. Ch c mt im lu l khi lm vic vi bn v nhiu
my tnh khc nhau th cn phi mang theo c tp bn v ln tp d n VBA c lp, cn vi
d n VBA nhng th ta ch cn mang theo tp bn v l .
Cu trc ca mt d n VBA trong AutoCAD cng tng t nh trong Excel. Ngoi cc thnh
phn nh UserForm, m-un chun, m-un lp, d n VBA trong AutoCAD cn c mt
thnh phn khc l: AutoCAD Objects Cc i tng ca AutoCAD. Trong thnh phn ny
c cha m-un ThisDrawing, y chnh l mt i tng i din cho bn v hin hnh ca
AutoCAD. Nh vy trong mt d n VBA ca AutoCAD c 4 thnh phn c th cha m lnh
l: Userform, m-un chun, m-un ThisDrawing v m-un lp.

Hnh V-1: Thnh phn AutoCAD Objects v m-un ThisDrawing ca d n VBA trong
AutoCAD

2.2. Trnh qun l d n VBA


Vi AutoCAD, qu trnh qun l cc d n VBA c thc hin rt d dng thng qua trnh
qun l d n VBA VBA Manager. hin th ca s VBA Manager, chn trnh n
ToolMacroVBA Manager (hoc gi lnh VBAMAN t dng lnh ca AutoCAD).

185
GIOTRNHTNGHOTHITKCUNG

Hnh V-2: Trnh qun l d n VBA VBA Manager.

ngha ca tng thnh phn trong ca s VBA Manager:


1. Danh sch cc bn v hin c trong AutoCAD (s dng n danh sch ny khi mun nhng
mt d n no vo trong mt bn v hoc tch d n ra khi bn v ).
2. Danh sch cc d n VBA hin ang c ti trong VBAIDE. Cc d n VBA, khi
c ti vo VBAIDE (cc d n c trong danh sch) th ngi dng c th s dng cc
tnh nng c trong d n, hiu chnh d n v to thm cc tnh nng mi khi cn.
3. To mt d n VBA mi, mc nh, d n VBA mi c to l d n c lp
4. Lu d n VBA vi tn khc (ch c hiu lc vi cc d n c lp). D n c lu vi
tn khc ny l d n c chn trong danh sch .
5. Ti mt d n c lp vo VBAIDE. Ngi dng s c yu cu chn mt tp d n
VBA (*.DVB) ti vo VBAIDE.
6. ng d n c lp khi VBAIDE. Ngi dng khng th truy cp n cc thnh phn
trong d n na (tuy nhin tp cha d n vn cn tn ti trong my tnh).
7. Nhng mt d n VBA vo mt bn v nh trc. Bn v c nh trc chnh l bn v
c la chn trong danh sch .
8. Tch d n nhng ra khi bn v c la chn trong danh sch (ch c hiu lc khi
bn v c cha d n nhng). Khi chn nt ny, ngi dng s c yu cu lu d n
c tch ra thnh mt d n c lp. Nu khng lu, d n s c xo khi tp bn v.
9. Hin th trnh qun l Macro trong AutoCAD.
10. Hin th VBAIDE, l ni s thc hin qu trnh thit k m lnh v giao din ca chng
trnh.
2.2.1. To mi, M v Lu d n VBA

186
CHNGV:LPTRNHTRNAUTOCAD

tomidnVBA
1. M ca s VBA Manager.
2. Chn nt lnh New.
Mc nh, d n mi c to s l mt d n c lp, c tn l ACADProject.
Sau khi to mi d n, ta c th nhng d n vo mt bn v no hoc c th lu ra mt tp
ring thnh d n c lp tu thuc vo mc ch s dng.
Ngoi ra ngi dng c th s dng lnh VBANEW t dng lnh ca AutoCAD to mi d n
VBA.
m/tidnVBA
1. M ca s VBA Manager.
2. Chn nt lnh Load Hin th hp thoi m d n VBA

Hnh V-3: Hp thoi m d n VBA.

3. Chn d n cn m v chn Open.


Ngoi ra ngi dng c th s dng lnh VBALOAD t dng lnh ca AutoCAD ti d n
VBA.
ludnVBA
1. Khi ng VBAIDE (nhn phm ALT+F11 hoc chn trnh n Tools Macro
Visual Basic Editor).
2. Chn d n cn lu trong ca s Project.
3. Chn trnh n File Save xxx (trong xxx l tn tp cha d n)
2.2.2. Nhng v tch d n VBA
nhngdnclpvomtbnv
1. M ca s VBA Manager.
2. Trong mc Drawing, chn bn v cn nhng d n vo.
3. Trong mc Projects, chn d n cn nhng vo bn v.

187
GIOTRNHTNGHOTHITKCUNG

4. Chn nt lnh Embed.


Sau khi ngi dng nhng d n vo bn v, VBAIDE s sao chp ton b d n c lp v
nhng vo bn v AutoCAD, ngha l ti thi im c hai d n VBA ging nhau cng tn ti,
mt l d n c lp v mt l d n nhng trong bn v.
tchdnnhngkhimtbnv
1. M ca s VBA Manager.
2. Trong mc Drawing, chn bn v c cha d n cn tch.
3. Chn nt lnh Extract.
4. Nu cn lu li d n, chn nt lnh Yes hp thoi xut hin sau , nu khng c th
chn No.
2.3. Qun l d n VBA t dng lnh
AutoCAD c cung cp mt s cu lnh lin quan n vic qun l d n VBA v thc thi
Macro trong VBA. Di y l danh sch cc cu lnh c lin quan:
Lnh Gii thch
VBAIDE M VBAIDE. Nu cha c d n no c m, AutoCAD s t to mt d n lp
mi, sau mi hin th VBAIDE.
VBAMAN Hin th trnh qun l d n VBA VBA Manager, qua ngi dng c th thc
hin cc thao tc trn d n VBA.
VBANEW To mi d n c lp.
VBALOAD Ti tp d n VBA (tp *.dvb) vo trong VBAIDE. Hp thoi m d n VBA s
c hin th ngi dng la chn tp d n cn m.
-VBALOAD Ti tp d n VBA vo trong VBAIDE nh lnh VBALOAD, nhng khng hin th
hp thoi, ngi dng phi nhp tn tp t dng lnh ca AutoCAD
VBAUNLOAD ng d n VBA ang c m trong VBAIDE. Trn dng lnh AutoCAD xut
hin du nhc, nhc ngi dng nhp tn tp cha d n cn ng.
VBARUN Thc thi Macro. AutoCAD s hin th mt hp thoi cho ngi dng chn Macro
cn thc thi.
-VBARUN Thc thi Macro t dng lnh ca AutoCAD. Ngi dng phi nhp tn ca Macro
cn thc thi ngay trn dng lnh ca AutoCAD. Nu c nhiu Macro trng tn
trong cc m-un khc nhau, s dng c php: <tn_m_un.tn_Macro>.
VBASTMT Thc thi mt biu thc/cu lnh ca VBA t dng lnh ca AutoCAD.

Khi kt hp cch qun l d n VBA bng dng lnh ca AutoCAD vi ngn ng lp trnh
AutoLISP th ta c th gi mt d n VBA hay s dng mt chc nng ca d n VBA bng
mt chng trnh AutoLISP.
3. Macro
3.1. Khi nim Macro trong AutoCAD
Cng tng t nh trong Excel, khi nim v Macro cng c a vo trong AutoCAD nh
l mt cng c gip cho ngi dng c th thc hin nhanh hn cng vic ca mnh nh kh
nng t ng thc hin ca AutoCAD thng qua Macro, m thc cht l mt chng trnh
VBA. Trong AutoCAD, c l Macro th chng trnh ny phi tha mn ng thi cc
quy nh sau:
L mt chng trnh con dng Sub;

188
CHNGV:LPTRNHTRNAUTOCAD

C phm vi l Public;
t trong m-un chun hoc m-un ThisDrawing.
Lu rng tn ca Macro cng chnh l tn ca chng trnh con ny.
Trong Excel, cc tnh nng ca ng dng m rng c th c th hin dng Macro ( thc
thi mt tc v no ) hoc dng hm (khi mun thc hin tnh ton, thao tc c tr v gi
tr). Cn trong AutoCAD, vi c tnh s dng ch yu l cc thao tc trn bn v nn cc tnh
nng ca ng dng m rng c th hin ch yu thng qua Macro, hm ch c s dng ni
b bn trong cc m-un ca d n VBA.
3.2. To mi v Hiu chnh Macro
Trong AutoCAD, do khng c kh nng to Macro dng kch bn nh trong Excel (m lnh
ca Macro c t ng sinh ra cn c vo s ghi li thao tc ca ngi dng trn Excel), nn
to mi hay hiu chnh Macro trong AutoCAD, ngi dng phi vit m lnh cho Macro
trc tip trong VBAIDE.
Nh cp, bn cht ca Macro chnh l mt chng trnh con dng Sub trong VBA, nn
to mi mt Macro, ngi dng c th trc tip vo VBAIDE v to ra mt chng trnh con
tha mn cc quy nh lin quan n Macro trong mc Error! Reference source not found..
AutoCAD s t ng nhn din tt c cc chng trnh con ph hp vi cc quy nh ny v
xem chng l cc Macro. Tuy nhin, ngi lp trnh cn c th thc hin to mt Macro mi
thng qua giao din hp thoi Macros.
ToMacrothngquahpthoiMacros
1. M hp thoi Macros bng cch chn trnh n ToolsMacroMacros (hoc s dng
lnh VBARUN t dng lnh AutoCAD, hoc nhn phm tt ALT+F8)

Hnh V-4: Hp thoi Macros

189
GIOTRNHTNGHOTHITKCUNG

2. Trong mc Macros in, chn ni s cha Macro t danh sch th xung.


3. Trong mc Macro name, nhp tn Macro cn to.
4. Chn Create to Macro mi. Nu ngi dng cha chn ni cha Macro bc ,
AutoCAD s hin th hp thoi yu cu ngi dng chn ni cha Macro.

Hnh V-5: La chn ni cha Macro

5. Mn hnh ca VBAIDE s c t ng hin ln, v con tr chut c t ngay v tr ci


t m lnh cho Macro mi. Lc ny ta c th bt u vit m lnh cho Macro mi.
6. Trong mn hnh ca VBAIDE chn trnh n FileClose and Return to AutoCAD tr
v mn hnh ca AutoCAD sau khi hon thnh vic vit m lnh cho Macro.
GI Trong AutoCAD, hin th hp thoi Macros, ngi lp trnh c th s dng phm
tt l ALT+F8; cn chuyn i qua li gia mn hnh AutoCAD v VBAIDE, ngi lp
trnh c th s dng phm tt l ALT+F11.

HiuchnhMacro
1. M hp thoi Macros.
2. Chn Macro cn hiu chnh trong danh sch cc Macro.
3. Chn Edit AutoCAD s hin th VBAIDE v chuyn con tr vo v tr cha m lnh ca
Macro bt u hiu chnh Macro.
Tt nhin ngi dng c th hiu chnh bt c Macro no m khng cn s dng hp thoi
Macros. Ngi dng ch cn khi ng VBAIDE v tm chng trnh con tng ng vi
Macro cn hiu chnh, m lnh ca chng trnh con ny cng chnh l m lnh ca Macro, do
, hiu chnh chng trnh con ny cng chnh l hiu chnh Macro.
3.3. Thc thi Macro
Sau khi vit m lnh cho Macro, ngi dng c th thc thi Macro trc tip trong VBAIDE
(tham kho mc Thc thi Macro trc tip t VBAIDE trang 106). Ngoi ra, cng c th thc
thi Macro thng qua hp thoi Macros, hoc thc thi Macro t dng lnh AutoCAD.
thcthiMacrothngquahpthoiMacros
1. M hp thoi Macros.

190
CHNGV:LPTRNHTRNAUTOCAD

2. Chn Macro cn thc thi trong danh sch cc Macro.


3. Chn Run AutoCAD s thc thi Macro c chn.
thcthiMacrotdnglnhAutoCAD
1. Ti dng lnh AutoCAD, g lnh VBARUN nhn phm ENTER.
2. AutoCAD nhc ngi dng nhp tn Macro: Macro name: Nhp tn Macro v nhn
phm ENTER. Nu c nhiu Macro trng tn nm trong cc m-un khc nhau, cn s
dng cu trc <Tn_m-un.Tn_Macro> chn ng Macro cn thc thi.
3.4. nh ngha lnh mi bng AutoLISP
C th ni, mt trong nhng im mnh ca AutoCAD chnh l ca s dng lnh. Thng qua
ca s dng lnh ny, mi thao tc i vi bn v u c th c thc hin mt cch nhanh
chng bng bn phm vi h thng cc lnh c nh ngha sn.
thc hin mt chc nng mi c to ra bng cch lp trnh trong VBA, hay ni cch khc
l thc thi mt Macro, r rng phi thc hin qua kh nhiu bc. Cho nn, to ra s
thun tin cho ngi s dng, nn nh ngha lnh mi, m qua ngi s dng c th thc
thi Macro ch vi mt lnh n gin, ging nh khi cn v ng thng, ta ch cn s dng
lnh line dng lnh AutoCAD. S kt hp vi AutoLISP l mt gii php tt v d dng
thc hin mc tiu ny.
Vi VBA, ngi dng c th to Macro thc hin mt thao tc no . Cn vi AutoLISP,
ngi dng c th nh ngha mt lnh mi thc thi Macro c to trong d n VBA.
Hay ni cch khc, AutoLISP l chic cu ni nhm to s lin kt gia dng lnh AutoCAD
v Macro trong d n VBA.
Tuy nhin, nu ch c lu trong nhng tp d n VBA v tp AutoLISP thng thng th
nhng lnh ch c hiu lc khi ngi dng ti ng thi d n VBA v tp AutoLISP vo
trong AutoCAD. V vy, khi mun cc lnh mi ny c hiu lc ngay khi s dng AutoCAD
(ngha l ngi s dng khng cn phi lm thm bt c mt thao tc no khc, ch cn khi
ng AutoCAD l c th dng c ngay cc lnh ny) th ngi lp trnh s phi lu d n
VBA thnh tp c tn l ACAD.DVB v tp AutoLISP s c lu vi tn l ACAD.LSP, v
c hai tp ny phi c lu vo th mc ci t ca AutoCAD (v d i vi AutoCAD 2002,
nu ci t thng thng, th th mc ci t ca AutoCAD trong Windows s l: C:\Program
Files\AutoCAD 2002). y l hai tp s c t ng ti ln ngay sau khi khi ng
AutoCAD, v vic cn li ca ngi dng l s dng tt c nhng tnh nng c trong cc tp
ny.
Di y l mt v d n gin to lnh mi trong AutoCAD: chng trnh (Macro)
HelloWorld.
M t ni dung chng trnh (Macro): Macro ny s hin th hp thoi yu cu ngi s dng
nhp vo mt thng ip, sau thng ip ny s c v trn khng gian m hnh ca
AutoCAD. thc thi Macro ny, ta ch cn g lnh Hello trong dng lnh AutoCAD. V y
s l lnh mi trong AutoCAD, n lun sn sng hot ng ngay sau khi AutoCAD khi ng
xong.
TolnhmitrongAutoCADbngAutoLISPvVBA
3.4.1. To d n mi
Cc bc sau s to mt d n mi v lu trong th mc ci t ca AutoCAD vi tn l
ACAD.DVB.
1. Khi ng AutoCAD.

191
GIOTRNHTNGHOTHITKCUNG

2. M ca s VBA Manager (lnh VBAMAN).


3. Chn New.
4. Chn d n VBA va c to trong danh sch cc d n, sau chn Save As
5. Trong hp thoi Save As, chn th mc ci t ca AutoCAD trong mc Save in; cn
trong mc File name nhp vo ACAD.DVB.
6. Chn Save lu d n v quay v ca s VBA Manager.
3.4.2. To v th nghim Macro HelloWorld
7. Trong ca s VBA Manager, chn Macros hin th hp thoi Macros.
8. Chn d n ACAD.DVB trong mc Macros in:

9. Trong mc Macro name, nhp vo tn Macro l HelloWorld

10. Chn Create. Mn hnh VBAIDE s c hin th, trong ca s m lnh, con tr s c
t v tr ca Macro va c to. Ta s thy c on m lnh c to sn nh
sau:
Sub HelloWorld()
End Sub

11. Thay on m lnh trn bng on m lnh sau:


Sub HelloWorld()
Dim strMsg As String
strMsg = InputBox("Nhap thong diep chao mung", "HelloWorld")
Dim objText As AcadText
Dim pInsert(0 To 2) As Double
pInsert(0) = 50: pInsert(1) = 100: pInsert(2) = 0
Set objText = ThisDrawing.ModelSpace.AddText(strMsg, pInsert, 2.5)
ZoomExtents
End Sub

12. t con tr vo gia hai dng Sub HelloWorld() v End Sub, sau nhn phm F5
thc thi th Macro. Mt hp thoi nh s hin ln yu cu ngi dng nhp vo mt thng
ip Nhp vo thng ip v nhn OK Thng ip va nhp s c v trn khng
gian m hnh ca AutoCAD.

192
CHNGV:LPTRNHTRNAUTOCAD

13. Trong mn hnh ca VBAIDE, chn trnh n File Save lu tp d n ACAD.DVB.


Tip tc chn trnh n File Close and Return to AutoCAD tr v AutoCAD.
3.4.3. To lnh mi bng AutoLISP
Cc bc tip sau s tin hnh to mt tp ACAD.LSP mi, khai bo mt lnh mi trong
AutoCAD thng qua AutoLISP v lnh s thc thi Macro HelloWorld va c to.
CH Nu trong th mc ci t ca AutoCAD c tp ACAD.LSP, ch cn sao chp
on m bc 15 v thm vo cui tp ACAD.LSP c.

14. Khi ng chng trnh son tho vn bn, v d nh chng trnh Notepad c sn trong
Windows. Trong Windows, chn trnh n Start Run. Trong hp thoi Run, nhp
notepad sau nhn OK khi ng trnh son tho vn bn Notepad.
15. Trong chng trnh Notepad, nhp vo on khai bo sau:
(defun C:Hello()
(command "-vbarun" "HelloWorld")
)

Trong Hello l lnh c khai bo ng k s dng trong AutoCAD. Cn HelloWorld


l tn Macro to ra trong VBA cc bc trc.
16. Chn trnh n File Save. Trong hp thoi Save As, chn thc mc ci t ca
AutoCAD trong mc Save in, trong mc File name nhp vo ACAD.LSP Chn Save.
17. Thot khi chng trnh AutoCAD (nu ang thao tc trn AutoCAD). Khi ng li
chng trnh AutoCAD. Trong dng lnh ca AutoCAD, g lnh Hello. Tht bt ng, mt
hp thoi yu cu ngi dng nhp thng ip cho mng xut hin - Macro HelloWorld
c thc thi.
Nh vy, bng cch s dng VBA kt hp vi AutoLISP, ngi lp trnh c th to thm rt
nhiu lnh mi trong AutoCAD mt cch d dng.
hiu hn v AutoLISP, c th c thm ti liu hng dn c sn trong AutoCAD.
4. H thng i tng trong AutoCAD
4.1. M hnh i tng trong AutoCAD
AutoCAD c to thnh t nhiu thnh phn khc nhau v chng lun c mt mi lin h
cht ch c quy nh t trc theo mt cu trc nht nh. Nu ch s dng AutoCAD vi
cc lnh c sn v (mc thng thng) th ngi dng khng cn bit n cu trc ny,
i vi h, kh nng v mc tin dng ca cc lnh ny mi l quan trng. Nhng khi s
dng AutoCAD nh l mt ng dng nn lp trnh, th lc ny c nhiu khi nim phi c
hiu theo cch khc, thit thc cho vic lp trnh. AutoCAD c coi nh l mt i tng
c cu thnh t nhng i tng khc, nhng i tng con ny, theo cch hiu thng
thng, chnh l cc thnh phn ca AutoCAD. Trong tng i tng con , c th c nhiu
i tng cp thp hn na, hay ni cch khc, mt i tng c th bao gm nhiu i
tng con vi cc cp khc nhau. Cc i tng ny c t chc cht ch theo mt cu trc
c nh, v da vo cu trc t chc i tng ny, AutoCAD cho ngi dng ci nhn tng
quan v cu to ca n cng nh ch cho ngi dng bit cn phi lm nh th no tc ng
ln mt i tng c th (hay thnh phn) ca n. Thng thng cu trc ny c gi l m
hnh i tng trong AutoCAD v c biu din di dng cu trc cy phn nhnh. Vi cu
trc ny, ngi dng c th d dng truy cp n i tng mnh cn thao tc bng cch tra cu
theo nhnh ca i tng .

193
GIOTRNHTNGHOTHITKCUNG

Mi i tng trong cu trc trn s tng ng vi mt thnh phn ca AutoCAD, v d nh


i tng Preferences s tng ng vi hp thoi sau trong AutoCAD:

Nhng thao tc bng m lnh tc ng ln i tng Preferences s tng ng vi vic


ngi dng thao tc trc tip ln hp thoi Options t trong AutoCAD.
Nh vy c th thy rng, lp trnh tt trn AutoCAD, ngi dng, trc ht, phi quen
thuc v thao tc thnh tho trn cc thnh phn (hay i tng) ca AutoCAD.
Trong AutoCAD, c rt nhiu loi i tng khc nhau, chng hn nh:
Cc i tng hnh hc: line, arc, text, dimension
Thit lp v nh dng: linetype, dimension style
Cu trc t chc: layer, group, block
i tng lin quan n hin th bn v: view, viewport,
V ngay c bn v v bn thn chng trnh AutoCAD cng c xem l i tng.
M hnh i tng ca AutoCAD trong VBA c th hin di dng cu trc cy phn cp,
trong i tng gc l Application, chnh l phin bn AutoCAD ang chy. Nh c m
hnh i tng m ngi lp trnh c th bit c mt i tng c th cho php truy cp n
nhng i tng no cp tip theo.
Di y l m hnh i tng rt gn trong AutoCAD dng cho vic lp trnh bng VBA. M
hnh i tng y c th tham kho trong ti liu ActiveX and VBA Developer's Guide i
km AutoCAD.

194
CHNGV:LPTRNHTRNAUTOCAD

Application Ch gii:
Preferences Tp i tng
Documents i tng

Document

ModelSpace Arc

PaperSpace Circle

PViewPort Hatch
DimStyles DimStyle
Line
Layers Layer
MText
Layouts Layout
Point
Linetypes Linetype

TextStyles Polyline
TextStyle

SelectionSets SelectionSet Ray

Plot Text

Utility

MenuGroups

Hnh V-6: M hnh i tng trong AutoCAD.

Mi i tng (Object), cng ging nh mt vt th, u c nhng tnh cht v nhng hnh vi
c trng cho n. Trong lp trnh, tnh cht ca i tng c biu din thng qua khi nim
thuc tnh, cn hnh vi c biu din thng qua khi nim phng thc. Chng hn nh i
tng Application, l i tng th hin cho chng trnh AutoCAD, c thuc tnh Caption
cha tiu ca chng trnh AutoCAD v phng thc Quit dng thot khi chng trnh
AutoCAD. truy cp n cc thnh phn (phng thc, thuc tnh, ) ca i tng, ta s
dng quy tc du chm (.):
<Tn i tng>.<Tn phng thc/Thuc tnh>

Cc i tng c nhng im chung nhau cn c th c nhm li v c biu din thng


qua tp i tng (collection). Mi mt tp i tng c cc phng thc v thuc tnh ring
ngi dng tc ng ln n nh: thm i tng tp i tng bng phng thc Add (ng
vi hu ht cc loi tp i tng), thuc tnh Count dng m s i tng trong tp i
tng, phng thc Item s dng truy cp bt k i tng no trong tp i tng.
4.2. Mt s i tng chnh trong AutoCAD
4.2.1. i tng Application
i tng Application l i tng th hin cho mt phin lm vic ca AutoCAD, i tng
ny s c t ng to ra mi khi khi ng chng trnh AutoCAD. Tt c cc thnh phn
v thao tc thc hin trong ca s chnh ca chng trnh AutoCAD u c th hin thng
qua cc phng thc v thuc tnh ca i tng Application. V d, i tng Application c
thuc tnh Preferences tr v i tng Preferences. i tng ny cho php truy cp n cc
195
GIOTRNHTNGHOTHITKCUNG

cu hnh bn trong ca hp thoi Option. Cc thuc tnh khc ca i tng Application cho
php truy cp n cc d liu ring ca chng trnh chng hn nh tn v phin bn chng
trnh, kch thc, v tr ca ca s ... . Cc phng thc ca i tng Application s thc hin
cc thao tc nh: to mi, m, ng bn v hay thot khi AutoCAD.
i tng Application l i tng gc trong m hnh i tng ca AutoCAD. T i tng
Application, ta c th truy xut n bt k i tng no, chng hn nh i tng Application
c cc lin kt n bn v AutoCAD thng qua tp i tng Documents, cc trnh n v
thanh cng c AutoCAD thng qua tp i tng MenuBar v MenuGroups, v VBAIDE
thng qua mt thuc tnh gi l VBE.

Hnh V-7: Cc thnh phn ca i tng Application.

i tng Application l i tng ton cc. iu ny c ngha l tt c cc phng thc v


thuc tnh ca i tng Application lun c hiu lc trong VBAIDE, tc l khi truy cp n
cc phng thc v thuc tnh ca i tng Application u khng cn c tin t Application
trc nn hai cu m lnh di y u c tc dng nh nhau l thng bo ni dung thanh
tiu ca ng dng AutoCAD ang chy:
MsgBox Application.Caption
MsgBox Caption

Thng bo c th xut hin nh hnh di:

4.2.2. i tng Document


i tng Document, thc cht l mt bn v AutoCAD ang c m, thuc tp i tng
Documents (tng ng vi tt c cc bn v ang c m), cho nn n cha tt c cc i
tng hnh hc v phi hnh hc trong mt bn v AutoCAD cng nh cha hu ht cc i
tng (hay thnh phn) khc ca bn v nh Views hay Viewports. truy cp n cc i
tng ca mt bn v ta cn phi thng qua i tng Document tng ng vi bn v . Nh
trong m hnh i tng trn, cc i tng hnh hc (ng thng, hnh trn, cung, ) c
truy cp thng qua tp i tng ModelSpace v PaperSpace, cn cc i tng phi hnh hc
(layer, linetype, text style, ) c truy cp thng qua tp i tng c tn tng ng, chng
hn nh Layers, Linetypes, TextStyles.

196
CHNGV:LPTRNHTRNAUTOCAD

Trong mi d n VBA, ThisDrawing l mt i tng kiu Document v lun c sn. Vi i


tng ThisDrawing ny, ngi dng khng cn phi khai bo hoc gn gi tr cho i tng
ny m c th truy cp c ngay do n lun tn ti trong d n VBA. ThisDrawing tham
chiu n bn v hin hnh trong AutoCAD, ngha l nhng tc ng ln i tng ny s
tng ng vi vic tc ng ln bn v hin hnh trong AutoCAD. Mt i tng tng

197
GIOTRNHTNGHOTHITKCUNG

ng vi ThisDrawing chnh l i tng ActiveDocument, i tng ny cng l mt thuc


tnh ca i tng Application.
hin th tn bn v hin hnh trong AutoCAD ta c th truy cp theo nhng cch sau (t
m-un ThisDrawing ca d n VBA):
MsgBox Name
MsgBox ThisDrawing.Name
MsgBox Application.ActiveDocument.Name

4.2.3. Tp i tng
AutoCAD t chc hu ht cc i tng vo trong tp i tng, v d nh tt c cc i tng
hnh hc, cho d khc nhau v loi i tng, u c t trong tp i tng ModelSpace,
PaperSpace v Block. truy cp vo mt i tng no ta phi thng qua tp i tng
cha n.
Mi mt tp i tng c mt phng thc dng thm i tng vo bn thn tp i tng
v hu ht cc tp i tng u s dng phng thc Add thc hin nhim v ny. Ch
rng, trong AutoCAD, khi thm cc i tng hnh hc vo tp i tng lin quan (nh
ModelSpace v PaperSpace) th phng thc dng thc hin nhim v ny c tn l
Add<Tn i tng>, v d thm vo mt ng thng (Line) ta s dng phng thc
AddLine. Trong khi , i vi cc i tng khc, v d nh cc i tng phi hnh hc nh
Layer chng hn, th phng thc ca tp i tng Layers dng thm mt i tng vo
trong tp i tng li c tn l Add.
Cch thc thm i tng vo tp i tng:
ModelSpace.AddLine (P1, P2)
Layers.Add ("ABC")

Cc tp i tng c nhng phng thc v thuc tnh ging nhau dng thao tc vi chng
cng nh vi cc i tng bn trong chng. V d thuc tnh Count dng truy cp b m
s i tng c trong tp i tng. Phng thc Item s dng truy cp bt k i tng
no trong tp i tng.
on m sau s hin th s i tng hnh hc hin c trong bn v v tn ca i tng hnh
hc u tin:
MsgBox ModelSpace.Count
MsgBox ModelSpace.Item(0).ObjectName

4.2.4. i tng phi hnh hc


Cc i tng phi hnh hc l nhng i tng khng th nhn thy c, chng c s dng
trong AutoCAD thit lp cc thuc tnh cho i tng hnh hc. Nhng i tng phi hnh
hc hay gp l: Layer, Linetype, DimStyle, ... Cc i tng phi hnh hc thng c cha
trong cc tp i tng c tn tng ng, v d nh Layers, Linetypes, DimStyles,
Cch thc to ra mt i tng phi hnh hc l s dng phng thc Add ca i tng tp
i tng tng ng. V d sau s to ra mt Layer mi c tn l ABC:
Layers.Add ("ABC")

hiu chnh v truy vn cc i tng phi hnh hc, s dng cc phng thc v thuc tnh
ring trong tng i tng tng ng. V d sau s thay i mu ca Layer ABC thnh mu
:

198
CHNGV:LPTRNHTRNAUTOCAD

Layers("ABC").Color = acRed

Mi loi i tng phi ho u c cc phng thc thit lp v gi li d liu m rng


(xdata) v xo bn thn i tng. V d sau s xa lp ABC:
Layers("ABC").Delete

Cch thc thao tc trn cc i tng phi hnh hc s c trnh by c th phn Cc thao
tc c bn trong AutoCAD trang 200.
4.2.5. i tng hnh hc
i tng hnh hc hay cn gi l thc th, l nhng i tng hu hnh cu thnh bn v ca
AutoCAD, mt s i tng in hnh loi ny l: ng thng (Line), hnh trn (Circle), .
to nhng i tng ny, ta s dng phng thc Add<Tn thc th> ca tp i tng
tng ng. hiu chnh hoc truy vn cc i tng, ta s dng cc phng thc v thuc
tnh ca bn thn tng i tng.
Mi i tng hnh hc u c cc thuc tnh cho php hiu chnh i tng nh Copy, Erase,
Move, Mirror . Lu rng, nhng thuc tnh ny s tc ng ln i tng tng t nh khi
ta s dng cc lnh tng ng trong AutoCAD hiu chnh i tng.
Nhng i tng hnh hc cn c cc phng thc xc lp v gi li cc d liu m rng
(xdata), la chn v cp nht, ly hnh bao ca i tng. Trong cc i tng hnh hc u c
cc thuc tnh in hnh nh Layer, Linetype, Color, v Handle cng nh nhng thuc tnh
ring bit, ph thuc vo loi i tng, chng hn nh Center, Radius, v Area.
Di y l cc phng thc v thuc tnh c trong hu ht cc i tng hnh hc.
Ccphngthccaitnghnhhc
Phng thc Gii thch
ArrayPolar Nhn bn dng cc i tng c chn (ging nh lnh array) da trn s
i tng cn nhn bn, gc quay cn to i tng v tm ca cung trn.
ArrayRectangular Nhn bn dng ch nht i tng c chn (ging nh lnh array) da
trn s hng, s ct, s tng v cc khong cc tng ng.
Copy Sao chp i tng c chn. i tng mi c to s c v tr trng vi
i tng gc.
GetBoundingBox Phng thc ny tr v to hai im cu thnh hnh ch nht bao i
tng c chn.
Highlight nh trng thi ca i tng: c ang c chn hay khng.
IntersectWith Tr v to cc im m i tng c chn giao vi cc i tng khc.
Ngi lp trnh cng c th thit lp cc ch khc nhau trong qu trnh tm
giao vi cc i tng khc.
Mirror Ly i xng i tng qua mt ng thng i qua hai im do ngi dng
nh ra.
Move Di chuyn i tng c chn theo vector xc nh bng hai im do ngi
dng nh ra.
Rotate Xoay i tng quanh mt im.
ScaleEntity Co gin i tng c chn theo mt t l nht nh vi mt im c s cho
trc.
Update Cp nht i tng trn mn hnh bn v.

199
GIOTRNHTNGHOTHITKCUNG

Ccthuctnhcaitnghnhhc
Thuc tnh Gii thch
Color Xc nh mu cho i tng. Gi tr mu c th nhp l s nguyn t 0 n 256
hoc theo cc hng s c nh ngha trc trong VBA.
Layer Xc nh lp cho i tng c chn.
Linetype Xc nh kiu ng cho i tng c chn.
LinetypeScale Xc nh t l kiu ng cho i tng c chn.
Lineweight Xc nh b dy nt v ca i tng c chn.
Visible Xc nh tnh nhn thy ca i tng trong bn v.

5. Cc thao tc c bn trong AutoCAD


5.1. iu khin AutoCAD
5.1.1. To mi, M, Lu v ng bn v
Nhng thao tc ny c thc hin thng qua vic truy cp n tp i tng Documents v
i tng Document.
to mt bn v mi, hoc m mt bn v c, ta phi s dng cc phng thc trong tp
i tng Documents. Phng thc Add s to mt bn v mi v thm bn v vo tp i
tng Documents. Phng thc Open s m mt bn v c v cng s thm bn v vo
tp i tng Documents. Ngoi ra cn c phng thc Close trong tp i tng Documents
dng ng tt cc cc bn v ang m trong phin lm vic ca AutoCAD.
lu, nhp hoc xut mt bn v, ta s dng cc phng thc ca i tng Document:
Save, Save As, Import v Export.

Mbnv
m bn v, s dng phng thc Open c trong tp i tng Documents. Bn v va c
m s c chuyn thnh bn v hin hnh. C php ca phng thc Open nh sau:

object.Open Name[, ReadOnly]

Object y l tp i tng Documents hoc mt i tng c kiu l Document. ngha


ca cc tham s nh sau:
Tham s Gii thch
Name L chui k t cha ng dn y n tp bn v cn m.
ReadOnly L tham s tu chn. Nu gn tham s ny bng TRUE, bn v c m ra vi
thuc tnh ch c, ngha l ngi dng khng th lu bn v. Gi tr mc nh ca
thuc tnh ny l FALSE.

V d sau s dng phng thc Open m mt bn v c. Khi thc hnh, cn thay i tn


bn v hoc ng dn cho bin dwgName ch n mt bn v hin c trong my tnh.
Sub OpenDrawing()
Dim dwgName As String
dwgName = "C:\Program Files\AutoCAD 2002\Sample\campus.dwg"
On Error Resume Next
Application.Documents.Open dwgName M bn v

200
CHNGV:LPTRNHTRNAUTOCAD

If Err.Description <> "" Then Thng bo khi c


li
MsgBox "File " & dwgName & " does not exist."
Err.Clear
End If
End Sub

Tobnvmi
to bn v mi, s dng phng thc Add c trong tp i tng Documents. Gi tr tr v
ca phng thc ny l mt i tng kiu Document cha bn v va c to. C php ca
phng thc Open nh sau:

Set RetVal = Documents.Add([TemplateName])

Tham s Gii thch


TemplateName Tham s tu chn. L chui k t cha ng dn y n tp bn v mu
(tp *.dwt). Nu khng nhp tham s ny, AutoCAD s to bn v da trn tp
bn v mu mc nh (thng c tn l Acad.dwt).
RetVal i tng kiu Document cha bn v va mi to.

V d sau s dng phng thc Add to mt bn v mi da trn tp bn v mu mc nh.


Sub NewDrawing()
Dim docObj As AcadDocument
Set docObj =Documents.Add To bn v mi
End Sub

Lubnv
lu bn v, c th s dng phng thc Save (lu bn v vi tn hin hnh) hoc SaveAs
(lu bn v vi tn khc). C php ca cc phng thc trn nh sau:

Object.Save
Object.SaveAs FileName[, FileType]

Tham s Gii thch


Object i tng kiu Document, l bn v s c lu.
FileName L chui k t cha tn tp s c lu (bao gm c ng dn y ). Nu
khng ch ra ng dn y , tp bn v s c lu vo th mc hot ng ca
AutoCAD (thng thng l C:\Program Files\AutoCAD 2002).

201
GIOTRNHTNGHOTHITKCUNG

FileType Tham s tu chn, l hng s xc nh kiu tp bn v s c lu. Cc hng s


c th l:
acR14_DWG : tp AutoCAD Release14/LT97 DWG (*.dwg)
acR14_DXF : tp AutoCAD Release14/LT97 DXF (*.dxf)
acR15_DWG : tp AutoCAD 2000 DWG (*.dwg)
acR15_DXF : tp AutoCAD 2000 DXF (*.dxf)
acR15_Template: tp AutoCAD 2000 Drawing Template File (*.dwt)
acNative : tp bn v c lu vi kiu tp mi nht ng vi phin bn
AutoCAD hin hnh. Trong AutoCAD 2002, gi tr ny tng ng vi hng s
acR15_DWG.

V d sau s lu bn v hin hnh s dng tn tp sn c ng thi cng lu bn v vi mt tn


khc.
Sub SaveActiveDrawing()
Lu bn v hin hnh s dng tn tp sn c
ThisDrawing.Save
Lu bn v s dng tn khc
ThisDrawing.SaveAs "MyDrawing.dwg"
End Sub

Thng thng, trc khi thot khi phin lm vic ca AutoCAD hoc trc khi ng bn v,
ngi lp trnh thng mun kim tra xem bn v c lu i hay cha. lm c vic
ny, c th s dng thuc tnh Saved c trong i tng cha bn v (i tng Document
tng ng).
V d sau s kim tra xem bn v c lu hay cha v s hi ngi dng xem c ng
lu bn v hay khng, nu khng ng , s thot khi chng trnh. Nu ng , s s dng
phng thc Save lu bn v hin hnh.
Sub TestIfSaved()
If Not (ThisDrawing.Saved) Then
If MsgBox("Do you wish to save this drawing?", _
vbYesNo) = vbYes Then
ThisDrawing.Save
End If
End If
End Sub

ngbnv
ng bn v, s dng phng thc Close c trong i tng Document. C php ca
phng thc Close nh sau:

object.Close([SaveChanges][, FileName])

Tham s Gii thch


object i tng kiu Document, l i tng cha bn v cn ng.
SaveChanges Tham s tu chn, xc nh xem c cn phi lu bn v li trc khi ng hay
khng. Nu bng TRUE, s lu bn v, ngc li l FALSE. Gi tr mc nh ca
tham s ny l TRUE.

202
CHNGV:LPTRNHTRNAUTOCAD

FileName Tham s tu chn, xc nh tn ca bn v s c lu trong trng hp bn v


cha c lu ln no.

Trong trng hp cha c s thay i trong bn v, cc tham s trn c b qua v phng


thc Close ch n gin l ng bn v ang c tham chiu. Nu c s thay i trong bn
v, tham s SaveChanges s xc nh xem bn v c c lu hay khng:
Nu SaveChanges bng TRUE v bn v cha c lu ln no, tham s FileName s
c dng lm tn tp lu bn v. Nu khng c tham s FileName, bn v c lu
vi tn mc nh trong th mc hin hnh ca AutoCAD. Trong trng hp bn v
c lu trc , tham s FileName s b b qua.
Nu SaveChanges bng FALSE, bn v s c ng m khng c lu.
V d sau s hi ngi dng c mun ng bn v hay khng, sau kim tra xem tp c
lu ln u cha, tip mi thc s ng bn v li s dng phng thc Close c trong i
tng bn v hin hnh.
Sub CloseDrawing()
If MsgBox("Bn c mun ng bn v: " & ThisDrawing.WindowTitle, _
vbYesNo + vbQuestion) = vbYes Then
If ThisDrawing.FullName <> "" Then
ThisDrawing.Close SaveChanges:=True ng bn v hin hnh
Else
MsgBox(ThisDrawing.Name & " cha c lu nn khng th ng!")
End If
End If
End Sub

Ngoi ra, ngi lp trnh c th s dng phng thc Close c trong tp i tng Documents
ng tt c cc bn v hin ang c trong phin lm vic hin hnh ca AutoCAD. Phng
thc ny thc hin tng t nh khi s dng phng thc Close cho tng i tng bn v vi
tham s SaveChanges c gn bng TRUE. Do khng kim sot c qu trnh ng ca
tng bn v nn phng thc Close ca tp i tng Documents nn hn ch s dng.
5.1.2. Khi ng v thot khi chng trnh AutoCAD
KhingchngtrnhAutoCAD
Do c thc thi bn trong AutoCAD nn cc chng trnh vit bng VBA trong AutoCAD
khng cn phi thc hin thao tc khi ng chng trnh AutoCAD. Tuy nhin, khi ngi
dng vit m lnh t cc ng dng nn khc, chng hn nh vit chng trnh bng VBA trong
Excel, th cn thit phi vit m lnh khi ng chng trnh AutoCAD. Thc cht ca on
m lnh ny l to ra i tng Application.
Vic khi ng chng trnh AutoCAD t mt chng trnh ngoi cng cn phi thc hin cc
thao tc tng t nh khi khi ng chng trnh Excel t chng trnh ngoi (tham kho mc
Khi ng Excel t chng trnh khc trang 148). y, ngi dng s phi tham chiu n
th vin m rng ca AutoCAD vi tn l AutoCAD 2000 Object Library. Vi cc phin
bn ca chng trnh AutoCAD khc nhau th tn th vin m rng c th khc nhau.

203
GIOTRNHTNGHOTHITKCUNG

Hnh V-8: Hp thoi References trong VBAIDE ca Excel.

on m lnh sau s khi ng chng trnh AutoCAD t VBA trong Excel.


Sub ConnectToAcad()
Dim acadApp As AcadApplication
On Error Resume Next

Set acadApp = GetObject(, "AutoCAD.Application")


If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
acadApp.Visible = True
====== Ht on chng trnh khi ng AutoCAD ======

Hin th tn chng trnh v phin bn ca AutoCAD


MsgBox "Now running " + acadApp.Name + _
" version " + acadApp.Version
End Sub

ThotkhichngtrnhAutoCAD
Vic thot khi AutoCAD rt n gin, ch cn thc hin phng thc Quit c trong i tng
Applicaton. Phng thc ny s ng tt c cc bn v v d n VBA trong AutoCAD li, nu
c bn v hoc d n no cha c lu, n s nhc ngi dng lu bn v, sau mi thc s
thot khi AutoCAD.
on m lnh sau s ng chng trnh AutoCAD.
Sub Thoat_AutoCAD()
Application.Quit

204
CHNGV:LPTRNHTRNAUTOCAD

End Sub

5.1.3. S dng cc lnh sn c ca AutoCAD


Cc lnh sn c ca AutoCAD c th c s dng t chng trnh VBA thng qua phng
thc SendCommand ca i tng Document tng ng. V d sau s to ra mt hnh trn
trong bn v hin hnh ca AutoCAD vi vic s dng lnh Circle v Zoom ca AutoCAD:
Sub Tao_Hinh_Tron()
ThisDrawing.SendCommand "_Circle" & vbCr & "2,2,0" & vbCr & "4" &
vbCr
ThisDrawing.SendCommand "_zoom" & vbCr & "a" & vbCr
End Sub

Thc cht ca phng thc SendCommand l yu cu AutoCAD thc thi mt lnh t dng
lnh trong AutoCAD. K t vbCr tng ng vi vic bm phm Enter khi thao tc trc tip
trong AutoCAD.
5.1.4. Thu phng mn hnh bn v (zoom)
Thu phng mn hnh bn v trong AutoCAD c thc hin thng qua cc phng thc c
trong i tng Application. Cc phng thc ny tng ng vi lnh zoom trong AutoCAD.
Nu c nhiu bn v ang c m trong AutoCAD th cc phng thc ny ch c tc dng
i vi bn v hin hnh.
Di y l cc phng thc dng thu phng mn hnh bn v trong AutoCAD.
ZoomExtents
Phng thc ny s phng mn hnh bn v theo vng bao ca tt c cc i tng trong bn
v, ngha l gip ta c th quan st c tt c cc i tng hnh hc hin ang c vi kch
thc ln nht. on m v d sau s thc hin phng thc ZoomExtents:
Application.ZoomExtents

ZoomAll
Trong ch 2D, phng thc ny s phng mn hnh bn v theo gii hn ca bn v hoc
theo vng bao tt c cc i tng tu thuc vo vng no rng hn. Cn trong ch 3D,
phng thc ny tng ng vi phng thc ZoomExtents.
on m sau phng mn hnh bn v s dng phng thc ZoomAll:
Application.ZoomAll

ZoomPrevious
Phng thc ny s chuyn mn hnh bn v v trng thi trc . Khi ngi dng thc hin
lnh Pan hoc cc lnh lin quan n thu phng mn hnh bn v, AutoCAD s t ng lu
trng thi mn hnh bn v. Phng thc ny c th khi phc li trng thi mn hnh c
lu n 10 cp.
on m sau khi phc li trng thi mn hnh bn v s dng phng thc ZoomPrevious:
Application.ZoomPrevious

ZoomPickWindow

205
GIOTRNHTNGHOTHITKCUNG

Phng thc ny s phng mn hnh bn v theo mt hnh ch nht do ngi dng chn trn
mn hnh.
on m sau minh ho cch s dng phng thc ny:
Application.ZoomPickWindow

ZoomWindow
Phng thc ny thc hin thu phng mn hnh bn v theo mt hnh ch nht c xc nh
trc. C php ca phng thc ny nh sau:

Application.ZoomWindow Di_Tri, Trn_Phi

Tham s Gii thch


Di_Tri Mng 3 phn t kiu Double, xc nh to im gc di bn tri ca hnh ch
nht s thc hin phng i.
Trn_Phi Mng 3 phn t kiu Double, xc nh to im gc trn bn phi ca hnh ch
nht s thc hin phng i.

V d sau thc hin thu phng mn hnh bn v theo hnh ch nht c to ca cc im


gc ln lt l (1.3, 7.8, 0) v (13.7, -2.6, 0):
Sub VD_ZoomWindow()
Khai bo bin cha to cc im gc
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Gn to cho cc im gc
point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0
point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0
Thc hin phng thc ZoomWindow
ZoomWindow point1, point2
End Sub

ZoomScaled
Phng thc ny thu phng mn hnh bn v theo mt t l c xc nh trc. C php ca
phng thc ny nh sau:

Application.ZoomScaled Scale[, ScaleType]

Tham s Gii thch


Scale Tham s xc nh t l thu phng mn hnh bn v.
ScaleType Tham s tu chn, xc nh cch thc p dng h s t l. C th bng mt trong cc
hng s sau:
acZoomScaledAbsolute : tng i so vi vng v (drawing limits).
acZoomScaledRelative : tng i so vi mn hnh bn v hin hnh.
acZoomScaledRelativePSpace : tng i so vi n v ca khng gian m
hnh.

206
CHNGV:LPTRNHTRNAUTOCAD

V d sau minh ho cch thc s dng phng thc ZoomScaled bng cch phng mn hnh
bn v ln 2 ln so vi mn hnh bn v hin ti:
Sub VD_ZoomScaled()
Dim ti_le As Double
Dim kieu_phong_dai As Integer
ti_le = 2
kieu_phong_dai = acZoomScaledRelative
Thc hin phng thc ZoomScaled
ZoomScaled ti_le, kieu_phong_dai
End Sub

5.1.5. Nhp d liu ngi dng t dng lnh ca AutoCAD


Trong mt chng trnh, giao din ngi s dng thao tc vi chng trnh l mt b phn
rt quan trng v khng th thiu. Thng qua giao din, ngi s dng c th nhp d liu v
iu khin chng trnh hot ng, cn chng trnh, cng thng qua giao din, s hng dn
cho ngi dng cch thao tc v trnh by kt qu thc hin ca n cho ngi dng.
C nhiu cch thit k giao din nhp d liu cho chng trnh, nh s dng cc hp thoi
chun (nh InputBox hoc MsgBox) hay thng qua h thng cc hp thoi ngi dng
(UserForm). Khi lp trnh VBA trong AutoCAD, bi chng trnh s hot ng da trn nn l
AutoCAD cho nn vic thit k mt giao din cho php ngi dng tng tc vi chng trnh
ngay trong giao din ca AutoCAD l mt nhu cu cn thit. Hn na iu ny c AutoCAD
v VBA h tr thng qua i tng Utility (l mt thuc tnh ca i tng Document). Vi
nhng phng thc ca i tng Utility ngi lp trnh c cho php ngi s dng thao tc
vi chng trnh VBA thng qua dng lnh ca AutoCAD cng nh mn hnh ha ca
AutoCAD. Cc phng thc ny s hin th mt dng nhc trn dng lnh ca AutoCAD v
yu cu ngi s dng nhp vo nhiu kiu d liu khc nhau (tu thuc vo tng loi phng
thc) t bn phm hoc chn trn mn hnh ha ca AutoCAD.
Cc phng thc ngi dng nhp d liu vo t bn phm hay bng chut thng c dng
GetXXX, tu thuc vo loi d liu m ngi lp trnh cn ly. Di y l mt s phng
thc thng c s dng:
Prompt
Phng thc ny ch n gin l gi mt on vn bn n dng lnh ca AutoCAD v thng
c s dng thng bo cho ngi dng bit mt ni dung no trc hoc sau mt thao
tc vi chng trnh. C php nh sau:

Utility.Prompt Message

Trong Message l on vn bn s c hin th trn dng lnh ca AutoCAD.


Khi gi mt on vn bn n dng lnh ca AutoCAD, cn thm vo k t xung dng, trnh
dng vn bn cn hin th ni vo dng vn bn ang c trong dng lnh. V d sau s minh
ho r hn iu ny.
1. Trong VBAIDE, to Macro sau:
Sub VDPrompt()
Utility.Prompt ("Vi du phuong thuc Prompt")
End Sub

207
GIOTRNHTNGHOTHITKCUNG

2. Tr v AutoCAD thc thi Macro bng cch gi lnh vbarun. Lu l s dng phm
SPACE kt thc dng lnh, thay v s dng phm ENTER nh thng thng. Kt qu
hin th trn dng lnh nh sau:

3. on vn bn c in ra trn mt dng ring bit, thm vo trc on vn bn hng s


vbCrLf, v on m lnh trn c chuyn thnh:
Sub VDPrompt()
Utility.Prompt (vbCrLf & "Vi du phuong thuc Prompt")
End Sub

4. Thc thi li Macro trn, on vn bn c hin th trn mt dng ring bit

GetString
Phng thc ny c s dng ngi dng nhp vo mt chui k t. AutoCAD s dng li
cho n khi ngi dng nhp vo mt gi tr no . C php ca phng thc GetString nh
sau:

RetVal = Utility.GetString(HasSpaces[, Prompt])

Tham s Gii thch


HasSpaces Tham s cho php ngi dng nhp vo du cch. Nu bng TRUE, ngi dng c
th nhp du cch trong dng lnh, kt thc nhp phi nhn phm ENTER. Nu
bng FALSE, ngi dng khng th nhp du cch cho chui k t, khi ngi dng
nhn phm SPACE hoc ENTER th s kt thc qu trnh nhp.
Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal L bin kiu String, cha gi tr l chui k t c ngi dng nhp vo. Mt im
cn lu l phng thc ny ch tr v ti a 132 k t. Nu ngi dng nhp
nhiu hn 132 k t, kt qu tr v cho bin RetVal ch l 132 k t u tin.

V d sau s minh ho cch s dng phng thc GetString:


Sub VD_GetString()
' V d minh ho cc cch s dng phng thc GetString

Dim returnString As String

' Nhc ngi dng nhp

208
CHNGV:LPTRNHTRNAUTOCAD

' Gi tr nhp vo khng th cha du cch


returnString = ThisDrawing.Utility.GetString _
(False, "Nhp chui (nhn SPACE hoc ENTER kt thc): ")
MsgBox "Chui va nhp l: '" & returnString & "'"

' Nhc ngi dng nhp


' Gi tr nhp vo c th cha du cch
returnString = ThisDrawing.Utility.GetString _
(True, " Nhp chui (nhn ENTER kt thc): ")
MsgBox "Chui va nhp l: '" & returnString & "'"
End Sub

GetInteger,GetReal
Phng thc ny c s dng khi mun ngi dng nhp mt s nguyn (phng thc
GetInteger) hoc mt s thc (phng thc GetReal). C php ca cc phng thc ny nh
sau:

RetVal = Utility.GetInteger([Prompt])
RetVal = Utility.GetReal([Prompt])

Tham s Gii thch


Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal L bin kiu Double hoc Interger (tu thuc vo phng thc c s dng), cha
gi tr l s ngi dng va nhp vo.

Nu ngi dng nhp vo mt t kho hoc khng nhp s m nhn ngay phm ENTER kt
thc nhp liu, AutoCAD s pht sinh li User input keyword..
V d sau minh ho cch s dng cc phng thc ny:
Sub Example_GetReal()
' V d sau s dng phng thc GetReal v phng thc GetInteger
' ngi dng nhp vo s thc v s nguyn.

Dim returnReal As Double


Dim returnInteger As Integer

' Nhc ngi dng nhp vo s thc,


' sau hin th kt qu c nhp vo.
returnReal = ThisDrawing.Utility.GetReal("Enter an Real: ")
MsgBox "S thc va c nhp: " & returnReal & vbCrLf & _
"(Tip tc nhp gi tr.)"

' Nhc ngi dng nhp vo s nguyn,


' sau hin th kt qu c nhp vo.
returnInteger = ThisDrawing.Utility.GetInteger("Nhp s nguyn: ")
MsgBox "S nguyn va c nhp: " & returnInteger
End Sub

GetAngle

209
GIOTRNHTNGHOTHITKCUNG

Phng thc ny c s dng khi mun ngi lp trnh nhp vo mt gi tr gc bng cch
nhp gi tr ngay trn dng lnh hoc chn mt gc trn mn hnh. C php ca phng thc
ny nh sau:

RetVal = Utility.GetAngle([Point][, Prompt])

Tham s Gii thch


Point Tham s tu chn, l mng s thc c 3 phn t th hin to u tin ca tia to
nn gc m ngi dng s chn trn mn hnh.
Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal L bin kiu Double cha gi tr tr v ca phng thc GetAngle, l gc m ngi
dng nhp vo (tnh theo Radian).

Khi s dng phng thc ny, ngi dng c th nhp vo gc (tnh bng ) ti dng lnh.
Ngoi ra, ngi s dng c th s dng chut v hai im xc nh tia to nn gc cn nhp.
Gi tr tr v l gc hp gia tia v gc c s (c xc nh bi bin h thng ANGBASE,
gi tr mc nh l 0).

Trong trng hp khng nhp gi tr cho tham s Point, ngi dng s phi chn hai im
trn mn hnh xc nh tia mong mun. Nu nhp gi tr cho tham s Point, th to c
trong tham s Point s c gn cho im th 1, ngi dng ch cn xc nh im th 2 trn
mn hnh m thi.
Bng di y th hin gi tr tr v ca phng thc GetAngle vi cc gc nhp vo khc
nhau:
Gc ngi dng Gi tr tr v ca
nhp () phng thc GetAngle
0 0.0
-90 1.5708
180 3.14159
90 4.71239

210
CHNGV:LPTRNHTRNAUTOCAD

Nu ngi dng khng nhp gi tr no c m nhn ENTER, AutoCAD s pht sinh li User
input keyword.
V d sau minh ho cch s dng phng thc GetAngle:
Sub Example_GetAngle()

Dim retAngle As Double

' Ly v gc tnh bng radian


retAngle = ThisDrawing.Utility.GetAngle(, "Nhp vo gc: ")
MsgBox "Gc va c nhp l: " & retAngle

' Ly v gc tnh bng radian vi to im u cho trc


Dim basePnt(0 To 2) As Double
basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
retAngle = ThisDrawing.Utility.GetAngle(basePnt, "Nhp vo gc: ")
MsgBox "Gc va c nhp l: " & retAngle

End Sub

GetPoint
Phng thc GetPoint c s dng ly mt im do ngi dng nhp vo bng cch nhp
ta trc tip t dng lnh hoc chn im trn mn hnh. Gi tr tr v ca phng thc c
kiu Variant, l mt mng gm 3 phn t s thc cha ta ca im c chn trong h
ta WCS. C php ca phng thc nh sau:

RetVal = Utility.GetPoint([Point][, Prompt])

Tham s Gii thch


Point Tham s tu chn, kiu Variant, l mng s thc c 3 phn t th hin to
ca im tham chiu ca im s nhp vo.
Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc
ngi dng nhp d liu.

Nu tham s ty chn Point c gn gi tr, AutoCAD s to mt ng thng tham chiu ni


t im Point n v tr hin ti ca con tr trn mn hnh ha. ng thng ny lun thay
i theo s di chuyn ca con tr, h tr vic quan st ca ngi dng trong qu trnh nhp
im. Sau khi ngi dng nhp im bng cch bm chut trn mn hnh ha ti v tr mong
mun th ng thng tham chiu cng s mt i.
Nu ngi dng khng nhp vo im no m nhn ENTER, AutoCAD s pht sinh li User
input keyword.
V d sau minh ha cch s dng phng thc GetPoint v cc tham s:
Sub Example_GetPoint()
' V d minh ha cch s dng phng thc GetPoint.

Dim returnPnt As Variant

' Nhp im v tr v ta ca im khi khng c im tham chiu


returnPnt = ThisDrawing.Utility.GetPoint(, "Nhap mot diem: ")
MsgBox "Toa do WCS cua diem: " & returnPnt(0) & ", " & _
returnPnt(1) & ", " & returnPnt(2)
211
GIOTRNHTNGHOTHITKCUNG

' Nhp im s dng im tham chiu


Dim basePnt(0 To 2) As Double
basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
returnPnt = ThisDrawing.Utility.GetPoint(basePnt, "Nhap mot diem: ")
MsgBox "Toa do WCS cua diem: " & returnPnt(0) & ", " & _
returnPnt(1) & ", " & returnPnt(2)

' V ng thng ni t im tham chiu n im


' cui cng nhp vo
Dim lineObj As AcadLine
Set lineObj = ThisDrawing.ModelSpace.AddLine(basePnt,returnPnt)
ZoomAll

End Sub

GetDistance
Phng thc GetDistance c s dng ngi dng nhp vo gi tr khong cch. Ngi
dng c th nhp mt s thc trc tip t dng lnh hoc c th chn hai im trn mn hnh
bn v, AutoCAD s t ng tr v gi tr s thc l khong cch gia hai im. C php ca
phng thc GetDistance nh sau:

RetVal = Utility.GetDistance([Point][, Prompt])

Tham s Gii thch


Point Tham s tu chn, kiu Variant, l mng s thc c 3 phn t th hin to ca
im c s tnh khong cch. Nu tham s ny khng c th ngi dng phi
chn hai im xc nh khong cch.
Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal L bin kiu s thc cha gi tr tr v ca phng thc GetDistance.

Phng thc GetDistance cho php ngi dng nhp mt s m ti dng nhc v s tr v mt
s m tng ng. Nhng khi ngi dng chn im trn mn hnh bn v, phng thc lun
tr v gi tr tuyt i ca khong cch gia hai im.
Nu khong cch c nhp vo bng cch chn im trn mn hnh, AutoCAD s to ra mt
ng thng gip ngi dng quan st v ng thng ny s mt i sau khi ngi dng
nhp xong khong cch. Nu khng nhp gi tr cho tham s Point, ngi dng s phi xc
nh hai im trn mn hnh xc nh khong cch. Nu gn gi tr cho tham s Point, ngi
dng ch cn chn thm mt im trn mn hnh, gi tr khong cch s c tnh t im
truyn cho tham s Point v im cho ngi dng chn.
Theo mc nh ca AutoCAD, cc im nhp vo c ta khng gian gm y 3 thnh
phn (x, y, z) nn khong cch gia hai im l khong cch trong khng gian. Ngi dng c
th yu cu AutoCAD ch tnh khong cch phng bng cch thc hin phng thc
InitializeUserInput trc khi thc hin phng thc GetDistance vi tham s OptionBits tng
ng AutoCAD b qua thnh phn ta z.
Nu ngi dng khng nhp gi tr hoc im no c m nhn ENTER th AutoCAD s pht
sinh li User input keyword.
V d di y minh ha cch s dng phng thc GetDistance:

212
CHNGV:LPTRNHTRNAUTOCAD

Sub Example_GetDistance()
' V d minh ha cch s dng phng thc GetDistance.

Dim returnDist As Double

' Nhp v tr v gi tr khong cch, c s dng dng nhc


returnDist = ThisDrawing.Utility.GetDistance(, "Nhap khoang cach: ")
MsgBox "Khoang cach vua nhap la: " & returnDist & vbCrLf & _
"(Nhap gia tri tiep theo co su dung diem co so.)"

' Nhp v tr v gi tr khong cch


' C s dng dng nhc v im c s
Dim basePnt(0 To 2) As Double
basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
returnDist = ThisDrawing.Utility.GetDistance(basePnt, _
"Nhap khoang cach: ")
MsgBox "Khoang cach vua nhap la: " & returnDist

End Sub

GetEntity
Phng thc GetEntity c s dng ly mt i tng ca AutoCAD bng cch cho php
ngi dng chn trc tip bng chut trn mn hnh ha. C php ca phng thc nh sau:

Utility.GetEntity Object, PickedPoint[, Prompt]

Tham s Gii thch


Object Tham s tr v i tng c ngi dng chn
Pickedpoint Tham s kiu Variant, tr v mng s thc c 3 phn t th hin to ca im
m ngi dng kch chut chn i tng.
Prompt Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.

Phng thc GetEntity yu cu ngi dng chn i tng bng cch kch chut trn mn hnh
bn v. Nu ngi dng chn mt i tng, i tng s c tr v thng qua tham s
Object v to ca im m ngi dng chn s c tr v trong tham s PickedPoint. Nu
im m ngi dng kch chut khng phi i tng th phng thc ny s lm pht sinh li.
Vi phng thc ny, ngi dng cn c th chn nhanh i tng c v sau cng nht
bng cch nhp k t L hoc l ti dng lnh AutoCAD. Khi dng lnh L ny, nu i
tng c v cui cng khng nhn thy trn mn hnh bn v (i tng c thuc tnh
Visible=FALSE) hoc i tng ang nm trong mt lp b ng bng (FrozenLayer) th
i tng cui cng nht c v nm trn mt lp bnh thng s c chn. Tuy nhin, cch
ng x ny c th khc nhau trong tng phin bn ca AutoCAD, chng hn nh i vi
AutoCAD 2007, vi lnh L, phng thc GetEntity c th tr v mt i tng khng c
nhn thy trn mn hnh bn v.
CH Vi phng thc GetEntity, ti mt thi im, ngi dng ch c th chn c
mt i tng.

213
GIOTRNHTNGHOTHITKCUNG

V d di y minh ha cch s dng phng thc GetEntity. i tng c la chn s


c tm thi chuyn sang mu ngi dng d nhn thy trc khi chuyn sang la chn
i tng khc (trc khi thc hin v d cn to sn mt s i tng hnh hc trong bn v
hin hnh ca AutoCAD). V d ny cn thc hin by li pht sinh khi la chn i tng.
Sub VD_GetEntity()

Dim returnObj As AcadObject


Dim basePnt As Variant

On Error Resume Next

' Trong v d ny, AutoCAD ch ngi dng la chn i tng


ThisDrawing.Utility.GetEntity returnObj, basePnt, "Chn i tng:"

If Err <> 0 Then


Err.Clear
MsgBox "Bn khng chn i tng. Tm bit."
Exit Sub
Else
returnObj.Color = acRed
returnObj.Update
MsgBox "Kiu i tng l: " & returnObj.EntityName
MsgBox "ti v tr " & basePnt(0) & "," & basePnt(1)
returnObj.Color = acByLayer
returnObj.Update
End If
End Sub

5.1.6. Thit lp bin h thng


AutoCAD s dng cc bin h thng dng iu khin cc hot ng ca chnh n, chng
hn nh ch bt im, ch li, iu kin cch thc hin ca cc lnh, Phn ny s
gii thiu cch thc c v thit lp cc bin h thng cho AutoCAD thng qua cc phng
thc GetVariable v SetVariable cng nh mt s bin h thng thng dng trong AutoCAD.
i vi mi phin bn ca AutoCAD, cc bin h thng c th khc nhau, v vy cn phi
nghin cu trong ti liu i km vi phin bn AutoCAD ang s dng c c cc thng
tin c th v cc bin h thng.
Mt im cn lu khi thao tc vi cc bin h thng ca AutoCAD l phm vi tc dng ca
bin h thng. C th chia thnh hai loi sau:
Loi bin c tc dng vi ton b ng dng AutoCAD: vi loi bin ny, khi ngi thay
i gi tr ca bin, tt c cc bn v ang c m s chu tc ng do s thay i ca
bin ny. Cc bin kiu ny c lu trong bn thn chng trnh AutoCAD.
Loi bin c tc dng vi mt bn v AutoCAD: vi loi bin ny, khi ngi dng thay
i gi tr ca bin, ch c bn v hin hnh (bn v ni thc hin thao tc thay i gi tr
ca bin) l chu tc ng do s thay i ca bin. Cc bin h thng kiu ny c lu
ngay bn trong tp bn v.
PhngthcGetVariable
Phng thc ny dng ly v gi tr hin hnh ca mt bin h thng trong AutoCAD. C
php ca phng thc ny nh sau:

RetVal = object.GetVariable(Name)

214
CHNGV:LPTRNHTRNAUTOCAD

Tham s Gii thch


Name Tham s kiu String xc nh tn bin h thng cn ly gi tr (khng phn bit ch
hoa/ch thng). Nu tn bin h thng nhp vo khng ng s pht sinh li khi
thc thi chng trnh.
object i tng kiu Document, ni thc hin phng thc GetVariable.
RetVal L bin kiu Variant cha gi tr tr v ca bin h thng.

V d sau minh ho cc s dng phng thc ny bng cch thc hin ly gi tr ca bin h
thng MIRRTEXT:
Sub VD_GetVariable()
' V d sau hin th gi tr hin ti ca
' bin h thng MIRRTEXT.

Dim strTenBien As String


Dim KetQua As Variant

strTenBien = "MIRRTEXT"
KetQua = ThisDrawing.GetVariable(strTenBien)
MsgBox (strTenBien & " = " & KetQua)
End Sub

PhngthcSetVariable
Phng thc ny dng thit lp gi tr cho bin h thng trong AutoCAD. C php ca
phng thc ny nh sau:

object.SetVariable Name, Value

Tham s Gii thch


Name Tham s kiu String xc nh tn bin h thng cn ly gi tr (khng phn bit ch
hoa/ch thng). Nu tn bin h thng nhp vo khng ng s pht sinh li khi
thc thi chng trnh.
Value Tham s kiu Variant, xc nh gi tr cn gn cho bin h thng c tn trong tham
s Name trn.
object i tng kiu Document, ni thc hin phng thc SetVariable.

Bin h thng trong AutoCAD rt a dng vi nhiu kiu d liu khc nhau: s thc, s
nguyn, chui, Chnh v vy, khi gn gi tr cho bin h thng, cn phi ch sao cho kiu
d liu ca bin h thng cn gn v kiu gi tr ca tham s Value phi tng thch nhau, nu
khng s lm pht sinh li khi thc thi chng trnh.
V d sau minh ho cch thc gn gi tr cho bin h thng s dng phng thc SetVariable:
Sub Example_SetVariable()
' V d sau gn gi tr cho nhiu bin h thng khc nhau,
' mi bin c mt kiu d liu khc nhau.
Dim TenBien As String
Dim GiaTri As Variant

' Gn gi tr bin MIRRTEXT (kiu s nguyn) bng 1.


' Ch rng cn phi gn gi tr thch hp vi
' kiu d liu ca bin h thng.
Dim intData As Integer
215
GIOTRNHTNGHOTHITKCUNG

TenBien = "MIRRTEXT"
intData = 0
GiaTri = intData ' Kiu Integer
ThisDrawing.SetVariable TenBien, GiaTri

' Kim tra gi tr gn s dng phng thc GetVariable


GiaTri = ThisDrawing.GetVariable(TenBien)
MsgBox (TenBien & " = " & GiaTri)

' Gn gi tr bin LTSCALE (kiu s thc) bng 1.5


Dim dataDouble As Double
TenBien = "LTSCALE"
dataDouble = 1.5
GiaTri = dataDouble ' Kiu Double
ThisDrawing.SetVariable TenBien, GiaTri
' Kim tra gi tr gn s dng phng thc GetVariable
GiaTri = ThisDrawing.GetVariable(TenBien)
MsgBox (TenBien & " = " & GiaTri)

' Gn gi tr bin INSBASE (kiu mng cha to ) bng (1.0,1.0,0)


Dim arrayData3D(0 To 2) As Double
TenBien = "INSBASE"
arrayData3D(0) = 1#: arrayData3D(1) = 1#: arrayData3D(2) = 0
GiaTri = arrayData3D ' Kiu mng cha to
im
ThisDrawing.SetVariable TenBien, GiaTri
' Kim tra gi tr gn s dng phng thc GetVariable
GiaTri = ThisDrawing.GetVariable(TenBien)
MsgBox (TenBien & " = " _
& GiaTri(0) & ", " & GiaTri(1) & ", " & GiaTri(2))
End Sub

Ccbinhthngthngdng
hin th c y tt c cc bin h thng cng nh gi tr hin thi ca chng, c th
thc hin theo cc bc sau:
1. Ti dng lnh ca AutoCAD, nhp lnh setvar.
2. Ti dng nhc Enter Variable Name, nhp du ?
3. Ti dng nhc Enter Variable(s) to List, nhn ENTER
Bng di y gii thiu cc bin h thng thng dng trong AutoCAD:
Bin h thng Gii thch
ANGBASE Thit lp gc c s, l gc hp vi phng X. Mc nh gi tr ny bng 0.
AUPREC Thit lp s ch s sau du phy ca n v o gc.
DIMTIH Xc nh v tr ch ghi kch thc. Nu bng 0: song song vi ng ghi kch
thc; bng 1: nm ngang. Mc nh gi tr ny bng 1.
FILLETRAD Xc nh bn knh vut cong mc nh khi dng vi lnh Fillet
INSBASE To im chn mc nh.
CELTSCALE Thit lp t l kiu ng cho cc i tng mi to
LTSCALE Thit lp t l kiu ng cho tt c cc i tng

216
CHNGV:LPTRNHTRNAUTOCAD

MIRRTEXT Xc nh cch thc khi ly i xng i vi vn bn. Bng 0: gi nguyn


chiu vn bn; bng 1: i chiu vn bn.
TILEMODE Xc nh khng gian hin hnh l khng gian m hnh hay khng gian in.
Bng 0: khng gian in; bng 1: khng gian m hnh.
ZOOMFACTOR Xc nh t l phn trm thu/phng bn v khi ln phm chut gia.
TEXTFILL iu khin cch hin th vn bn TrueType. Bng 0: ch v ng bin vn
bn; bng 1: v c ng bin v t y vn bn.

5.2. To mi i tng hnh hc


M hnh i tng trong AutoCAD thc cht l s m t li hu nh tt cc cc i tng m
ngi dng c th to ra trong AutoCAD theo cch v thng thng, cho nn lp trnh to ra
cc i tng hnh hc bng VBA th ngi dng cn phi thng thuc cch to ra i tng
bng lnh thng thng trc tip trong AutoCAD.
Trong AutoCAD, h tr ngi dng thao tc nhanh, mt i tng hnh hc c th c to
ra theo nhiu phng thc khc nhau, chng hn nh khi to ng trn trong AutoCAD,
ngi dng c th to theo 4 cch khc nhau:
Xc nh tm v bn knh,
Xc nh 2 im to nn ng knh ng trn,
Xc nh ba im ngoi tip ng trn,
Xc nh hai ng tang v bn knh.
Hoc to mt cung trn, trong AutoCAD, ngi dng c ti 11 phng thc la chn
nh hnh bn.
Tuy nhin, vi VBA trong AutoCAD, mi i tng ch c th c to
bng mt phng thc vi mt loi thng s nht nh, v d nh i
vi ng trn, ngi lp trnh ch c th to ra vi cc thng s l v tr
tm v bn knh ca ng trn.
Hu ht cc i tng hnh hc trong AutoCAD, tuy khc nhau v hh
dng, nhng cch to ra chng bng VBA li tng t nhau, cho nn
trong phn ny ch gii thiu cch thc to ra mt s i tng hnh hc
chnh trong AutoCAD, bao gm:
i tng Point;
i tng dng ng cong: Arc, Circle;
i tng vn bn: Text;
Cc i tng dng ng c chiu di hu hn nh Line, Polyline...
5.2.1. Xc nh ni cha i tng
AutoCAD nhm cc i tng hnh hc trong tp i tng ModelSpace, PaperSpace v trong
i tng Block. Tuy nhin, thng c s dng nht l hai tp i tng ModelSpace v
PaperSpace:
ModelSpace (khng gian m hnh) l mt phn ca bn v, l ni ngi dng to cc
i tng hnh hc to nn m hnh hoc bn v m ngi dng d nh thit k. Hu
ht tt c cc thao tc xy dng bn v u c thc hin trn khng gian m hnh.
Trong AutoCAD, ch c mt khng gian m hnh, tng ng vi khng gian m hnh ny
chnh l th Model nm gc di mn hnh bn v trong AutoCAD.

217
GIOTRNHTNGHOTHITKCUNG

PaperSpace (khng gian in) cng cho php cha cc i tng hnh hc nh trong khng
gian m hnh, tuy nhin mc ch chnh ca khng gian in l phc v cho qu trnh
sp xp bn v v in n. Khng gian in thng cha cc khung nhn theo mt t l nh
trc th mt phn ca bn v trong khng gian m hnh, hoc cc bng biu, ghi ch,
Trong AutoCAD, ngi dng c th to nhiu khng gian in khc nhau, mi khng gian
in tng ng vi mt th Layout nm gc di mn hnh bn v trong AutoCAD.
truy cp n cc khng gian in c trong bn v, c th s dng tp i tng Layouts c
trong i tng kiu Document.
Ti mt thi im, trong AutoCAD ch c mt khng gian l hin hnh, c th l khng gian
m hnh hoc khng gian in. xc nh xem khng gian no l khng gian hin hnh, ngi
lp trnh c th s dng thuc tnh ActiveSpace c trong i tng kiu Document. Thuc tnh
ny ch nhn gi tr l 2 hng s sau:
Hng s Gi tr tng ng
acModelSpace 1
acPaperSpace 0

V d sau s hin th thng bo tng ng vi khng gian hin hnh ca AutoCAD:


Sub VD_ActiveSpace()
If ThisDrawing.ActiveSpace = acModelSpace Then
MsgBox "Khng gian hin hnh l khng gian m hnh."
Else
MsgBox "Khng gian hin hnh l khng gian in."
End If
End Sub

Ngoi ra ngi dng cn c th chuyn i gia khng gian in v khng gian m hnh bng
cch gn gi tr cho thuc tnh ActiveSpace. on m sau s thc hin thao tc ny:
Sub VD_ChuyenKhongGian()
With ThisDrawing
If .ActiveSpace = acModelSpace Then
.ActiveSpace = acPaperSpace
Else
.ActiveSpace = acModelSpace
End If
End With
End Sub

Hoc n gin hn, ch cn s dng mt dng lnh sau:


Sub VD_ChuyenKhongGian()
ThisDrawing.ActiveSpace = (ThisDrawing.ActiveSpace + 1) Mod 2
End Sub

GI C th chuyn i gia cc khng gian bng cch gn gi tr cho bin h thng


TILEMODE. Nu TILEMODE=1, khng gian m hnh s l khng gian hin hnh. Nu bng
0, khng gian in s l khng gian hin hnh.

5.2.2. Khai bo v to i tng hnh hc


Tt cc cc i tng trong AutoCAD (k c i tng hnh hc v phi hnh hc) u c th
c khai bo trong VBA theo dng thc Acad<TniTng>. Chng hn nh i tng

218
CHNGV:LPTRNHTRNAUTOCAD

ng thng Line th i tng tng ng trong VBA s c kiu l AcadLine. V d sau


minh ho cch khai bo mt i tng ng trn trong VBA:

Dim CircleObj as AcadCircle

Ngi dng c th to mi i tng hnh hc trong khng gian m hnh hoc trong khng
gian in. to i tng mi, s dng phng thc AddXXX c trong tp i tng
ModelSpace v PaperSpace, trong XXX l tn ca loi i tng hnh hc cn to. C php
nh sau:

Set Bin_i_tng = Object.AddXXX(Danh_sch_tham_s)

Trong , Object l tp i tng ModelSpace hoc PaperSpace.


Mi phng thc AddXXX s tr v mt i tng tham chiu n i tng va mi c to,
v vy bt buc phi s dng cu lnh Set trong khi to i tng v bin_i_tng phi
c kiu ph hp vi i tng tr v ca phng thc AddXXX.
Ly v d khi mun to mi mt ng trn trong khng gian m hnh, c th s dng mu
sau:
Dim CircleObj as AcadCircle
Set Circle = ThisDrawing.ModelSpace.AddCircle(CenterPoint, Radius)

Sau khi to mi (hoc hiu chnh) i tng, th kt qu hin th trn bn v s khng c cp


nht ngay cho n khi gi phng thc Update ca bn thn i tng , hoc phng thc
Update ca i tng Application hoc phng thc Regen ca i tng Document.
Trong mt s trng hp, AutoCAD cng c t ng cp nht ngay khi kt thc Macro. Tuy
nhin, chc chn, sau khi to mi (hoc hiu chnh) i tng, nn ch ng cp nht li
nhng thay i ny.
5.2.3. To i tng Point
i tng Point i khi cng rt hu dng, chng hn nh to mt nt hoc l mt im
tham chiu t ta tin hnh bt im hoc thc hin lnh Offset. Ngoi ra, khi thit lp
kiu v kch thc cho i tng Point, ngi dng c th s dng n trnh by bn v mt
cch hiu qu.

219
GIOTRNHTNGHOTHITKCUNG

ToitngPoint
S dng phng thc AddPoint thm mt im ti v tr mong mun. C php nh sau:

Set RetVal = object.AddPoint(Point)

Tham s Gii thch


Point L tham s u vo kiu Variant hoc mng 3 phn t kiu Double, cha to
ca v tr to i tng Point.
RetVal i tng kiu Point, cha tham chiu n i tng va mi c to.

ThayikiuhinthcaitngPoint
Sau khi to i tng Point, ngi lp trnh c th thay i kiu hin th ca im bng cch
thit lp gi tr cho cc bin h thng PDMODE v PDSIZE.
on m sau s to mt i tng Point trong khng gian m hnh ta (5,5,0) v sau
thay i kiu hin th ca i tng Point bng cch cp nht li gi tr bin h thng PDMODE
v PDSIZE.
Sub VD_TaoDTPoint()
Dim pointObj As AcadPoint
Dim ToaDo(0 To 2) As Double

Xc nh v tr v im
ToaDo (0) = 5#: ToaDo (1) = 5#: ToaDo (2) = 0#

To im mi
Set pointObj = ThisDrawing.ModelSpace.AddPoint(ToaDo)
ThisDrawing.SetVariable "PDMODE", 34
ThisDrawing.SetVariable "PDSIZE", 1
ZoomAll
End Sub

5.2.4. To i tng dng ng thng

220
CHNGV:LPTRNHTRNAUTOCAD

ng thng l i tng hnh hc c bn hay c dng nht trong AutoCAD. Nhn chung, ta
c th v cc ng thng bng cch nhp vo tham s l ta ca cc im ca ng thng.
to mt ng thng, c th s dng mt trong nhng phng thc sau:
Phng thc Gii thch
AddLine To ng thng i qua hai im.
AddLightweightPolyline To ng a tuyn 2D.
AddMLine To ng a tuyn nt i.
Add3DPoly To ng a tuyn 3D.

ToitngLine
Phng thc thc AddLine s to i tng Line, l mt on thng i qua hai im:

Set RetVal = object.AddLine(StartPoint, EndPoint)

Tham s Gii thch


StartPoint, EndPoint L tham s u vo kiu variant hoc mng 3 phn t kiu Double, cha
to im u v im kt thc ca on thng.
RetVal i tng kiu Line, tham chiu n on thng va mi c to.

V d sau to mt on thng trong khng gian m hnh vi to im u v im cui l


(1,1,0) v (5,5,0):
Sub Example_AddLine()
Dim lineObj As AcadLine
Dim diemDau(0 To 2) As Double
Dim diemCuoi(0 To 2) As Double

' nh im u v im cui ca on thng


diemDau(0) = 1#: diemDau(1) = 1#: diemDau(2) = 0#
diemCuoi(0) = 5#: diemCuoi(1) = 5#: diemCuoi(2) = 0#

' To on thng trong khng gian m hnh


Set lineObj = ThisDrawing.ModelSpace.AddLine(diemDau, diemCuoi)
ZoomAll
End Sub

Cn trong v d sau, on thng s c to ra t hai im bt k do ngi dng chn trn mn


hnh. on thng ny s c to ra trn khng gian m hnh hoc khng gian in, tu thuc vo
khng gian no l hin hnh.
Public Sub TestAddLine()
Dim diemDau As Variant
Dim diemCuoi As Variant
Dim objEnt As AcadLine
On Error Resume Next
' Ly to im u v im cui do ngi dng nhp
diemDau = ThisDrawing.Utility.GetPoint _
(, vbCr & "Chon diem dau: ")
diemCuoi = ThisDrawing.Utility.GetPoint _
(diemDau, vbCr & "Chon diem cuoi: ")
' V i tng
If ThisDrawing.ActiveSpace = acModelSpace Then
221
GIOTRNHTNGHOTHITKCUNG

Set objEnt = ThisDrawing.ModelSpace.AddLine(diemDau, diemCuoi)


Else
Set objEnt = ThisDrawing.PaperSpace.AddLine(diemDau, diemCuoi)
End If
' Cp nht i tng hin th trn mn hnh bn v
objEnt.Update
End Sub

ToitngLWPolyline,Polyline
LWPolyline l i tng dng biu din ng a tuyn phng v do ch dng th
hin cc i tng trong khng gian 2D. iu ny gip cho d liu ca i tng LWPolyline
gn nh hn v cc thao tc ho s thc hin nhanh hn. cng chnh l l do ti sao i
tng ny l c tn l LightWeight - Nh.
to i tng LWPolyline, s dng phng thc AddLightweightPolyline. C php
phng thc ny nh sau:

Set RetVal = object.AddLightweightPolyline(VerticesList)

Tham s Gii thch


VerticesList Tham s u vo kiu Variant hoc mng kiu Double, cha to cc nh ca
a tuyn.
RetVal i tng kiu LWPolyline, tham chiu n a tuyn 2D va mi c to.

Khi s dng phng thc AddLightweightPolyline, tham s VerticesList s cha to


cc nh ca a tuyn 2D. To ca mi nh c biu din bng hai thnh phn x v y, nn
cc thnh phn ca mng c b tr theo dng (p1x,p1y,p2x,p2y,). V vy s phn t ca
tham s VerticesList lun l bi s ca 2 v ng nhin, ti thiu cn phi c 4 phn t
(hai im) c th to c i tng LWPolyline.
CH Mi nh ca LWPolyline ch c hai to x v y, khng c thng s v cao .
Thay vo , ngi lp trnh c th gn cao chung cho ton b ng a tuyn phng
ny bng cch thay gi tr cao thch hp cho thuc tnh Elevation.

on m sau s to mt ng a tuyn phng gm c 5 nh trong khng gian m hnh:


Sub Example_AddLightWeightPolyline()
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double

' Xc nh cc nh ca a tuyn phng


points(0) = 1: points(1) = 1 ' To nh 1
points(2) = 1: points(3) = 2 ' To nh 2
points(4) = 2: points(5) = 3 ' To nh 3
points(6) = 3: points(7) = 2 ' To nh 4
points(8) = 4: points(9) = 4 ' To nh 5

' To i tng LWPolyline trong khng gian m hnh


Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
ZoomAll
End Sub

222
CHNGV:LPTRNHTRNAUTOCAD

Ngoi ra, vi VBA trong AutoCAD, ngi dng cng c th to ng a tuyn phng vi
phng thc AddPolyline. C php ca phng thc ny tng t nh ca phng thc
AddLightweightPolyline:

Set RetVal = object.AddPolyline(VerticesList)

Tuy nhin, i tng tr v RetVal l i tng kiu Polyline. Tham s VerticesList


cng cha to cc nh ca a tuyn, nhng mi nh s c 3 thnh phn, hai thnh phn
u l to (x,y) thnh phn th 3 s khng c s dng.
Khi mun to ng a tuyn phng, nn s dng phng thc AddLightweightPolyline,
v i tng LWPolyline ti u ho cho qu trnh hin th v lu tr trong bn v.
Toitng3DPolyline
Phng thc Add3DPoly s to mt ng a tuyn 3D da trn to cc nh c truyn
vo. C php ca phng thc ny nh sau:

Set RetVal = object.Add3DPoly(VerticesList)

Tham s Gii thch


VerticesList Tham s u vo kiu Variant hoc mng kiu Double, cha to cc nh ca
a tuyn.
RetVal i tng kiu 3DPolyline, tham chiu n a tuyn 3D va mi c to.

Khi s dng phng thc Add3DPoly, tham s VerticesList s cha to cc nh ca a


tuyn. To ca mi nh c biu din bng ba thnh phn x, y v z nn cc thnh phn
ca mng c b tr theo dng (p1x,p1y,p1z,p2x,p2y,p2z). V vy s phn t ca tham
s VerticesList lun l bi s ca 3 v ng nhin, ti thiu cn phi c 6 phn t (hai
im) c th to c i tng 3DPolyline.
on m sau s to mt ng a tuyn c 5 nh trong khng gian m hnh:
Sub VD_AddPolyline()

Dim plineObj As Acad3DPolyline


Dim points(0 To 14) As Double

' Xc nh cch nh ca a tuyn 3D


points(0) = 1: points(1) = 1: points(2) = 0 ' To im 1
points(3) = 1: points(4) = 2: points(5) = 10 ' To im 2
points(6) = 2: points(7) = 3: points(8) = 30 ' To im 3
points(9) = 3: points(10) = 2: points(11) = 0 ' To im 4
points(12) = 4: points(13) = 4: points(14) = 8 ' To im 5

' To ng a tuyn 3D trong khng gian m hnh


Set plineObj = ThisDrawing.ModelSpace.Add3DPoly (points)
ZoomAll
End Sub

5.2.5. To i tng dng ng cong

223
GIOTRNHTNGHOTHITKCUNG

VBA trong AutoCAD cho php to nhiu loi i tng dng ng cong khc nhau, trong
c hai loi i tng rt ph bin l Circle ng trn v Arc cung trn. Tt c cc phng
thc ny u to i tng trong mt phng XY.
ToitngCircle
to i tng Circle, s dng phng thc AddCircle. Phng thc ny s to mt ng
trn da trn thng s tm v bn knh ca ng trn:

Set RetVal = object.AddCircle(Center, Radius)

Tham s Gii thch


Center Tham s u vo kiu Variant hoc mng 3 phn t kiu Double, cha to tm
ca ng trn.
Radius Tham s u vo kiu Double, l bn knh ca ng trn s c to.
RetVal i tng kiu Circle, tham chiu n ng trn va mi c to.

on m sau to mt ng trn bn knh bng 5 v to tm l (1,2,0) trong khng gian


m hnh:
Sub Example_AddCircle()
Dim circleObj As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius As Double

' Xc nh tm v bn knh ca ng trn


centerPoint(0) = 1#: centerPoint(1) = 2#: centerPoint(2) = 0#
radius = 5#

' To i tng Circle trong khng gian m hnh


Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint,
radius)
ZoomAll
End Sub

Hoc tm v bn knh ca ng trn c th c nhp vo:


Sub VD_AddCircle()
Dim varCenter As Variant
Dim dblRadius As Double
Dim objEnt As AcadCircle

On Error Resume Next


' Ly cc thng s do ngi dng nhp vo
With ThisDrawing.Utility
varCenter = .GetPoint(, vbCr & "Chn tm ng trn: ")
dblRadius = .GetDistance(varCenter, vbCr & "Nhp bn knh: ")
End With

' To i tng Circle trong khng gian m hnh


Set objEnt = ThisDrawing.ModelSpace.AddCircle(varCenter, dblRadius)
objEnt.Update
End Sub

224
CHNGV:LPTRNHTRNAUTOCAD

ToitngArc
to i tng Arc, s dng phng thc AddArc. Phng thc ny s to ra mt cung trn
da trn 4 thng s khc nhau xc nh v tr v kch thc ca cung trn:

Set RetVal = object.AddArc(Center, Radius, StartAngle, EndAngle)

Tham s Gii thch


Center Tham s u vo kiu Variant hoc mng 3 phn t kiu Double, cha to tm
ca cung trn.
Radius Tham s u vo kiu Double, l bn knh ca ng trn s c to.
StartAngle, Tham s u vo kiu Double, xc nh gc bt u v gc kt thc ca cung trn
EndAngle (tnh bng Radian). Phng thc AddArc s v cung trn theo chiu ngc chiu
kim ng h t gc StartAngle n gc EndAngle.
RetVal i tng kiu Arc, tham chiu n cung trn va mi c to.

Hnh V-9: Minh ho tham s StartAngle, EndAngle ca phng thc AddArc.

CH Hu ht cc tham s c lin quan n gc trong VBA u c n v l Radian.

on m sau to mt cung trn c tm (0,0,0) v bn knh l 5 t gc 45 n 315 . Do gi tr


tham s gc tnh bng radian nn cn phi chuyn i t sang radian:
Sub Example_AddArc()
Dim arcObj As AcadArc
Dim centerPoint(0 To 2) As Double
Dim radius As Double
Dim startAngleInDegree As Double
Dim endAngleInDegree As Double

' Xc nh cc thuc tnh ca cung trn


centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
radius = 5 Bn knh
startAngleInDegree = 45 Gc bt u
endAngleInDegree = 315 Gc kt thc

' Chuyn cc gc t sang Radian


Dim startAngleInRadian As Double
Dim endAngleInRadian As Double
startAngleInRadian = startAngleInDegree * 3.141592 / 180
endAngleInRadian = endAngleInDegree * 3.141592 / 180

225
GIOTRNHTNGHOTHITKCUNG

' To i tng Arc trong khng gian m hnh


Set arcObj = ThisDrawing.ModelSpace.AddArc _
(centerPoint, radius, startAngleInRadian,
endAngleInRadian)
ZoomAll
End Sub

5.2.6. To i tng vn bn
Vn bn l i tng dng truyn t nhng thng tin quan trng trong bn v. Ngoi ra,
vn bn cn dng t tiu cho khi, to nhn cho tng thnh phn ca bn v, th hin
quy nh chung hoc lm ghi ch trong bn v.
AutoCAD cung cp nhiu cch khc nhau to vn bn, vi nhng on vn bn ngn v n
gin, c th s dng vn bn n (Text), vi nhng on vn bn di hn, c cha nh dng
ring bn trong th c th s dng vn bn nhiu dng (MText). Mc d tt c cc on vn bn
mi c to u s dng kiu ch hin hnh, vi nhng thit lp mc nh v phng ch v
nh dng nhng cng c nhiu cch khc nhau ty bin phn hin th ca on bn bn.
Trong phm vi ca ti liu ny, ch gii thiu v cch thc to i tng vn bn.
Tovnbnn(Text)
Vn bn n l mt i tng kiu vn bn (Text) m ni dung ca n ch bao gm mt dng
vn bn. Trong AutoCAD, to i tng vn bn n trn bn v, ngi dng c th s
dng lnh Text hoc DText. T VBA, to i tng vn bn n, s dng phng thc
AddText ca tp i tng ModelSpace, c php ca phng thc ny nh sau:

Set RetVal = object.AddText(TextString, InsertionPoint, Height)

Tham s Gii thch


TextString Kiu String, l chui s c hin th trn bn v.
InsertionPoint Kiu Variant (thc cht l mng 3 phn t kiu Double) cha to im bt u
chn vn bn.
Height Kiu Double, xc nh chiu cao ca on vn bn c hin th. Gi tr ca tham
s ny phi l s dng. Nu nhp vo gi tr 0, chng trnh s bo li.
RetVal i tng kiu Text, tham chiu n i tng vn bn n va mi c to.

V d sau s to vn bn mt dng Hello, World. trong khng gian m hnh ti v tr (2,2,0).


Sub VD_AddText()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double

' To i tng Text


textString = "Hello, World."
insertionPoint(0) = 2
insertionPoint(1) = 2
insertionPoint(2) = 0
height = 0.5
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
textObj.Update

226
CHNGV:LPTRNHTRNAUTOCAD

End Sub

Tovnbnnhiudng(MText)
i vi cc on vn bn di v phc tp, nn s dng i tng vn bn nhiu dng MText.
Vn bn nhiu dng c b tr nm trn trong mt b rng nht nh nhng li c th m rng
v hn theo chiu ng. Ngoi ra, i tng MText cn c th c nh dng chi tit n tng
t hoc tng k t.
Mc d c nhiu dng nhng chng thuc v mt i tng duy nht. i tng ny c th di
chuyn, xoay, xa, sao chp, ly i xng, co gin hoc thay i t l.
to i tng MText, s dng phng thc AddMText. C php ca phng thc ny nh
sau:

Set RetVal = object.AddMText(InsertionPoint, Width, Text)

Tham s Gii thch


InsertionPoint Kiu Variant (thc cht l mng 3 phn t kiu Double) cha to im bt u
chn vn bn.
Width Kiu Double, xc nh chiu rng ca on vn bn c hin th. Gi tr ca tham
s ny phi l s dng. Nu nhp vo gi tr 0, chng trnh s bo li.
TextString Kiu String, l chui s c hin th trn bn v.
RetVal i tng kiu MText, tham chiu n i tng vn bn nhiu dng va mi c
to.

Thay v s dng tham s Height nh phng thc AddText, phng thc AddMText s dng
tham s Width v i tng MText c th c hin th trn nhiu dng.
on m sau s minh ho cch thc s dng phng thc AddMText:
Sub VD_AddMtext()
Dim MTextObj As AcadMText
Dim corner(0 To 2) As Double
Dim width As Double
Dim text As String
corner(0) = 0: corner(1) = 10: corner(2) = 0
width = 5
text = "Day la chuoi van ban cua doi tuong MText"
' To i tng MText
Set MTextObj = ThisDrawing.ModelSpace.AddMText(corner, width, text)
ZoomAll
End Sub

5.3. Lm vic vi i tng SelectionSet


i tng SelectionSet thc cht l mt tp i tng dng cha cc i tng c chn
trong bn v (i tng hnh hc), tuy nhin, trnh nhm ln, ta gi n l mt i tng .
Mi i tng SelectionSet u c nhiu phng thc khc nhau dng thm cc i tng
hnh hc vo trong n. Thng thng, khi cn hiu chnh ch vi mt i tng hnh hc duy
nht, ta ch cn s dng phng thc GetEntity ca i tng Document.Utility (xem chi tit
cch s dng phng thc ny trong mc Error! Reference source not found. trang Error!
Bookmark not defined.) la chn i tng hnh hc cn hiu chnh trn mn hnh ca

227
GIOTRNHTNGHOTHITKCUNG

AutoCAD, nhng hiu chnh mt lc nhiu i tng th vic s dng i tng


SelectionSet l thch hp nht.
Mi bn v AutoCAD u c mt tp i tng tn l SelectionSets cha tt c cc i tng
SelectionSet trong bn v. Ngi dng c th to ra nhiu i tng SelectionSet khc nhau
bng cch s dng phng thc Add c trong tp i tng SelectionSets. Mt c im quan
trng ca i tng SelectionSet chnh l tnh cht tm thi ca n, sau khi i tng
SelectionSet c to ra v ngi dng ng bn v li (c lu nhng thay i) th khi m li
bn v, tt c cc i tng SelectionSet u b xo i v ch cn li tp i tng
SelectionSets rng.

CH Tp i tng SelectionSets cha cc i tng SelectionSet trong bn v. Cc


i tng SelectionSet s b xo khi ng bn v. V vy, lc mi m hoc to bn v, tp
i tng SelectionSets lun l tp rng.

Nhn chung, qu trnh lm vic vi i tng SelectionSet cn phi tri qua cc bc sau:
1. Khai bo i tng SelectionSet,
2. Khi to i tng SelectionSet vi lnh Set ca VB,
3. Thm cc i tng cn x l vo SelectionSet,
4. Thc hin thao tc cn thit trn cc i tng trong SelectionSet.
5.3.1. Khai bo v khi to i tng SelectionSet
Vic to i tng SelectionSet c thc hin d dng thng qua phng thc Add c trong
tp i tng SelectionSets.

Set RetVal = object.Add(Name)

Tham s Gii thch


Object L tp i tng SelectionSets
Name L chui k t xc nh tn ca SelectionSet s c to.
RetVal i tng SelectionSet tng va mi c to ra.

on m lnh sau s minh ho cch thc to i tng SelectionSet:


Sub VD_TaoSelectionSet()
Dim sset As AcadSelectionSet Khai bo bin
Set sset = ThisDrawing.SelectionSets.Add("MySSet") To
SelectionSet
End Sub

Tuy nhin, trong qu trnh thao tc trn AutoCAD, khi s dng i tng SelectionSet, ngi
dng rt hay gp li vi thng bo: i tng SelectionSet tn ti. Chnh v vy, trnh li
ny, nn s dng on m sau khi thc hin to mi i tng SelectionSet:
1: Sub VD_GetXData()
2: Dim sset As AcadSelectionSet
3: On Error Resume Next
4: Set sset = ThisDrawing.SelectionSets("MySelectionSet")
5: If Err <> 0 Then
6: Err.Clear
7: Set sset = ThisDrawing.SelectionSets.Add("MySelectionSet")

228
CHNGV:LPTRNHTRNAUTOCAD

8: Else
9: sset.Clear
10: End If
11: End Sub

Dng m lnh s 3 s tt thng bo li. dng m lnh s 4 s thc hin gn bin sset cho i
tng SelectionSet c tn l MySelectionSet. Nu i tng ny cha c th i tng Err s
khc khng (<>0) v ta s phi khi to i tng SelectionSet ny bng phng thc Add
dng m lnh s 7, cn ngc li, khi i tng SelectionSet c tn l MySelectionSet c
trong tp i tng SelectionSets, s dng n, ta cn xa b ni dung m n ang cha bn
trong bng dng m lnh s 9.
5.3.2. Thm i tng hnh hc vo mt SelectionSet
thm i tng hnh hc vo SelectionSet, ngi dng c th s dng cc phng thc c
sn trong i tng SelectionSet nh AddItems hoc h phng thc SelectXXX, bao gm:
Select, SelectAtPoint, SelectOnScreen, SelectByPolygon. Phn di y s ln lt
gii thiu v cc phng thc trn.
PhngthcAddItems
Phng thc ny dng thm tng i tng vo trong SelectionSet. C php ca phng
thc ny nh sau:

object.AddItems Items

Tham s Gii thch


Object L i tng SelectionSet.
Items Kiu Variant, l mng cha cc i tng s c thm vo SelectionSet

on m sau s to mt i tng SelectionSet c tn l MySelectionSet, sau to cc i


tng ng a tuyn, ng thng, ng trn v thm cc i tng ny vo trong i tng
SelectionSet.
Sub VD_AddItems()

Dim objs(0 To 2) As AcadEntity Mng cha cc i tng mi c


to

' Create the new selection set


Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' To ng a tuyn trong khng gian m hnh


Dim plineObj As AcadLWPolyline
Dim points(0 To 5) As Double
points(0) = 3: points(1) = 7
points(2) = 9: points(3) = 2
points(4) = 3: points(5) = 5
229
GIOTRNHTNGHOTHITKCUNG

Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)


plineObj.Closed = True
Set objs(0) = plineObj Thm vo mng cc i tng

' To ng thng trong khng gian m hnh


Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 2: endPoint(1) = 2: endPoint(2) = 0
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
Set objs(1) = lineObj Thm vo mng cc i tng

' To ng trn trong khng gian m hnh


Dim circObj As AcadCircle
Dim centerPt(0 To 2) As Double
Dim radius As Double
centerPt(0) = 20: centerPt(1) = 30: centerPt(2) = 0
radius = 3
Set circObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius)
Set objs(2) = circObj Thm vo mng cc i tng
ZoomAll

' Thm cc i tng c trong mng objs vo i tng SelectionSet


ssetObj.AddItems objs
ThisDrawing.Regen acAllViewports
End Sub

PhngthcSelect
Phng thc Select l phng thc c bn trong i tng SelectionSet. Vi phng thc
thc ny, ngi dng s c nhiu la chn khc nhau khi chn i tng tu thuc vo cc
tham s ca phng thc. C php ca phng thc ny nh sau:

object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]

Tham s Gii thch


Object L i tng SelectionSet
Mode Tham s xc nh ch chn i tng.
Point1 Tham s ty chn, kiu Variant (mng 3 phn t kiu Double) cha to im th
nht ca ca s la chn, s dng kt hp vi Point2
Point2 Tham s ty chn, kiu Variant (mng 3 phn t kiu Double) cha to im th
hai ca ca s la chn, s dng kt hp vi Point1
FilterType, Tham s tu chn, xc nh b lc i tng (Chi tit tham kho phn nh ngha b
FilterData lc i tng cho SelectionSet trang 234).

Gi tr ca tham s Mode s xc nh cch thc la chn i tng khi s dng phng thc
Select. Gi tr ca tham s ny c th l mt trong nhng gi tr sau:
Hng s Gi tr ngha
acSelectionSetWindow 0 Chn tt c cc i tng nm trong hnh ch nht gii hn
bi hai im Point1 v Point2

230
CHNGV:LPTRNHTRNAUTOCAD

acSelectionSetCrossing 1 Chn tt c cc i tng nm trong hoc c giao vi hnh


ch nht gii hn bi hai im Point1 v Point2
acSelectionSetPrevious 3 Chn cc i tng chn gn nht. B qua hai tham s
Point1 v Point2.
acSelectionSetLast 4 Chn i tng cui cng c to ra. B qua hai tham s
Point1 v Point2.
acSelectionSetAll 5 Chn tt c cc i tng ang c trong bn v. B qua hai
tham s Point1 v Point2.

V d sau s minh ho cch s dng phng thc Select vi tham s Mode=


acSelectionSetCrossing:

Sub VD_Select()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' Thm tt c cc i tng nm trong v giao vi hnh ch nht c


' to (28,17,0) v (-3.3, -3.6,0) vo trong i tng
SelectionSet
Dim mode As Integer
Dim corner1(0 To 2) As Double
Dim corner2(0 To 2) As Double
mode = acSelectionSetCrossing
corner1(0) = 28: corner1(1) = 17: corner1(2) = 0
corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0
ssetObj.Select mode, corner1, corner2
End Sub

PhngthcSelectAtPoint
Phng thc ny s chn cc i tng i qua mt im cho trc thm vo SelectionSet.
C php ca phng thc ny nh sau:

object.SelectAtPoint Point [, FilterType] [, FilterData]

Tham s Gii thch


Object L i tng SelectionSet
Point Kiu Variant (mng 3 phn t kiu Double), cha to im dng chn i
tng.
FilterType, Tham s tu chn, xc nh b lc i tng (Chi tit tham kho phn nh ngha b
FilterData lc i tng cho SelectionSet trang 234).

V d sau thm tt c cc i tng i qua im (6.8 , 9.4 , 0) vo i tng SelectionSet c tn


l MySelectionSet:

231
GIOTRNHTNGHOTHITKCUNG

Sub VD_SelectAtPoint()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' Thm tt c cc i tng qua im (6.8,9.4,0)


' vo i tng SelectionSet
Dim point(0 To 2) As Double
point(0) = 6.8: point(1) = 9.4: point(2) = 0
ssetObj.SelectAtPoint point
End Sub

PhngthcSelectByPolygon
Phng thc ny thc hin chn cc i tng thm vo SelectionSet da trn mi tng
quan vi ng a tuyn do ngi lp trnh xc nh trc. C php ca phng thc ny nh
sau:

object.SelectByPolygon Mode, PointsList[, FilterType][, FilterData]

Tham s Gii thch


Object L i tng SelectionSet
Mode Tham s xc nh ch chn i tng.
PointsList Tham s ty chn, kiu Variant (mng kiu Double) cha to 3 chiu ca cc nh
ca ng a tuyn.
FilterType, Tham s tu chn, xc nh b lc i tng (Chi tit tham kho phn nh ngha b
FilterData lc i tng cho SelectionSet trang 234).

Gi tr ca tham s Mode s xc nh cch thc la chn i tng khi s dng phng thc
SelectByPolygon. Gi tr ca tham s ny c th l mt trong nhng gi tr sau:
Hng s Gi tr ngha
acSelectionSetFence 2 Chn cc i tng c giao ct vi ng bao a
tuyn c ta cc nh xc nh bi PointsList.
acSelectionSetWindowPolygon 6 Chn cc i tng nm hon ton bn trong min a
gic c ta cc nh xc nh bi PointsList.
acSelectionSetCrossingPolygon 7 Chn cc i tng nm hon ton hoc mt phn
bn trong min a gic c ta cc nh xc nh bi
PointsList. AutoCAD s t ng v a gic t cc ta
ny theo nguyn tc cc cnh ca a gic khng
giao nhau.

Minh ho di y s lm r ngha cc gi tr ca tham s Mode. Cc ng lin l cc i


tng trn bn v ca AutoCAD, cn cc ng nt t l ng a tuyn ni cc nh c
cho bi tham s PointList.

232
CHNGV:LPTRNHTRNAUTOCAD

Hnh V-10: Minh ho cc ch chn i tng ca phng thc SelectByPolygon.

Kt qu ca phng thc SelectByPolygon l rt khc nhau tu thuc vo gi tr ca tham s


Mode. Nu tham s Mode c gi tr l:
acSelectionSetFence: i tng c chn l hnh ellipese.
acSelectionSetWindowPolygon: i tng c chn l hnh ch nht v hnh trn.
acSelectionSetCrossingPolygon: i tng c chn l tt c cc hnh trn.
on m sau s minh ho cch thc s dng phng thc SelectByPolygon
Sub VD_SelectByPolygon()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' Xc nh cc nh ca ng a tuyn
Dim pointsArray(0 To 11) As Double
pointsArray(0) = 28.2: pointsArray(1) = 17.2: pointsArray(2) = 0
pointsArray(3) = -5: pointsArray(4) = 13: pointsArray(5) = 0
pointsArray(6) = -3.3: pointsArray(7) = -3.6: pointsArray(8) = 0
pointsArray(9) = 28: pointsArray(10) = -3: pointsArray(11) = 0
' Xc nh ch chn i tng
Dim mode As Integer
mode = acSelectionSetFence
' Chn i tng
ssetObj.SelectByPolygon mode, pointsArray
End Sub

PhngthcSelectOnScreen
Phng thc ny s hin th dng nhc Select object: ti dng lnh v cho php ngi
dng chn i tng trc tip trn mn hnh bn v, cch thao tc trn mn hnh AutoCAD ny
tng t nh khi s dng cc lnh thng thng khc ca AutoCAD, m c yu cu la chn
i tng (v d nh lnh Copy). C php ca phng thc ny nh sau:

object.SelectOnScreen [FilterType] [, FilterData]

233
GIOTRNHTNGHOTHITKCUNG

Tham s Gii thch


Object L i tng SelectionSet
FilterType, Tham s tu chn, xc nh b lc i tng (Chi tit tham kho phn nh ngha b
FilterData lc i tng cho SelectionSet trang 234).

on m sau s minh ho cch thc s dng phng thc SelectOnScreen:


Sub VD_SelectOnScreen()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' Hin th thm dng nhc ti dng lnh


ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong tren man hinh:"
' Chn i tng trn mn hnh
ssetObj.SelectOnScreen
End Sub

5.3.3. Thao tc vi cc i tng trong SelectionSet


Nh phn trc trnh by, thc cht i tng SelectionSet l mt tp i tng dng
nhm cc i tng hnh hc li vi nhau nhm mc ch hiu chnh cc i tng hnh hc
d dng hn. Do bn thn l mt tp i tng nn cch thc truy cp n tt c cc i tng
bn trong SelectionSet tt nht l s dng cu trc lp For each next.
on m lnh sau s yu cu ngi s dng thc hin chn i tng trn mn hnh bn v,
sau tin hnh i mu cc i tng c chn thnh mu xanh.
Sub VD_SelectOnScreen()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If

' Chn i tng trn mn hnh


ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong can doi mau:"
ssetObj.SelectOnScreen

' Thc hin cc thao tc vi i tng c chn


Dim ent As AcadEntity
For Each ent In ssetObj
' on chng trnh x l cc i tng s nm y
' Trong v d ny, cc i tng s c i mu thnh mu xanh
ent.Color = acBlue
ent.Update

234
CHNGV:LPTRNHTRNAUTOCAD

Next ent
End Sub

5.3.4. nh ngha b lc i tng cho SelectionSet


Trong tt c cc phng thc chn i tng dng SelectXXX u c hai tham s tu chn
FilterType v FilterData, l tham s c s dng lc cc i tng c chn theo
mt tiu ch no . Cc tiu ch thng c s dng bao gm: loi i tng (ng thng,
ng trn...), mu sc, kiu ng nt, lp... Khi s dng b lc i tng, ch c nhng i
tng tho mn cc tiu ch trong b lc mi c chn thm vo i tng SelectionSet.
thit lp b lc i tng, hai tham s FilterType v FilterData cn phi c s dng
song hnh:
FilterType: l tham s kiu Variant, thc cht l mt mng mt chiu kiu Integer cha
m DXF xc nh kiu lc i tng.
FilterData: l tham s kiu Variant, thc cht l mt mng mt chiu kiu Variant
cha gi tr ca kiu lc tng ng trong tham s FilterType. Do c mi quan h 1-1 nh
vy nn s phn t ca mng FilterData phi bng vi s phn t ca mng FilterType.
Tu theo nhu cu m ngi lp trnh phi chn cho mnh mt tiu ch lc i tng thch hp.
Di y s lit k danh sch cc m DXF tng ng vi mt s kiu lc i tng thng s
dng:
M DXF ngha
-4 Cc ton t iu kin (s dng cho b lc theo nhiu iu kin kt hp)
0 Chui th hin kiu i tng, chng hn nh: Line, Polyline, LWPolyline, Spline,
Circle, Arc, Text, Mtext,...
1 Chui vn bn ca cc i tng nh Text v MText (gi tr thuc tnh Content ca
cc i tng ny).
2 Chui tng ng vi thuc tnh Name, chng hn nh thuc tnh Tag ca i tng
Attribute, thuc tnh name ca i tng Block,
6 Chui tng ng vi kiu ng (Linetype) ca cc i tng.
7 Chui tng ng vi kiu vn bn (Textstyle) ca cc i tng.
8 Chui tng ng vi tn lp (Layer) ca cc i tng.
10 To im ch yu ca i tng, chng hn nh: im u ca i tng Line,
im chn ca i tng Text, tm ca i tng Circle,
62 S nguyn xc nh mu ca i tng: 0-ByBlock, 256-ByLayer, 1-Red, 2-Yellow,
cc gi tr mu ny tng ng vi bng mu trong AutoCAD.

Tt c cc m DXF c th tham kho trong ti liu tr gip ca AutoCAD DXF Reference,


mc DXF Format Group Codes in Numerical Order.
CH Khi truyn gi tr cho tham s FilterType v FilterData, s phn t ca mng
FilterType v mng FilterData phi bng nhau. Mi phn t ca mng FilterType s tng
ng vi mt phn t ca mng FilterData.

Lctheomtiukin
Khi thc hin lc theo mt iu kin, s phn t ca cc tham s FilterType v FilterData
l 1. Tuy nhin, ngi lp trnh khng c gn gi tr trc tip m vn phi thc hin khai bo
cc tham s ny l mng nhng ch c mt phn t. V d sau s minh ho r hn cch thc to
b lc i tng vi ch mt iu kin:
235
GIOTRNHTNGHOTHITKCUNG

Sub VD_Filter()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("SSET")
ssetObj.Delete
Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")

' To b lc i tng:
' Tiu ch chn l: Kiu i tng
' Gi tr ca tiu ch l: Circle
' ngha l ch chn i tng l ng trn.
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
gpCode(0) = 0: dataValue(0) = "Circle"

ssetObj.SelectOnScreen gpCode, dataValue


MsgBox "So doi tuong duoc chon: " & ssetObj.Count
End Sub

Lctheonhiuiukinkthp
Khi cn lc i tng theo nhiu iu kin kt hp, cn phi thm vo cc ton t iu kin
trong b lc. kt hp cc iu kin vi nhau, cc iu kin phi c t gia cc ton t
iu kin, m DXF chung ca cc ton t iu kin l -4. Di y l danh sch cc ton t
iu kin c s dng trong b lc i tng:
Ton Gi tr Gi tr S lng ngha
t bt u kt thc iu kin
AND <AND AND> 1 i tng no tho mn tt c cc iu kin
s c chn.
OR <OR OR> 1 i tng no tho mn mt trong cc iu
kin s c chn.
XOR <XOR XOR> 2 i tng no tho mn mt iu kin v
khng tho mn iu kin cn li s c
chn.
NOT <NOT NOT> 1 i tng no khng tho mn iu kin s
c chn.

on m sau s thc hin chn i tng c s dng b lc theo nhiu in kin kt hp:
nhng i tng l ng thng hoc ng trn v khng nm trn lp Layer1 s c
chn.
Sub VD_Filter()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("SSET")
ssetObj.Delete
Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")

' To b lc i tng:
Dim gpCode(8) As Integer
Dim dataValue(8) As Variant
gpCode(0) = -4: dataValue(0) = "<and"

gpCode(1) = -4: dataValue(1) = "<or"

236
CHNGV:LPTRNHTRNAUTOCAD

gpCode(2) = 0: dataValue(2) = "line"


gpCode(3) = 0: dataValue(3) = "circle"
gpCode(4) = -4: dataValue(4) = "or>"

gpCode(5) = -4: dataValue(5) = "<not"


gpCode(6) = 8: dataValue(6) = "Layer1"
gpCode(7) = -4: dataValue(7) = "not>"

gpCode(8) = -4: dataValue(8) = "and>"

ssetObj.SelectOnScreen gpCode, dataValue


MsgBox "So doi tuong duoc chon: " & ssetObj.Count
End Sub

5.3.5. Loi b i tng hnh hc ra khi SelectionSet


Khi mun loi b cc i tng ra khi SelectionSet (tc l khng mun chn i tng na),
th c th s dng cc phng thc sau ca i tng SelectionSet.
PhngthcRemoveItems
Phng thc ny thc hin loi b mt hoc nhiu i tng ra khi SelectionSet. Cc i
tng ny s khng nm trong SelectionSet na nhng vn cn tn ti trong bn v. C php
ca phng thc ny nh sau:

object.RemoveItems Objects

Tham s Gii thch


Object L i tng SelectionSet
Objects Tham s kiu Variant (mng cc i tng) cha cc i tng cn loi b ra khi
SelectionSet.

PhngthcClear
Phng thc Clear s loi b tt c cc i tng ra khi SelectionSet. Sau khi thc hin
phng thc ny, i tng SelectionSet vn cn tn ti nhng khng cha i tng no c.
Cc i tng hnh hc nm trong SelectionSet lc trc vn tn ti trn bn v nhng khng
nm trong i tng SelectionSet na. C php ca phng thc ny nh sau:

object.Clear

Trong , object l i tng SelectionSet.


PhngthcErase
Phng thc Erase khng nhng loi b tt c cc i tng hnh hc ra khi SelectionSet m
cn thc hin xo cc i tng khi bn v. Sau khi thc hin phng thc ny, i tng
SelectionSet vn cn tn ti nhng khng cha i tng no c. C php ca phng thc ny
nh sau:

object.Erase

Trong , object l i tng SelectionSet.

237
GIOTRNHTNGHOTHITKCUNG

PhngthcDelete
Phng thc Delete s xo i tng SelectionSet. Sau khi thc hin phng thc ny, i
tng SelectionSet s khng cn tn ti trn bn v, tuy nhin cc i tng hnh hc c trong
SelectionSet lc trc s khng b xo khi bn v. C php ca phng thc ny nh sau:

object.Delete

Trong , object l i tng SelectionSet.


5.4. Hiu chnh i tng hnh hc
Hiu chnh i tng hnh hc l mt thao tc khng th thiu trong qu trnh to bn v vi
AutoCAD. Thng qua VBA trong AutoCAD, ngi dng c th thc hin hu ht cc thao tc
hiu chnh i tng ging nh khi thc hin trn giao din ca chng trnh AutoCAD.
Vic hiu chnh i tng c th c thc hin thng qua cc phng thc hoc cc thuc
tnh ca i tng:
Phng thc thng dng thay i v hnh dng, kch thc, v tr ca i tng, hoc
thm ch c th to mi i tng da trn i tng c. Thng thng, mi phng
thc u c nhng tham s ring.
Thuc tnh thng dng thay i cc tnh cht lin quan n hin th ca chnh i
tng trn mn hnh hoc khi in, chng hn nh mu sc, kiu ng, nt,
Cc i tng hnh hc trong AutoCAD, d c khc nhau, nhng u c xy dng da trn
mt giao tip c s trong VBA: IAcadEntity. Chnh v vy, tt c cc i tng hnh hc u
c nhng phng thc v thuc tnh chung. Bn cnh , mi i tng ny cn c nhng
phng thc v thuc tnh ring, chng hn nh phng thc AddVertex ca i tng
LWPolyline, hay thuc tnh Radius ca i tng Circle,
Do c nhng khc bit nh vy nn trong phn ny, trc ht s gii thiu cch thc hiu
chnh chung cho tt c cc i tng hnh hc bao gm:
Sao chp, xo, ph v, di chuyn, ly i xng, off-set, quay v co gin i tng;
Thc hin nhn bn i tng dng cc v dng ch nht;
Thao tc vi d liu m rng - XData;
Thay i mu sc, lp, kiu ng v s hin th ca i tng.
V tip s trnh by mt s thao tc hiu chnh i tng theo cc phng thc v thuc tnh
ring ca i tng:
Hiu chnh ng a tuyn;
Hiu chnh vn bn n.
Trong cc phin bn trc AutoCAD 2006, mi khi hiu chnh i tng bng m lnh, nhng
thay i s cha c hin th trn mn hnh cho n khi ngi dng gi phng thc
Update ca i tng , hoc gi phng thc Update ca i tng Application, hoc
phng thc Regen ca i tng Document. Trong mt s trng hp, AutoCAD s t ng
cp nht khi kt thc chng trnh, tuy nhin, thy c kt qu hiu chnh ngay sau mi
dng m lnh hiu chnh th cch tt nht l nn b sung cc on m lnh cp nht nhng thay
i .

238
CHNGV:LPTRNHTRNAUTOCAD

CH cp nht nhng thay i i vi i tng thng qua m lnh, ngi dng c


th s dng phng thc Update ca chnh i tng theo cu trc:
tn_i_tng.Update.

5.4.1. Hiu chnh i tng s dng cc phng thc


SaochpitngPhngthcCopy
S dng phng thc Copy sao chp i tng. i tng mi c to ra s ging ht nh
i tng c, c v tr trng vi i tng c, ch c iu l i tng mi s c v trn
cng. C php ca phng thc ny nh sau:

Set RetVal = object.Copy

Tham s Gii thch


Object i tng hnh hc, l i tng gc s c sao chp
RetVal i tng hnh hc, tham chiu n i tng va mi c to (l bn sao ca
i Object)

CH Phng thc Copy ch sao chp i tng. i tng mi c sao chp s c v


tr trng vi i tng c.

V d sau to mt hnh trn sau thc hin sao chp hnh trn . Cn lu l sau khi thc
thi macro ny, ta ch nhn thy trn mn hnh bn v mt hnh trn nhng thc cht l c hai
hnh trn vi v tr trng nhau.
Sub VD_Copy()
' To hnh trn
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)

' Sao chp i tng


Dim copyCircleObj As AcadCircle
Set copyCircleObj = circleObj.Copy()
End Sub

XoitngPhngthcDelete
xo i tng khi bn v, s dng phng thc Delete c trong i tng . C php
ca phng thc ny rt n gin:

object.Delete

V d sau s minh ho cch s dng phng thc ny. Trong v d ny, ngi s dng s chn
mt i tng trn mn hnh, v sau i tng ny s c xo khi bn v:
Sub DeleteObject()
Dim objDrawingObject As AcadEntity
Dim varEntityPickedPoint As Variant

239
GIOTRNHTNGHOTHITKCUNG

On Error Resume Next


' Chn i tng trn mn hnh bn v
ThisDrawing.Utility.GetEntity _
objDrawingObject, varEntityPickedPoint, "Chn i tng xo: "
If objDrawingObject Is Nothing Then
MsgBox "Bn cha chn i tng."
Exit Sub
End If
' Xo i tng c chn
objDrawingObject.Delete
End Sub

PhvitngPhngthcExplode
S dng phng thc Explode ph v mt i tng thnh cc i tng con. Phng thc
ny tr v mt mng tham chiu n cc i tng con, l cc i tng cu thnh nn i
tng gc. C php ca phng thc ny nh sau:

Set RetVal = object.Explode

Tham s Gii thch


Object i tng s b ph v. i tng ny c th l: 3DPolyline, BlockRef,
LightweightPolyline, MInsertBlock, Polygonmesh, Polyline hoc Region
RetVal Mng tham chiu n cc i tng con cu thnh nn i tng Object.

Gi tr tr v ca phng thc ny l mt mng i tng vi nhiu loi i tng khc nhau


tu thuc vo loi i tng gc. Chng hn nh khi ph v mt khi (i tng Block) th kt
qu tr v l cc i tng cu thnh khi , hoc khi ph v mt ng a tuyn th mng
i tng tr v l cc on thng ca ng a tuyn . Do gi tr tr v khc nhau nh vy
nn khi khai bo mng cha gi tr tr v, nn s dng bin kiu Variant.
Khng ging nh lnh Explode trong AutoCAD, phng thc Explode khng lm mt i
tng gc. Khi thc hin phng thc ny, mt bn sao ca i tng gc s c to ra, v
sau , phng thc Explode mi thc hin ph v trn bn sao ca i tng.
CH Phng thc Explode khng thc hin ph v trn i tng gc m l trn bn
sao ca i tng gc, v vy i tng gc vn cn c gi nguyn.

V d sau s to ra mt ng a tuyn 2D v thc hin ph v i tng , sau s duyt


qua cc i tng thnh phn sau khi c ph v.
Sub VD_Explode()
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double

' nh ngha cc im ca ng a tuyn


points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1

' To i tng LWPolyline trong khng gian m hnh


Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)

240
CHNGV:LPTRNHTRNAUTOCAD

' Ph v ng a tuyn
MsgBox "Ph v ng a tuyn."
Dim explodedObjects As Variant
explodedObjects = plineObj.Explode

' Duyt qua cc i tng thnh phn


Dim I As Integer
For I = 0 To UBound(explodedObjects)
explodedObjects(I).Color = acRed
explodedObjects(I).Update
MsgBox "i tng th " & I & ": " & explodedObjects(I).ObjectName
explodedObjects(I).Color = acByLayer
explodedObjects(I).Update
Next
End Sub

DichuynitngPhngthcMove
S dng phng thc Move tnh tin i tng trong khng gian ba chiu. C php ca
phng thc ny nh sau:

object.Move Point1, Point2

Tham s Gii thch


Object i tng hnh hc, l i tng s b di chuyn.
Point1, Point2 Tham s u vo, l mng 3 phn t kiu Double cha to ca im th nht
v th hai ca vector tnh tin.

Hnh V-11: Minh ho phng thc Move

V d sau s minh ho cch thc s dng phng thc Move dch chuyn mt i tng.
Macro ny s to mt ng trn, sau dch chuyn ng trn ny 2 n v theo trc X.
Sub VD_Move()
' To hnh trn trong khng gian m hnh
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
ZoomAll

241
GIOTRNHTNGHOTHITKCUNG

' Xc nh 2 im to nn vec-t tnh tin


Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = 2: point2(1) = 0: point2(2) = 0

MsgBox "Di chuyn theo trc X 2 n v."

' Thc hin di chuyn i tng


circleObj.Move point1, point2

ZoomAll
MsgBox "Qu trnh dch chuyn kt thc."
End Sub

LyixngPhngthcMirror
S dng phng thc Mirror ly i xng mt i tng qua mt trc c xc nh trc.
C php ca phng thc ny nh sau:

Set RetVal = object.Mirror(Point1, Point2)

Tham s Gii thch


Object i tng hnh hc, l i tng gc s c ly i xng.
Point1, Point2 Tham s u vo, l mng 3 phn t kiu Double cha to ca im th nht
v th hai ca trc i xng.
RetVal Tham chiu n i tng sau khi c ly i xng

Minh ho: Phng thc Mirror.


Khi s dng phng thc Mirror, cn lu n gi tr ca bin h thng MIRRTEXT. Bin ny
s iu khin cch thc ly i xng vi i tng vn bn:

Trc khi ly i xng Sau khi ly i xng Sau khi ly i xng


(MIRRTEXT=1) (MIRRTEXT=0)
Hnh V-12: Bin h thng MIRRTEXT v phng thc Mirror

V d sau s to mt ng a tuyn, sau ly i xng qua trc y=4.25 v i mu i


tng va mi c ly i xng thnh mu :

242
CHNGV:LPTRNHTRNAUTOCAD

Sub VD_Mirror()

' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll

' Xc nh trc i xng


Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 4.25: point1(2) = 0
point2(0) = 4: point2(1) = 4.25: point2(2) = 0

MsgBox "Ly i xng ng a tuyn.", , "VD Mirror"

' Thc hin ly i xng ng a tuyn


Dim mirrorObj As AcadLWPolyline
Set mirrorObj = plineObj.Mirror(point1, point2)
mirrorObj.Color = acRed

ZoomAll
MsgBox "Mirror completed.", , " VD Mirror"
End Sub

LyOffsetPhngthcOffset
Phng thc Offset s to ra mt i tng mi vi ng bin nm cch ng bin ca i
tng c mt khong c xc nh trc. Phng thc ny c th c p dng vi cc i
tng nh: Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, v
Xline. Phng thc ny s tr v mng cha cc i tng va mi c to. Tuy nhin,
thng thng mng ny ch cha mt i tng. C php ca phng thc ny nh sau:

Set RetVal = object.Offset(Distance)

Tham s Gii thch


Object L i tng gc s c ly Off-set.
Distance Tham s u vo, kiu Double, l khong cch ly off-set. Gi tr ca tham s ny
c th l s m hoc dng. Nu l s m th phng thc ny s to ra nhng
i tng c xu hng bn knh nh hn i tng gc, trong trng hp bn
knh nh hn khng c ngha th phng thc ny s to ra i tng c to
X, Y v Z nh hn i tng gc.
RetVal Bin kiu Variant, l mng cha cc i tng mi c to ra. Thng thng,
mng ny ch c mt i tng.

V d sau s to mt ng a tuyn trong khng gian m hnh v ly off-set i tng ny


mt khong l 0,25. i tng va mi c to ra s c i mu thnh mu .

243
GIOTRNHTNGHOTHITKCUNG

Sub VD_Offset()
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll

MsgBox "Off-set a tuyn vi khong cch 0.25.", , "V d Offset"

' Ly Off-set ng a tuyn


Dim offsetObj As Variant
offsetObj = plineObj.Offset(0.25)
offsetObj(0).Color = acRed

ZoomAll
End Sub

XoayitngPhngthcRotate
S dng phng thc Rotate xoay mt i tng quanh mt im c nh. C php ca
phng thc ny nh sau:

object.Rotate BasePoint, RotationAngle

Tham s Gii thch


Object L i tng s c xoay.
BasePoint L mng 3 phn t kiu Double cha to im gc, i tng s c quay
quanh im ny.
RotationAngle L tham s kiu Double, xc nh gc xoay i tng (tnh bng Radian).

on m sau s minh ho cch thc s dng phng thc Rotate:


Sub VD_Rotate()
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 2
points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll

MsgBox "Xoay gc 45 .", , "VD Rotate "


' nh gc xoay v to im c s
Dim basePoint(0 To 2) As Double

244
CHNGV:LPTRNHTRNAUTOCAD

Dim rotationAngle As Double


basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
rotationAngle = 45/180*3.1416 ' 45

' Xoay i tng


plineObj.Rotate basePoint, rotationAngle
ZoomAll
End Sub

ThayitlitngPhngthcScaleEntity
S dng phng thc ScaleEntity thay i t l i tng ng u theo cc phng X,
Y v Z. C php ca phng thc ny nh sau:

object.ScaleEntity BasePoint, ScaleFactor

Tham s Gii thch


Object L i tng s c thay i t l.
BasePoint Mng 3 phn t kiu Double cha to im gc, i tng s c thay i t
l theo cc phng X, Y v Z quanh im ny quay quanh im ny.
ScaleFactor Tham s kiu Double, xc nh h s t l khi thay i t l. Kch thc ca i
tng s c nhn vi h s t l ny. Tham s ScaleFactor ch nhn gi tr ln
hn khng, nu nh hn hoc bng khng th VBAIDE s bo li. Gi tr
ScaleFactor<1 s thu nh i tng, ngc li s phng to i tng ln.

itngvivtr
vkchthcmi

itngvivtrv
kchthcbanu

Hnh V-13: Minh ho phng thc ScaleEntity

on m sau to mt ng a tuyn trong khng gian m hnh v s dng phng thc


ScaleEntity thay i t l ca ng a tuyn quanh im (4 , 4.25 , 0) vi h s
t l l 0.5
Sub VD_ScaleEntity()
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 2

245
GIOTRNHTNGHOTHITKCUNG

points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll

MsgBox "Thay i t l vi h s 0.5", , "V d ScaleEntity"

' Xc nh cc tham tham s ca phng thc


Dim basePoint(0 To 2) As Double
Dim scalefactor As Double
basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
scalefactor = 0.5

' Thay i t l ng a tuyn


plineObj.ScaleEntity basePoint, scalefactor
ZoomAll
End Sub

5.4.2. Hiu chnh i tng s dng cc thuc tnh


Khng ging nh cc khi s dng cc phng thc, ngi lp trnh c th s dng cc thuc
tnh hiu chnh s hin th ca cc i tng hnh hc trong bn v AutoCAD. Sau khi thay
i thuc tnh ca cc i tng, nn s dng phng thc Update c trong i tng
cp nht nhng thay i trn bn v.
Di y l cc thuc tnh thng c s dng khi hiu chnh cc i tng hnh hc.
ThuctnhColorMucaitng
S dng thuc tnh Color ly hoc gn mu cho mt i tng hnh hc. Thuc tnh ny
cng c trong i tng Layer vi ngha tng ng.

object.Color

Tham s Gii thch


Object L i tng hnh hc, hoc i tng Layer.
Color S nguyn hoc hng s acColor, xc nh mu ca i tng. Khi mt i tng
mi c to ra, gi tr mc nh ca thuc tnh ny acByLayer

Gi tr ca thuc tnh Color l s nguyn trong phm vi t 0 n 256, 9 trong cc s ny c


nh ngha trc vi cc hng s acColor trong AutoCAD. Di y l danh sch cc hng s
ny:
Hng s Gi tr ngha
acByBlock 0 Mu ca i tng ly theo mu ca Block cha i tng .
acRed 1 Mu .
acYellow 2 Mu vng.
acGreen 3 Mu xanh l.
acCyan 4 Mu xanh lam.

246
CHNGV:LPTRNHTRNAUTOCAD

acBlue 5 Mu xanh da tri.


acMagenta 6 Mu tm
acWhite 7 Mu trng hoc en tu thuc vo mu nn.
acByLayer 256 Mu ca i tng ly theo mu ca lp cha i tng .

on m di y cho php ngi dng chn i tng trn mn hnh v thc hin i mu
i tng c chn thnh mu :
Sub VD_Color()
Dim ent As AcadEntity
Dim P(2) As Double
Chn i tng trn mn hnh
On Error Resume Next
ThisDrawing.Utility.GetEntity ent, P, "Chon doi tuong can doi mau: "
If Not (ent Is Nothing) Then
i mu i tng
ent.Color = acRed
ent.Update
End If
End Sub

ThuctnhLayerLpchaitng
S dng thuc tnh Layer ly v thay i lp cha i tng. Thng thng, khi mt i
tng hnh hc mi c to ra, i tng s c t trn lp hin hnh ca bn v. Khi
ngi dng thay i gi tr ca thuc tnh Layer thnh tn ca mt lp khc, i tng s
c t ng chuyn v nm trn lp mi ny. Nu ngi dng gn cho thuc tnh Layer mt
tn lp khng c trong bn v th chng trnh s khng bo li, v i tng vn nm trn lp
c.

object.Layer

Tham s Gii thch


Object L i tng hnh hc.
Layer Chui cha tn ca lp.

on m di y cho php ngi dng chn i tng trn mn hnh v thc hin i lp ca
i tng c chn thnh lp Layer1 (ngi dng phi to trc mt lp c tn l
Layer1 bng lnh ca AutoCAD):
Sub VD_Layer()
Dim ent As AcadEntity
Dim P(2) As Double
' Chn i tng trn mn hnh
On Error Resume Next
ThisDrawing.Utility.GetEntity ent, P, "Chon doi tuong can doi lop: "
If Not (ent Is Nothing) Then
' Chuyn lp cho i tng
ent.Layer = "Layer1"
ent.Update
End If
End Sub

247
GIOTRNHTNGHOTHITKCUNG

ThuctnhLineTypeKiungcaitng
thay i kiu hin th ca nt v cc i tng hnh hc trn mn hnh, thit lp li thuc
tnh Linetype ca i tng thnh mt kiu ng hin c trong bn v. Thng thng, khi
mt i tng va mi c to ra, i tng s c gn kiu ng bng kiu ng hin
hnh trong bn v. Thuc tnh ny cng c hiu lc vi i tng Layer.

object.Linetype

Tham s Gii thch


Object L i tng hnh hc hoc i tng Layer.
Linetype Chui cha tn ca kiu ng ca i tng. Ngoi ra, thuc tnh ny cng c
th bng mt trong nhng gi tr c bit sau:
CONTINUOUS: y l kiu ng mc nh, c AutoCAD t ng to ra.
BYLAYER: kiu ng ca i tng s c ly bng kiu ng c gn
cho lp cha i tng.
BYBLOCK: kiu ng ca i tng s c ly bng kiu ng ca block c
cha i tng.

on m di y cho php ngi dng chn i tng trn mn hnh v thc hin i kiu
ng ca i tng c chn thnh DASHED2 (ngi dng phi to trc kiu ng c
tn l DASHED2 bng lnh ca AutoCAD):
Sub VD_LineType()
Dim ent As AcadEntity
Dim P(2) As Double
' Chn i tng trn mn hnh
On Error Resume Next
ThisDrawing.Utility.GetEntity ent, P, "Chon DT can doi kieu duong: "
If Not (ent Is Nothing) Then
' Chuyn kiu ng cho i tng
ent.Linetype = "DASHED2"
ent.Update
End If
End Sub

CH c th phi iu chnh gi tr ca bin h thng LTSCALE th mi quan st c cc


kiu ng khng phi l nt lin.

ThuctnhLineweightChiudyntin
Thuc tnh Lineweight dng thit lp chiu dy nt in cho cc i tng hnh hc v i
tng Layer.

object.Lineweight

Gi tr ca thuc tnh ny l mt hng s kiu acLineWeight:


Hng s B dy Hng s B dy Hng s B dy
(mm) (mm) (mm)
acLnWtByLayer Theo lp acLnWt020 0.2 acLnWt080 0.8

248
CHNGV:LPTRNHTRNAUTOCAD

acLnWtByBlock Theo Block acLnWt025 0.25 acLnWt090 0.9


acLnWtByLwDefault Mc nh acLnWt030 0.3 acLnWt100 1.0
acLnWt000 0.0 acLnWt035 0.35 acLnWt106 1.06
acLnWt005 0.05 acLnWt040 0.4 acLnWt120 1.2
acLnWt009 0.09 acLnWt050 0.5 acLnWt140 1.4
acLnWt013 0.13 acLnWt053 0.53 acLnWt158 1.58
acLnWt015 0.15 acLnWt060 0.6 acLnWt200 2.0
acLnWt018 0.18 acLnWt070 0.7 acLnWt211 2.11

Khi mt i tng hnh hc va mi c to ra, gi tr ca thuc tnh ny l acLnWtByLayer.


Nu khng c gn bng mt chiu dy nt in c th, chiu dy nt in s c ly bng chiu
dy mc nh ca AutoCAD, chiu dy ny c xc nh thng qua bin h thng LWDEFAULT
(gi tr ny c n v l 1/100 ca mm).
on m lnh sau s minh ho cch thc thao tc vi thuc tnh Lineweight:
Sub VD_LineWeight()
Dim circleObj As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius As Double
' Xc nh cc thng s ca ng trn
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
' To ng trn trong khng gian m hnh
Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint,
radius)
ZoomAll
' Hin th chiu dy hin hnh ca ng trn
MsgBox "Chieu day hien hanh la: " & circleObj.Lineweight
' Thay i chiu dy ca ng trn
circleObj.Lineweight = acLnWt211
circleObj.Update
MsgBox " Chieu day hien hanh la: " & circleObj.Lineweight
End Sub

Ngoi nhng thuc tnh nh gii thiu trn, ngi lp trnh c th s dng cc thuc tnh
sau hiu chnh i tng:
Thuc tnh i tng p dng Gii thch
Center Arc, Circle. Kiu Variant (mng 3 phn t kiu double). To
tm ca i tng.
Radius Arc, Circle. Kiu Double. Bn knh ca cung trn hoc ng
trn.
Area Arc, Circle, LWPolyline, Kiu Double. Din tch vng khp kn ca i tng.
Polyline. l thuc tnh c-ghi i vi i tng Circle, l thuc
tnh ch c vi cc i tng khc.
Length Line Kiu Double. Thuc tnh ch c xc nh chiu di
ca on thng.
TextString MText, Text. Kiu String. Chui vn bn c hin th trong i
tng vn bn.

249
GIOTRNHTNGHOTHITKCUNG

Alignment Text. Hng s kiu acAlignment, xc nh ch canh


hng theo phng ng v phng ngang.
Rotation DimAligned, DimAngular, Kiu Double. Xc nh gc xoay ca i tng so vi
DimDiametric, phng ngang, c tnh bng Radian.
DimOrdinate, DimRadial,
DimRotated, MText, Text

5.4.3. Hiu chnh ng a tuyn


Nh c gii thiu phn trc, i vi ng a tuyn 2D, c hai loi i tng l:
LWPolyline v Polyline, cch thc hiu chnh hai i tng ny l tng t nhau. Tuy
nhin, cn phi ch mt im khc bit ln gia hai i tng ny: to ti mt nh ca
ng LWPolyline ch c 2 thnh phn X v Y, cn to ti mt nh ca ng Polyline
c c 3 thnh phn X, Y v Z nhng thnh phn th 3 s khng c s dng. y s tp
trung gii thiu v cch hiu chnh ng a tuyn dng LWPolyline.
Khi hiu chnh ng a tuyn, ngoi nhng cch thc c cp trn, ngi lp trnh
thng s dng cc phng thc v thuc tnh sau:
Thuc tnh Gii thch
Area Double, ch c. Din tch ca vng khp kn to bi ng a tuyn.
Closed Boolean. Bng TRUE: ng a tuyn s c khp kn, bng FALSE:
ng a tuyn s c m.
ConstantWidth Double. Chiu dy ca tt c cc on ca ng a tuyn.
Elevation Double. Cao ca ng a tuyn (to z ca ng a tuyn).
Coordinate(i) Variant (thc cht l mng 2 hoc 3 phn t kiu Double). To ca nh
th i ca ng a tuyn.
Coordinates Variant (mng kiu Double). To ca tt c cc nh ca ng a tuyn.

Phng thc Gii thch


SetWidth Thit lp chiu dy u v chiu dy cui cho on th i ca ng a tuyn.
GetWidth Ly chiu dy u v chiu dy cui cho on th i ca ng a tuyn.

Di y l mt s thao tc hiu chnh ng a tuyn thng dng


Thmmtnhvongatuyn
thm mt nh vo ng a tuyn, c th s dng phng thc AddVertex. C php ca
phng thc ny nh sau:

object.AddVertex Index, Point

Tham s Gii thch


Object L i tng LWPolyline.
Index Kiu Integer. Ch s ca nh cn thm vo ng a tuyn. nh u tin ca
ng a tuyn c nh s l 0. Gi tr Index nhp vo phi ln hn 0.
Point Kiu Variant (mng 2 phn t kiu Double) cha to ca im cn thm vo
ng a tuyn.

V d sau s minh ho cch thc chn mt nh vo ng a tuyn:

250
CHNGV:LPTRNHTRNAUTOCAD

Sub VD_AddVertex()
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
' Xc nh cc nh ca ng a tuyn
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
' To ng a tuyn trong khng gian m hnh
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
ZoomAll
MsgBox "Them dinh vao duong da tuyen.", , "Vi du AddVertex"

' nh ngha to nh mi
Dim newVertex(0 To 1) As Double
newVertex(0) = 1.5: newVertex(1) = 1
' Thm mt nh co ng a tuyn
plineObj.AddVertex 2, newVertex
plineObj.Update
MsgBox "Da them dinh vao duong da tuyen.", , "Vi du AddVertex"
End Sub

chocthayitonhcangatuyn
c hoc thay i to nh ca ng a tuyn, c th s dng thuc tnh
Coordinate(i) c trong i tng LWPolyline. Khi s dng thuc tnh ny, cn lu l ch
s cc nh ca ng a tuyn c nh s bt u t 0.
on m di y s to mt ng a tuyn, sau thay i to nh th 2 ca ng a
tuyn v hin th to mi ca im ny trong hp thng bo.
Sub VD_Coordinate()
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
' Xc nh cc nh ca ng a tuyn
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
' To ng a tuyn trong khng gian m hnh
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
ZoomAll
MsgBox "Thay doi toa do dinh 2.", , "Vi du Coordinate"

' Thay i to ca nh th 2
Dim newVertex(0 To 1) As Double
newVertex(0) = 2: newVertex(1) = 1
plineObj.Coordinate(2) = newVertex
plineObj.Update

' c li to ca nh th 2
Dim reaVertex As Variant
reaVertex = plineObj.Coordinate(2)
MsgBox "Toa do moi cua dinh 2: (" & _
reaVertex(0) & "," & reaVertex(1) & ")", , "Vi du Coordinate"
End Sub

251
GIOTRNHTNGHOTHITKCUNG

5.4.4. Hiu chnh vn bn n


i tng vn bn n (Text) c s dng rt nhiu trong cc bn v thit k, v vy, phn
ny ch tp trung gii thiu cch thc hiu chnh vn bn n thng dng
Thayinidungcavnbn
thay i ni dung ca vn bn n, s dng thuc tnh TextString c trong i tng
Text. V d sau s to mt i tng vn bn n, sau thay i ni dung ca vn bn n
.
Sub Example_TextString()
Dim textObj As AcadText
Dim text As String
Dim insPoint(0 To 2) As Double
Dim height As Double
' nh ngha i tng vn bn n
text = "Hello, World."
insPoint(0) = 2: insPoint(1) = 2: insPoint(2) = 0
height = 0.5

' To vn bn n trong khng gian m hnh


Set textObj = ThisDrawing.ModelSpace.AddText(text, insPoint, height)
ZoomAll

' Thay i gi tr ca thuc tnh TextString


MsgBox "Thuoc tinh TextString la: " & textObj.TextString, _
vbInformation, "Vi du TextString"
textObj.TextString = "Chao cac ban!"
textObj.Update
MsgBox " TextString duoc thay doi thanh: " & textObj.TextString, _
vbInformation, "Vi du TextString"
End Sub

Thayichcanhhng
thay i ch canh hng ca vn bn n, s dng thuc tnh Alignment. Gi tr ca
thuc tnh ny c th l mt trong nhng hng s acAlignment sau:
Hng s Hng s Hng s
acAlignmentLeft acAlignmentFit acAlignmentMiddleCenter
acAlignmentCenter acAlignmentTopLeft acAlignmentMiddleRight
acAlignmentRight acAlignmentTopCenter acAlignmentBottomLeft
acAlignmentAligned acAlignmentTopRight acAlignmentBottomCenter
acAlignmentMiddle acAlignmentMiddleLeft acAlignmentBottomRight

ngha ca cc hng s ny c minh ho trong hnh sau:

252
CHNGV:LPTRNHTRNAUTOCAD

Hnh V-14: Minh ho cc hng s acAlignment.

Khi thc hin thay i ch canh hng ca i tng, cn lu n to im c s


dng lm im canh hng. Vi tng ch canh hng khc nhau, to im ny c th l
to cha trong thuc tnh InsertionPoint hoc thuc tnh TextAlignmentPoint:
Vn bn canh hng bng acAlignmentLeft s s dng thuc tnh InsertionPoint nh v
tr ca vn bn;
Vn bn canh hng bng acAlignmentAligned hoc acAlignmentFit s s dng c hai
thuc tnh InsertionPoint v TextAlignmentPoint nh v tr ca vn bn;
Vn bn canh hng bng cc cch khc s s dng thuc tnh TextAlignmentPoint
nh v tr vn bn.
Chnh v vy, khi thay i ch canh hng cho vn bn, cn phi xc nh r ch canh
hng xc nh to im chn ca vn bn cho hp l.
V d sau s minh ho cch thay i ch canh hng cho vn bn. Trong v d c to mt
im trong khng gian m hnh dng to im tham chiu thy r hn s thay i v tr
ca vn bn khi thit lp li ch canh hng
Sub VD_Alignment()
Dim textObj As AcadText
Dim textString As String
Dim insPoint(0 To 2) As Double, aliPoint(0 To 2) As Double
Dim height As Double
Dim oldPDMODE As Integer
Dim pointObj As AcadPoint
' nh ngha i tng vn bn n
textString = "Hello, World."
insPoint(0) = 3: insPoint(1) = 3: insPoint(2) = 0
aliPoint(0) = 3: aliPoint(1) = 3: aliPoint(2) = 0
height = 0.5
' To i tng vn bn trong khng gian m hnh
Set textObj = ThisDrawing.ModelSpace.AddText _
(textString, insPoint, height)
' Lu kiu hin th im
oldPDMODE = ThisDrawing.GetVariable("PDMODE")

' To mt im hnh ch thp ti im TextAlighmentPoint,


' c th hnh dung r hn s thay i
Set pointObj = ThisDrawing.ModelSpace.AddPoint(aliPoint)
pointObj.Color = acRed
' Chuyn kiu hin th im thnh kiu ch thp
ThisDrawing.SetVariable "PDMODE", 2
ThisDrawing.Application.ZoomAll

253
GIOTRNHTNGHOTHITKCUNG

' Thay ch canh hng.


textObj.Alignment = acAlignmentRight
' Do ch canh hng mi l acAlignmentRight nn im tham chiu
' nh v vn bn l TextAlignmentPoint
' V vy, cn phi gn to cho im TextAlignmentPoint
textObj.TextAlignmentPoint = aliPoint
textObj.Update
MsgBox "Van ban dang o che do canh phai"

' Canh gia vn bn vi im tham chiu l im TextAlignmentPoint


textObj.Alignment = acAlignmentCenter
textObj.Update
MsgBox "Van ban dang o che do canh giua"

' Hon tr li kiu hin th im


ThisDrawing.SetVariable "PDMODE", oldPDMODE
End Sub

5.5. Lm vic vi lp (Layer)


Lp l cc tng trong sut m trn ta c th t chc v nhm nhiu loi i tng hnh hc
khc nhau ca bn v, Vic sp xp cc lp v i tng trn lp gip qun l thng tin ca
bn v d dng hn.
Qu trnh v lun c thc hin trn mt lp no . c th l lp mc nh hoc mt lp
t to ra. Mi lp u c mt mu v kiu ng tng ng. Chng hn, ngi lp trnh c th
to ra mt lp m trn ch v cc ng trc v gn cho n mu xanh vi kiu ng l
CENTER. Tip , c khi no mun v cc ng trc ta ch cn chuyn sang lp v bt
u v. Khng nht thit l phi thit lp kiu ng v mu sc mi khi mun v mt ng
trc. Ngoi ra, cng c th tt lp ng trc nu khng mun hin th hoc in cc i tng
ny. S dng lp l mt trong nhng u im ln khi v bng AutoCAD so vi khi s dng vi
giy bt thng thng.

Tng

in

Tt c cc lp

5.5.1. To lp mi
Ngi lp trnh c th to v t tn lp cho mt nhm cc i tng c ngha chung no
(chng hn nh lp cc bc tng hoc lp kch thc) v gn mu v kiu ng cho nhng
lp ny. Khi sp xp s lp, nn chn tn lp sao cho c ngha.
Khi bt u mt bn v mi, AutoCAD s to ra mt lp c bit c tn l 0. Lp 0 ny c
mc nh gn cho mu s 7 (mu trng hoc mu en tu thuc vo gi tr mu nn) v vi kiu
ng CONTINUOUS (lin tc). V ngi dng khng th xo lp 0 ny.
Ngi lp trnh c th to ra lp mi v gn thuc tnh mu sc cng nh kiu ng cho
nhng lp ny. Mi mt lp l mt phn t ca tp i tng Layers. V to mt lp mi,
c th s dng phng thc Add c trong tp i tng Layers. C php ca phng thc ny
nh sau:

254
CHNGV:LPTRNHTRNAUTOCAD

Set RetVal = object.Add(Name)

Tham s Gii thch


Object L tp i tng Layers.
Name Kiu String. Xc nh tn ca lp s c to trong bn v.
RetVal Kiu Layer. Bin tham chiu n i tng Layer va mi c to.

on m lnh sau s to lp mi tn New_Layer, gn mu cho lp v sau hin th cc


thng tin ca lp trong mt hp thng bo.
Sub VD_AddLayer()
Dim layerObj As AcadLayer
' Thm lp mi vo tp i tng Layers
Set layerObj = ThisDrawing.Layers.Add("New_Layer")
' Make the new layer the active layer for the drawing
layerObj.Color = acRed
' Display the status of the new layer
MsgBox layerObj.Name & " has been added." & vbCrLf & _
"LayerOn Status: " & layerObj.LayerOn & vbCrLf & _
"Freeze Status: " & layerObj.Freeze & vbCrLf & _
"Lock Status: " & layerObj.Lock & vbCrLf & _
"Color: " & layerObj.Color, , "Add Example"
End Sub

CH Khi to mt lp mi, nu tham s Name trng tn vi mt lp c th lp c


s khng b xo i v chng trnh s khng bo li. Khi , i tng RetVal s c t
ng tham chiu n lp c tn lp bng vi gi tr ca tham s Name.

5.5.2. Truy xut v thay i tn mt lp c


Khi cn thc hin mt tc ng no n mt lp, ngi lp trnh cn phi thc hin thao tc
truy cp n lp . lm c vic ny, ngi lp trnh phi thc hin thng qua tp i
tng Layers c trong i tng Document, v tt c cc lp u c cha trong tp i
tng ny. Cch thc truy xut n mt lp c tn l New_Layer c trong bn v nh sau:

Dim layerObj As AcadLayer


Set layerObj = ThisDrawing.Layers ("New_Layer")

Ngoi ra, ngi lp trnh cng c th s dng vng lp For Each duyt qua tt c cc lp
ang c trong bn v.
on m di y s duyt qua tt c cc lp trong tp i tng Layers, hin th tn ca cc
lp trong hp thng bo v nu lp no c tn l New_Layer s i tn thnh
Tuong_Canh:
Sub VD_DuyetLop()
Dim layerNames As String
Dim ent As AcadLayer
layerNames = ""
For Each ent In ThisDrawing.Layers
If ent.Name = "New_Layer" Then
ent.Name = "Tuong_Canh"
End If

255
GIOTRNHTNGHOTHITKCUNG

layerNames = layerNames + ent.Name + vbCrLf


Next
MsgBox "Danh sach cac lop: " + vbCrLf + layerNames
End Sub

5.5.3. Thit lp lp hin hnh


Qu trnh v lun c thc hin trn lp hin hnh. Sau khi chn lp thnh lp hin hnh, cc
i tng hnh hc mi c to ra u c t trn lp v tt c cc i tng ny u s
dng mu v kiu ng ca lp . Cn lu l: khng th thit lp thnh lp hin hnh cho
mt lp no nu nh lp ng cng (Freeze).
chn mt lp lm lp hin hnh, ta s dng thuc tnh ActiveLayer trong i tng
Document. on m di y s to mt lp mi v bin lp thnh lp hin hnh:

Dim newlayer As AcadLayer


Set newlayer = ThisDrawing.Layers.Add("LAYER1")
ThisDrawing.ActiveLayer = newlayer

5.5.4. Thit lp cc ch hin th ca lp


AutoCAD khng hin th hay in cc i tng c v trn cc lp n. Nu mun khng b
vng tm nhn khi lm vic chi tit trn mt lp hoc mt s lp c th, hoc nu khng mun
in mt s chi tit nht nh, chng hn nh ng chun hoc cc ng tm, ta c th tt hoc
lm ng cng cc lp khng cn thit .
Hnh thc iu khin tnh nhn thy ca mt lp ph thuc vo cch ta lm vic v kch thc
bn v, bao gm: bt/tt lp, kho/m kho lp, ng cng/tan lp.
Bt/Ttlp
Cc lp tt s vn c ti to li cng vi bn v nhng li khng c hin th hay in ra.
Nn tt cc lp i thay v lm ng cng nu thng xuyn chuyn i gia cc lp c nhn
thy v lp n. Bng cch tt cc lp, ta trnh phi ti to li bn v mi khi lm tan lp. Khi
bt mt lp c tt, AutoCAD s v li cc i tng trn lp .

Bt tt c cc lp Bt 2 lp Bt 1 lp

bt hay tt cc lp, ta s dng thuc tnh LayerOn. bt mt lp, gn gi tr TRUE v


tt mt lp th gn gi tr FALSE cho thuc tnh ny.
Trong v d sau, ta to mt lp mi, tip thm mt vng trn v tt lp i khng nhn
thy vng trn na.
Sub VD_LayerInvisble()
To ng trn
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)

256
CHNGV:LPTRNHTRNAUTOCAD

circleObj.Color = acByLayer
To lp "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
layerObj.Color = acRed
Gn ng trn vo lp "ABC"
circleObj.Layer = "ABC"
circleObj.Update
Tt lp "ABC"
layerObj.LayerOn = False
ThisDrawing.Regen acActiveViewport
End Sub

ngcng/Tanlp
Ngi lp trnh c th lm ng cng cc lp khng cn hin th trong thi gian di tng tc
hin th nhng thay i, ci thin qu trnh la chn i tng v gim thi gian ti to cho
nhng bn v phc tp. AutoCAD khng hin th, in hay ti to cc i tng trn cc lp ng
cng. Khi ta lm tan mt lp b ng cng, AutoCAD s phc hi v hin th cc i tng
trn lp .
lm ng cng hay lm tan mt lp b ng cng, ta s dng thuc tnh Freeze. lm
ng cng mt lp, ta gn gi tr TRUE v lm tan mt lp, ta gn gi tr FALSE cho thuc
tnh ny.
V d sau to mt lp mi c tn ABC v sau lm ng cng lp .
Sub VD_LayerFreeze()
To lp "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
ng cng lp "ABC"
layerObj.Freeze = True
End Sub

Kho/Mkholp
Khi mt lp b kho, cc i tng nm trn lp s khng th hiu chnh c na mc
d ngi dng vn nhn thy chng trn bn v. Bin php kho lp rt hu ch khi ngi dng
mun hiu chnh cc i tng trn mt lp no nhng ng thi cng mun quan st cc
i tng cc lp khc m khng lm nh hng n cc i tng lp ny. Ngi dng c
th bin mt lp b kho thnh lp hin hnh, thm i tng vo lp, mu v kiu ng
ca cc lp,... nhng khng th hiu chnh cc i tng c trong lp.
kho hay m cc lp, ta s dng thuc tnh Lock. Nu mun kho mt lp, ta gn gi tr
TRUE, m kha ta gn gi tr FALSE cho thuc tnh ny.
V d sau to mt lp c tn ABC v sau kho lp ny li.
Sub VD_LayerLock()
To lp "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
Kha lp "ABC"
layerObj.Lock = True
End Sub

5.5.5. Xo lp
257
GIOTRNHTNGHOTHITKCUNG

xa lp, s dng phng thc Delete ca chnh i tng Layer.


Lp c th c xa bt k lc no trong khi v. Tuy nhin, khng th xa lp hin hnh, lp
0, hoc lp ang c cha i tng, nu c tnh thc hin, chng trnh s pht sinh li.
GI xo cc i tng phi hnh hc (bao gm c i tng Layer) khng cn c
s dng trong bn v, c th s dng phng thc PurgeAll c trong i tng Document,
hoc s dng lnh Purge ti dng lnh ca AutoCAD.

on m sau s thc hin xo lp c tn l ABC.


Sub VD_LayerDelete()
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
layerObj.Delete
End Sub

5.6. Thao tc vi kiu ng Linetype


Kiu ng l s lp li mu gch ngang, chm, cc khong trng hoc cc k hiu khc.
Trong AutoCAD, cc kiu ng c nh ngha sn trong tp ACAD.LIN. Khi mun s dng
mt kiu ng no , cn phi thc hin ti kiu ng vo trong AutoCAD.
GI i vi AutoCAD 2002, thng thng, tp ACAD.LIN s c lu trong th mc
C:\Program Files\AutoCAD 2002\Support

5.6.1. Ti kiu ng vo AutoCAD


ti kiu ng vo AutoCAD, s dng phng thc Load c trong tp i tng
Linetypes. Nhng kiu ng c ti vo u nm trong tp i tng Linetypes. C
php ca phng thc Load nh sau:

object.Load LineTypeName, FileName

Tham s Gii thch


Object L tp i tng Linetypes
LineTypeName Kiu String. Tn ca kiu ng cn ti vo AutoCAD (tn ca kiu ng phi
c trong tp cha kiu ng).
FileName Kiu String. Tn tp cha kiu ng cn ti vo AutoCAD.

V d sau thc hin ti kiu ng CENTER t tp ACAD.LIN. Nu kiu ng ny c, th


mt thng bo s xut hin bo cho ngi dng c bit:
Sub VD_ LinetypeLoad()
Dim linetypeName As String
linetypeName = "CENTER"

' Ti kiu ng "CENTER" t tp acad.lin


On Error Resume Next ' by li
ThisDrawing.Linetypes.Load linetypeName, "acad.lin"

' Nu kiu ng tn ti, thng bo cho ngi dng


If Err.Description = "Duplicate record name" Then
MsgBox "Kieu duong ten '" & linetypeName & "' da duoc tai."
End If

258
CHNGV:LPTRNHTRNAUTOCAD

End Sub

5.6.2. Truy xut v i tn kiu ng


Khi cn thc hin mt mt tc ng no n kiu ng, ngi lp trnh cn phi thc hin
thao tc truy xut n kiu ng . lm c vic ny, ngi lp trnh phi thc hin
thng qua tp i tng Linetypes c trong i tng Document v tt c cc kiu ng u
c cha trong tp i tng ny. Cch thc truy xut n kiu ng c tn l CENTER
c trong bn v nh sau:

Dim linetypeObj As AcadLineType


Set linetypeObj = ThisDrawing.Linetypes("CENTER")

Ngi dng c th i tn mt kiu ng d nhn bit hn trong qu trnh s dng. Khi i


tn kiu ng, thc cht l ch i tn kiu ng nh ngha trong bn v. Tn kiu ng
trong tp .LIN vn gi nguyn. i tn kiu ng, ta s dng thuc tnh Name c trong
i tng Linetype.
CH Khng th i tn kiu ng BYLAYER, BYBLOCK, hoc CONTINUOUS.

V d sau thc hin vic truy xut n kiu ng tn l CENTER v i tn kiu ng thnh
Duong_Tam. Nu kiu ng ny cha c trong bn v, s thng bo li cho ngi dng:

Sub VD_LinetypeName()
Dim linetypeObj As AcadLineType
On Error Resume Next
' Thc hin truy xut n kiu ng
Set linetypeObj = ThisDrawing.Linetypes("CENTER")
If linetypeObj Is Nothing Then
' Thng bo li khi kiu ng khng tn ti
MsgBox "Kieu duong khong ton tai"
Else
' Thay i tn kiu ng
linetypeObj.Name = "Duong_Tam"
End If
End Sub

5.6.3. Thit lp kiu ng hin hnh


Khi mt kiu ng c kch hot lm kiu ng hin hnh, tt c cc i tng mi c
to s s dng kiu ng ny, tr khi i tng c kiu ng l BYLAYER hoc BYBLOCK.
kch hot mt kiu ng thnh kiu ng hin hnh, s dng thuc tnh
ActiveLinetype c trong i tng Document.
on m sau s kch hot kiu ng CENTER thnh kiu ng hin hnh ca bn v:
Sub VD_ActiveLinetype()
Dim linetypeObj As AcadLineType
Set linetypeObj = ThisDrawing.Linetypes("CENTER")
ThisDrawing.ActiveLinetype = linetypeObj
End Sub

5.6.4. Xo kiu ng c

259
GIOTRNHTNGHOTHITKCUNG

Khi khng cn s dng mt kiu ng no , c th xa kiu ng ra khi bn v. thc


hin thao tc ny, s dng phng thc Delete c trong i tng Linetype.
Tuy nhin khng th xa kiu ng BYLAYER, BYBLOCK, CONTINUOUS, kiu
ng hin hnh hoc kiu ng ang c mt i tng khc s dng.
GI xo cc i tng phi hnh hc (bao gm c i tng Linetype) khng cn
c s dng trong bn v, c th s dng phng thc PurgeAll c trong i tng
Document, hoc s dng lnh Purge ti dng lnh ca AutoCAD.

on m sau thc hin xo kiu ng CENTER khi bn v AutoCAD.


Sub VD_LinetypeDelete()
Dim linetypeObj As AcadLineType
Set linetypeObj = ThisDrawing.Linetypes("CENTER")
linetypeObj.Delete
End Sub

5.7. Thao tc vi ng kch thc Dimension


ng kch thc cho bit cc s o hnh hc ca i tng nh khong cch, gc gia cc i
tng v to XY ca mt im. AutoCAD cung cp 3 loi kch thc c bn: dng ng
(Kch thc di, kch thc hnh chiu,), dng gc (kch thc gc,) v dng tia (kch
thc bn knh, kch thc ng knh,).

Hnh V-15: Cc thnh phn c bn ca ng kch thc.

ng kch thc cng l i tng hnh hc nn vic to cc ng kch thc cng tng t
nh cc i tng hnh hc khc. Trc tin, xc nh ni cha i tng (ModelSpace hay
PaperSpace), sau s dng cc phng thc to ng kch thc vi dng AddDimXXX
(XXX l loi ng kch thc tng ng).
Kiu dng ca ng kch thc mi c to ra s c ly theo nh dng ca kiu ng
kch thc (DimensionStyle) hin hnh trn bn v. Sau khi c to ra, ngi dng c th
thay i kiu dng ca tng thnh phn trong ng kch thc thng qua cc thuc tnh tng
ng c trong i tng ng kch thc, hoc c th nh dng theo mt kiu ng kch
thc c thng qua thuc tnh StyleName.
5.7.1. Kiu ng kch thc DimensionStyle
Cc kiu ng kch thc trong mt bn v c qun l trong tp i tng DimStyles ca
i tng Document. Mi kiu ng knh thc, l mt phn t ca tp i tng
DimStyles, cha cc thit lp chi tit v kiu dng ca ng kch thc.

GI Trong AutoCAD, thit lp kiu ng kch thc, ngi dng c th truy cp


thng qua trnh n Format Dimension Styles

260
CHNGV:LPTRNHTRNAUTOCAD

Tokiungkchthc
S dng phng thc Add c trong tp i tng DimStyles to mi mt kiu ng kch
thc. C php ca phng thc ny nh sau:

Set RetVal = DimStyles.Add(Name)

Tham s M t
Name Kiu String. Tn ca kiu ng kch thc s c to.
RetVal i tng kiu DimStyle cha kiu ng kch thc va c to.

on m sau s to mt kiu ng kch thc mi c tn l NewDimStyle


Dim objDimStyle As AcadDimStyle
Set objDimStyle = ThisDrawing.DimStyles.Add("NewDimStyle")

nhdngkiungkchthc
Kiu ng kch thc mi c to s tha hng tt c cc thuc tnh ca kiu ng kch
thc hin hnh trong bn v. Tuy nhin, vic hiu chnh nh dng cho kiu ng kch thc
kh kh khn v i tng kiu ng kch thc khng c cc thuc tnh hay phng thc
phc v cho mc ch ny. thay i nh dng cho kiu ng kch thc, ngi dng phi
tin hnh gin tip thng qua vic thit lp cc bin h thng. Nh vy, vic to v hiu chnh
nh dng ca mt kiu ng kch thc c th c thc hin theo trnh t sau:
1. To i tng kiu ng kch thc s dng phng thc Add c trong tp i tng
SimStyles.

2. Thit lp cc bin h thng tng ng vi nh dng ca tng thnh phn trong kiu ng
kch thc cn thay i.
3. S dng phng thc CopyFrom c trong i tng kiu ng kch thc cp nht cc
nh dng thay i.
V d sau thc hin to mt kiu ng kch thc mi c tn NewDimStyle v sau thc
hin hiu chnh nh dng cho kiu ng kch thc .
Public Sub NewDimStyle()
Dim objDimStyle As AcadDimStyle
To kiu ng kch thc mi
Set objDimStyle = ThisDrawing.DimStyles.Add("NewDimStyle")

Thit lp cc bin h thng nh dng kiu ng kch thc


ThisDrawing.SetVariable "DIMCLRD", acRed
ThisDrawing.SetVariable "DIMCLRE", acBlue
ThisDrawing.SetVariable "DIMCLRT", acWhite
ThisDrawing.SetVariable "DIMLWD", acLnWtByLwDefault

Cp nht nhng thay i cho kiu ng kch thc


objDimStyle.CopyFrom ThisDrawing
End Sub

C rt nhiu bin h thng dng nh dng kiu ng kch thc v cc bin h thng ny
u c bt u bng tin t DIM. Ngi dng c th tham kho cc bin h thng ny trong
mc System Variable trong ti liu AutoCAD Command Reference c sn trong b ti liu

261
GIOTRNHTNGHOTHITKCUNG

tr gip ca AutoCAD. Di y l danh sch cc bin h thng nh dng kiu ng kch


thc hay c s dng:
Bin M t
DIMASZ Kiu Double. Xc nh kch thc mi tn ca ng kch thc.
DIMBLK Kiu String. Xc nh tn ca loi mi tn ca ng kch thc. Mt s gi tr
thng dng:
"." "_OBLIQUE" "_OPEN"
DIMTSZ Kiu Double. Xc nh kch thc ca mi tn trong trng hp bin h thng
DIMBLK c gn bng "_OBLIQUE". Nu gn bng s khc khng, kiu mi tn
s c t ng chuyn thnh _OBLIQUE; nu gn bng 0, kiu mi tn s l kiu
c xc nh trong bin h thng DIMBLK.
DIMCLRD Kiu Integer. Xc nh mu ca ng kch thc v mi tn.
DIMCLRE Kiu Integer. Xc nh mu ca ng ging.
DIMCLRT Kiu Integer. Xc nh mu ca ch kch thc.
DIMLWD Kiu Double. Xc nh b dy ca ng kch thc
DIMDEC Kiu Integer. Xc nh s ch s sau du phy trong phn ch kch thc.

Sdngkiungkchthc
Cc i tng ng kch thc mi c to ra s c ly nh dng ca kiu ng kch
thc hin hnh. Ngi dng c th thay i kiu ng kch thc hin hnh bng cch gn
gi tr ca thuc tnh ActiveDimStyle bng mt i tng kiu ng kch thc. Chng hn
nh khi mun thay i kiu ng kch thc hin hnh thnh kiu ng kch thc c
to v d trc, c th dng on m sau;
ThisDrawing.ActiveDimStyle = objDimStyle

Hoc
ThisDrawing.ActiveDimStyle = ThisDrawing.DimStyles("NewDimStyle")

Ngoi ra, sau khi ng kch thc c to ra, ngi dng c th thay i kiu ng kch
thc cho n bng cch gn gi tr cho thuc tnh StyleName c trong i tng ng kch
thc.
V d sau cho php ngi dng chn mt ng kch thc trn mn hnh v thay i kiu
ng kch thc ca i tng thnh kiu ng kch thc NewDimStyle c to
v d trc.
Sub VD_StyleName()
Dim dimEnt As AcadEntity
Dim P As Variant
Chn i tng ng kch thc trn mn hnh
ThisDrawing.Utility.GetEntity dimEnt, P, "Chon duong kich thuoc: "
Thay i kiu ng kch thc cho ng kch thc c chn
dimEnt.StyleName = "NewDimStyle"
End Sub

5.7.2. To ng kch thc

262
CHNGV:LPTRNHTRNAUTOCAD

to mi ng kch thc, ngi dng c th s dng cc phng thc AddDimXXX, vi


XXX l loi ng kch thc cn to. AutoCAD c nhiu loi ng kch thc khc nhau,
di y ch trnh by cch thc to cc loi ng kch thc thng dng.
ngkchthcdiDimAligned
S dng phng thc AddDimAligned to mi ng kch thc di. Vi ng kch
thc ny, ngi dng phi xc nh 3 im: 2 im gc v mt im xc nh v tr ch kch
thc. ng kch thc c to ra s nm song song vi on thng to bi 2 im gc.

Hnh V-16: ng kch thc di.

C php ca phng thc AddDimAligned nh sau:

Set RetVal = object.AddDimAligned(ExtLine1Point, ExtLine2Point,


TextPosition)

Tham s Gii thch


ExtLine1Point Kiu Variant (mng 3 phn t kiu Double). To im gc th nht.
ExtLine2Point Kiu Variant (mng 3 phn t kiu Double). To im gc th hai.
TextPosition Kiu Variant (mng 3 phn t kiu Double). To im ghi kch thc.
RetVal i tng kiu DimAligned, tham chiu n i tng va mi c to.

V d sau s to mt ng kch thc di vi to hai im gc l (5,5,0) v (10,8,0), cn


to im ghi kch thc l (6.5,8,0)
Sub VD_AddDimAligned()
Dim dimObj As AcadDimAligned
Dim P1(0 To 2) As Double
Dim P2 (0 To 2) As Double
Dim location(0 To 2) As Double

' nh ngha cc im trn ng kch thc


P1 (0) = 5#: P1 (1) = 5#: P1 (2) = 0#
P2 (0) = 10#: P2 (1) = 8#: P2 (2) = 0#
location(0) = 6.5: location(1) = 8#: location(2) = 0#

' To ng kch thc di trong khng gian m hnh


Set dimObj = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, location)
ZoomAll
End Sub

ngkchthchnhchiuDimRotated

263
GIOTRNHTNGHOTHITKCUNG

S dng phng thc AddDimRotated to mi ng kch thc hnh chiu. Vi ng


kch thc ny, ngi dng cn phi xc nh 2 im gc, 1 im nm trn ng kch thc
v gi tr gc xoay. Kch thc c ghi l hnh chiu ca on thng ni 2 im gc ln
phng to vi trc X mt gc bng gc xoay v i qua im nm trn ng kch thc. Hnh
di y minh ho cc thnh phn cn thit to ng kch thc hnh chiu:

Hnh V-17: ng kch thc hnh chiu.

C php ca phng thc AddDimRotated nh sau:

Set RetVal = object.AddDimRotated(XLine1Point, XLine2Point,


DimLineLocation, RotationAngle)

Tham s Gii thch


XLine1Point Kiu Variant (mng 3 phn t kiu Double). To im gc th nht.
XLine2Point Kiu Variant (mng 3 phn t kiu Double). To im gc th hai.
DimLineLocation Kiu Variant (mng 3 phn t kiu Double). To im nm trn ng kch
thc.
RotationAngle Kiu Double. Gc xoay so vi phng ngang ca phng chiu, tnh bng
Radian.
RetVal i tng kiu DimRotated, tham chiu n i tng va mi c to.

V d sau to mt ng kch thc hnh chiu vi to hai im gc l (0,5,0) v (5,5,0); to


im nm trn ng kch thc l (0,0,0); gc xoay phng chiu bng 120 .
Sub VD_AddDimRotated()
Dim dimObj As AcadDimRotated
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Dim location(0 To 2) As Double
Dim rotAngle As Double

' Xc nh cc gi tr cn thit
point1(0) = 0#: point1(1) = 5#: point1(2) = 0#
point2(0) = 5#: point2(1) = 5#: point2(2) = 0#
location(0) = 0#: location(1) = 0#: location(2) = 0#
rotAngle = 120
rotAngle = rotAngle * 3.141592 / 180# ' Chuyn sang Radian

' To ng kch thc hnh chiu trong khng gian m hnh


Set dimObj = ThisDrawing.ModelSpace.AddDimRotated _
(point1, point2, location, rotAngle)

264
CHNGV:LPTRNHTRNAUTOCAD

ZoomAll
End Sub

GI to ng kch thc hnh chiu theo phng ngang (Horizontal) th gn gc


xoay phng chiu bng 0, cn ng kch thc hnh chiu theo phng ng (Vertical)
th gn gc xoay phng chiu bng Pi/2.

ngkchthcgcDimAngular
S dng phng thc AddDimAngular to mi ng kch thc gc. Vi ng kch
thc ny, ngi dng cn phi xc nh tm, hai im gc v v tr t ch kch thc. Hnh
di y minh ho cc thnh phn cn thit to ng kch thc gc:

Hnh V-18: ng kch thc gc

C php phng thc AddDimAngular nh sau:

Set RetVal = object.AddDimAngular(AngleVertex, FirstEndPoint,


SecondEndPoint, TextPoint)

Tham s Gii thch


AngleVertex Kiu Variant (mng 3 phn t kiu Double). To tm ca ng kch thc.
FirstEndPoint Kiu Variant (mng 3 phn t kiu Double). To im gc th nht.
SecondEndPoint Kiu Variant (mng 3 phn t kiu Double). To im gc th hai.
TextPoint Kiu Variant (mng 3 phn t kiu Double). To im ghi kch thc.
RetVal i tng kiu DimAngular, tham chiu n i tng va mi c to.

V d sau to ng kch thc o gc trong khng gian m hnh vi to tm l (0,5,0); to


cc im gc l (1,7,0) v (1,3,0); to im ghi kch thc l (3,5,0):
Sub VD_AddDimAngular()
Dim dimObj As AcadDimAngular
Dim angVert(0 To 2) As Double
Dim FirstPoint(0 To 2) As Double
Dim SecondPoint(0 To 2) As Double
Dim TextPoint(0 To 2) As Double

' Xc nh cc thng s cn thit to ng kch thc


angVert(0) = 0#: angVert(1) = 5#: angVert(2) = 0#

265
GIOTRNHTNGHOTHITKCUNG

FirstPoint(0) = 1#: FirstPoint(1) = 7#: FirstPoint(2) = 0#


SecondPoint(0) = 1#: SecondPoint(1) = 3#: SecondPoint(2) = 0#
TextPoint(0) = 3#: TextPoint(1) = 5#: TextPoint(2) = 0#

' To ng kch thc o gc trong khng gian m hnh


Set dimObj = ThisDrawing.ModelSpace.AddDimAngular(angVert,
FirstPoint, SecondPoint, TextPoint)
ZoomAll
End Sub

ngkchthcbnknhDimRadial
S dng phng thc AddDimRadial to ng kch thc bn knh. to c ng
kch thc ny, cn phi xc nh c to tm, to im o (nm trn cung trn hoc
ng trn) v chiu di t im o n ch kch thc.

Hnh V-19: ng kch thc bn knh.

C php ca phng thc AddDimRadial nh sau:

Set RetVal = object.AddDimRadial(Center, ChordPoint, LeaderLength)

Tham s Gii thch


Center Kiu Variant (mng 3 phn t kiu Double). To tm ca ng kch thc.
ChordPoint Kiu Variant (mng 3 phn t kiu Double). To im o nm trn ng
trn hoc cung trn.
LeaderLength Kiu Double. Khong cch t ch ghi kch thc n im o.
RetVal i tng kiu DimRadial, tham chiu n i tng va mi c to.

V d sau to mt ng kch thc bn knh trong khng gian m hnh.


Sub VD_AddDimRadial()
Dim dimObj As AcadDimRadial
Dim center(0 To 2) As Double
Dim chordPoint(0 To 2) As Double
Dim leaderLen As Integer

' Xc nh cc thng s ca ng kch thc


center(0) = 0#: center(1) = 0#: center(2) = 0#
chordPoint(0) = 5#: chordPoint(1) = 5#: chordPoint(2) = 0#
leaderLen = 2

' To ng kch thc bn knh trong khng gian m hnh

266
CHNGV:LPTRNHTRNAUTOCAD

Set dimObj = ThisDrawing.ModelSpace.AddDimRadial _


(center, chordPoint, leaderLen)
ZoomAll
End Sub

ngkchthcngknhDimDiametric
S dng phng thc AddDimDiametric to mi ng kch thc ng knh. to
c ng kch thc ny, cn phi xc nh 2 im o nm trn ng trn v khong cch
t im o th nht n ch ghi kch thc.

Hnh V-20: ng kch thc ng knh.

C php ca phng thc AddDimDiametric nh sau:

Set RetVal = object.AddDimDiametric(ChordPoint, FarChordPoint,


LeaderLength)

Tham s Gii thch


ChordPoint Kiu Variant (mng 3 phn t kiu Double). To im o th nht nm trn
ng trn hoc cung trn.
FarChordPoint Kiu Variant (mng 3 phn t kiu Double). To im o th hai nm trn
ng trn hoc cung trn.
LeaderLength Kiu Double. Khong cch t ch ghi kch thc n im o th nht.
RetVal i tng kiu DimDiametric, tham chiu n i tng va mi c to.

V d sau minh ho cch thc s dng phng thc AddDimDiametric.


Sub VD_AddDimDiametric()
Dim dimObj As AcadDimDiametric
Dim chordPoint(0 To 2) As Double
Dim farChordPoint(0 To 2) As Double
Dim leaderLength As Double

' Xc nh cc thng s ca ng kch thc


chordPoint(0) = 5#: chordPoint(1) = 3#: chordPoint(2) = 0#
farChordPoint(0) = 5#: farChordPoint(1) = 5#: farChordPoint(2) = 0#
leaderLength = 2#

' To ng kch thc ng knh trong khng gian m hnh


Set dimObj = ThisDrawing.ModelSpace.AddDimDiametric _

267
GIOTRNHTNGHOTHITKCUNG

(chordPoint, farChordPoint, leaderLength)


ZoomAll
End Sub

5.7.3. nh dng ng kch thc


Ngoi cch nh dng ng kch thc bng kiu ng kch thc thng qua thuc tnh
StyleName nh trnh by mc S dng kiu ng kch thc trang 261, ngi dng
cn c th thay i cc nh dng ny thng qua cc thuc tnh tng ng ca i tng ng
kch thc. Di y l danh sch cc thuc tnh nh dng cho ng kch thc thng
dng:
Thuc tnh M t
AngleFormat Quy nh nh dng n v ca kch thc dng gc.
Arrowhead1Type, Quy nh dng u mi tn ca ng kch thc.
Arrowhead2Type
ArrowheadSize Quy nh c u mi tn ca ng kch thc.
CenterMarkSize Quy nh c ca du tm cho cc kch thc dng tia (ng kch thc
gc, bn knh, ng knh,...)
CenterType Quy nh dng ca du tm cho kch thc dng tia.
DecimalSeparator Quy nh k t dng lm du cch thp phn.
DimensionLineColor Quy nh mu cho ng ghi kch thc.
DimensionLineWeight Quy nh dy ca ng ghi kch thc.
ExtensionLineColor Quy nh mu ca cc ng ging.
ExtensionLineExtend Quy nh khong cch t ng ging n ng ghi kch thc.
ExtensionLineOffset Quy nh khong cch t ng ging n im gc ca ng ging.
ExtensionLineWeight Quy nh dy ca ng ging.
LinearScaleFactor Quy nh h s t l ton cc cho cc s o kch thc dng ng.
PrimaryUnitsPrecision Quy nh s ch s thp phn hin th trong n v chnh ca kch thc.
TextColor Quy nh mu ca ch kch thc.
TextHeight Quy nh cao ca ch kch thc.
TextRotation Quy nh gc nghing ca ch kch thc.

5.8. Thao tc vi d liu m rng XData


Ngoi cc thuc tnh c trong mi i tng, AutoCAD cn cho php to thm cc thuc tnh
mi lu tr cc thng tin do ngi lp trnh t nh ngha. Nhng thng tin ny s c
AutoCAD lu cng vi i tng trong bn v.
Mi i tng c th cha nhiu d liu m rng khc nhau. Thng thng, cc d liu m
rng c bt u bng tn ca ng dng, tip n l cc d liu khc. xc nh cc d liu
m rng, phi s dng hai mng c chiu di bng nhau, mt mng kiu Short xc nh kiu d
liu ca d liu m rng, mng th hai l mng kiu Variant cha cc d liu tng ng.
5.8.1. Gn d liu m rng
S dng phng thc SetXData gn cc d liu m rng cho i tng. C php ca
phng thc ny nh sau:

object.SetXData XDataType, Xdata

268
CHNGV:LPTRNHTRNAUTOCAD

Tham s Gii thch


Object L i tng s c gn d liu m rng.
XDataType Mng kiu Short, xc nh kiu d liu ca d liu m rng
Xdata Mng kiu Variant, xc nh gi tr ca d liu m rng

Khi gn gi tr cho mng XDataType v Xdata, cn phi lu :


C hai mng u l mng mt chiu v phi c kch thc bng nhau;
Gi tr phn t ca mng Xdata phi c kiu d liu tng ng vi kiu d liu c xc
nh trong mng XDataType.
Bng di y l danh sch cc gi tr thng dng trong mng XDataType v ngha tng
ng:
Gi tr ngha
1001 Chui cha tn ca ng dng. Tn ca ng dng l do ngi lp trnh t thit lp.
1000 Gi tr kiu String.
1003 Tn ca Layer.
1010 To 3D ca mt im
1040 Gi tr ca Double.
1071 Gi tr kiu Interger.

V d sau s to mt ng thng trong khng gian m hnh, sau tin hnh gn cc d liu
m rng cho ng thng .
Sub VD_SetXdata()
' To ng thng
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll

' Khi to cc gi tr cho d liu m rng.


' Ch l d liu u tin phi l tn ca ng dng
' v m tng ng l 1001
Dim DataType(0 To 5) As Integer Mng cha kiu d liu
Dim Data(0 To 5) As Variant Mng cha d liu
Dim reals3(0 To 2) As Double

DataType(0) = 1001: Data(0) = "Test_Application"


DataType(1) = 1000: Data(1) = "This is a test for xdata"
DataType(2) = 1003: Data(2) = "0" ' Tn lp
DataType(3) = 1040: Data(3) = 1.23479137438413E+40 ' Kiu Double
DataType(4) = 1071: Data(4) = 32767 ' Kiu Integer
reals3(0) = -2.95: reals3(1) = 100: reals3(2) = -20
DataType(5) = 1010: Data(5) = reals3 ' To im

' Gn d liu m rng vo ng thng


lineObj.SetXData DataType, Data

End Sub

269
GIOTRNHTNGHOTHITKCUNG

5.8.2. c d liu m rng


S dng phng thc GetXData c d liu m rng c trong mt i tng. C php ca
phng thc ny nh sau:

object.GetXData AppName, XDataType, XdataValue

Tham s Gii thch


Object L i tng c cha d liu m rng.
AppName L chui cha tn ca ng dng (nh c gn khi s dng phng thc
SetXData). Nu tham s AppName l mt chui rng, phng thc ny s tr v
tt c cc d liu m rng c trong i tng. Nu c truyn gi tr vo tham s
AppName, phng thc ny ch tr v d liu m rng c to bi ng dng c
tn nh xc nh trong tham s AppName.
XDataType Mng kiu Short, xc nh kiu d liu ca d liu m rng c tr v.
Xdata Mng kiu Variant, xc nh gi tr ca d liu m rng c tr v.

V d sau cho php ngi dng chn mt i tng hnh hc trn bn v, sau s hin th tt
c cc d liu m rng ca i tng c chn (nu c)
Sub VD_GetXData()
Dim sset As AcadSelectionSet

On Error Resume Next


Set sset = ThisDrawing.SelectionSets("MySSet")
sset.Delete
Set sset = ThisDrawing.SelectionSets.Add("MySSet")

ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong can xem Xdata: "
sset.SelectOnScreen

Dim ent As AcadEntity


Dim XDataType As Variant
Dim XData As Variant
Dim i As Integer
For Each ent In sset
ent.GetXData "", XDataType, XData
If Not IsEmpty(XDataType) Then
ThisDrawing.Utility.Prompt (vbCrLf & ent.ObjectName)
For i = LBound(XDataType) To UBound(XDataType)
ThisDrawing.Utility.Prompt vbCrLf & XDataType(i)
ThisDrawing.Utility.Prompt " : " & XData(i)
Next i
Else
ThisDrawing.Utility.Prompt vbCrLf & "Doi tuong khong chua XData"
End If
Next ent
End Sub

6. Giao din ngi dng


Qu trnh nhp d liu v tng tc vi ngi dng c h tr theo nhiu cch khc nhau
trong AutoCAD:

270
CHNGV:LPTRNHTRNAUTOCAD

Thng qua vic nhp liu ti dng lnh: ngi dng c th nhp vo mt chui, mt s,
hoc thc hin mt chn la no ... Cc thao tc nhp liu ti dng lnh tham kho
thm mc Nhp d liu ngi dng t dng lnh ca AutoCAD trang 207
Thng qua vic tng tc trc tip trn bn v: ngi dng thng s thc hin la chn
i tng, xc nh to im, Cc thao tc tng tc trc tip trn bn v tham kho
thm mc Lm vic vi i tng SelectionSet trang 227 hoc mc Nhp d liu
ngi dng t dng lnh ca AutoCAD trang 207.
Thng qua hp thoi tu bin Userform: qu trnh nhp d liu c thc hin hu ht
trn Userform, cc chc nng ca chng trnh s c trnh by trn UserForm thng
qua cc nt bm, Cc thng tin v cch thc lp trnh trn UserForm, tham kho thm
mc Lm vic vi UserForm v cc thnh phn iu khin trang 60 v mc Hp thoi
tu bin UserForm trang 169.
Thng qua h thng thanh trnh n v thanh cng c: ngi dng c th thc hin mt
chc nng no ca chng trnh thng qua vic chn mt mc trnh n tng ng
hoc chn mt nt lnh trn thanh cng c. Phn ny s tp trung gii thiu cch thc to
trnh n trong AutoCAD.
6.1. Thao tc vi thanh trnh n
6.1.1. Cu trc ca h thng thanh trnh n
H thng trnh n trong AutoCAD c t chc theo cu trc phn cp. M hnh i tng
ca h thng thanh trnh n trong AutoCAD nh sau:

Hnh V-21: M hnh i tng ca h thng thanh trnh n trong AutoCAD

MenuBar l thanh trnh n nm ngay pha di thanh tiu ca ca s chng trnh


AutoCAD. Trong MenuBar c cha cc PopupMenu, l mt trnh n x xung khi
ngi dng kch chut vo, chng hn nh File, Edit, View,
MenuGroups l tp i tng cha cc MenuGroup, l nhm cc trnh n trong
AutoCAD. Thng thng, mi chng trnh u to cho mnh mt MenuGroup ring.
Trong mi MenuGroup s c cha cc PopupMenu. Tp hp tt c cc PopupMenu trong
tt c cc MenuGroup s hnh thnh nn MenuBar trn mn hnh ca chng trnh
AutoCAD. Tuy nhin, khng phi tt c cc PopupMenu trong MenuGroup u c
hin th trn MenuBar, ch khi no ngi lp trnh hoc ngi dng thm vo MenuBar,
MenuPopup mi c hin th trn MenuBar.
PopupMenuItem l thnh phn cui cng trong cu trc phn cp i tng ca thanh
trnh n. Mi PopupMenuItem chnh l mt lnh trong h thng thanh trnh n. Khi

271
GIOTRNHTNGHOTHITKCUNG

ngi dng kch chut vo PopupMenuItem th AutoCAD s thc hin mt chc nng
no ca chng trnh.
Cc thnh phn ca h thng trnh n c minh ho hnh sau:

Hnh V-22: Cc i tng trong h thng trnh n ca AutoCAD

6.1.2. To trnh n
Ngi lp trnh c th d dng thm v hiu chnh h thng trnh n trong Excel thng qua
cc on m lnh bng VBA theo cc bc sau:
1. Phc tho trnh n tu bin cn to v cc chc nng tng ng.
2. Vit m lnh cho tng PopupMenuItem. Mi on m lnh ny c cha trong mt
Macro.
3. Tham chiu n MenuGroup, ni cn to trnh n tu bin.
4. To PopupMenu v PopupMenuItem.
5. Gn cc on m lnh tng ng to bc 2 cho tng PopupMenuItem.
Di y s ln lt trnh by cc bc to trnh n tu bin trong AutoCAD
Vdtotrnhn
1. Phc tho cu trc trnh n nh sau:

2. Vit m lnh cho tng PopupMenuItem

272
CHNGV:LPTRNHTRNAUTOCAD

'M LNH CHO LUA CHON 1


Sub Macro1()
MsgBox "Ban da chon Lua chon 1"
End Sub
'M LNH CHO LUA CHON 2
Sub Macro2()
MsgBox "Ban da chon Lua chon 2"
End Sub
'M LNH CHO LUA CHON 3
Sub Macro3()
MsgBox "Ban da chon Lua chon 3"
End Sub

3. Vit m lnh : tham chiu n MenuGroup, to trnh n tu bin v gn m lnh tng


ng
Sub VD_TaoMenu()
' nh ngha bin v tham chiu n MenuGroup u tin
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)

' To trnh n (To PopupMenu)


Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("Trinh don tuy bien")

' Khai bo bin cho PopupMenuItem


Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String

' To PopupMenuItem v gn m lnh tng ng


openMacro = "-vbarun Macro1 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 1", openMacro)

openMacro = "-vbarun Macro2 "


Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 2", openMacro)

openMacro = "-vbarun Macro3 "


Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 3", openMacro)

' Hin th trnh n va to trn thanh trnh n (MenuBar)


currMenuGroup.Menus.InsertMenuInMenuBar "Trinh don tuy bien", ""
End Sub

Cc on m c to trong bc v bc phi c lu trong cng mt m-un chun


ca d n VBA.
Tuy nhin, khi to c trnh n, nu thc thi Macro bc mt ln na th chng
trnh s bo li. Nguyn nhn l do Trinh don tuy bien c to ln thc thi Macro
trc. Chnh v vy, khc phc li ny, cn phi thay on m lnh bc bng on
m lnh sau:
Sub VD_TaoMenu2()
' nh ngha bin v tham chiu n MenuGroup u tin
Dim currMenuGroup As AcadMenuGroup
273
GIOTRNHTNGHOTHITKCUNG

Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)

' To trnh n (To PopupMenu)


' v x l tnh hung khi trnh n c to
Dim newMenu As AcadPopupMenu
On Error Resume Next
Set newMenu = currMenuGroup.Menus.Add("Trinh don tuy bien")
If Err <> 0 Then
Set newMenu = currMenuGroup.Menus("Trinh don tuy bien")
Dim menuEnt As AcadPopupMenuItem
For Each menuEnt In newMenu
menuEnt.Delete
Next
End If

' Khai bo bin cho PopupMenuItem


Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String

' To PopupMenuItem v gn m lnh tng ng


openMacro = "-vbarun Macro1 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 1", openMacro)

openMacro = "-vbarun Macro2 "


Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 2", openMacro)

openMacro = "-vbarun Macro3 "


Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 3", openMacro)

' Hin th trnh n va to trn thanh trnh n (MenuBar)


currMenuGroup.Menus.InsertMenuInMenuBar "Trinh don tuy bien", ""
End Sub

6.1.3. Xo thanh trnh n


Cc trnh n tu bin trong AutoCAD s c t ng xo i khi khi ng li AutoCAD.
Tuy nhin, khi cn thit, ngi lp trnh c th g b cc trnh n tu bin ra khi AutoCAD
bng m lnh VBA.
Cn lu l khng th xo hn trnh n tu bin ra khi AutoCAD bng m lnh VBA m ch
c th g b trnh n tu bin ra khi thanh trnh n ca AutoCAD. Ch cn khi ng li
AutoCAD, trnh n tu bin s c t ng xo khi AutoCAD.
g b trnh n tu bin c tn l Trinh don tuy bien c to v d trc, s
dng on m sau:
Sub VD_XoaMenu()
Dim pMenu As AcadPopupMenu
On Error Resume Next
Set pMenu = Application.MenuBar("Trinh don tuy bien")

' Kim tra xem nu trnh n tu bin c th s


' g b khi thanh trnh n ca AutoCAD
If Not (pMenu Is Nothing) Then
pMenu.RemoveFromMenuBar

274
CHNGV:LPTRNHTRNAUTOCAD

End If
End Sub

275
GIOTRNHTNGHOTHITKCUNG

PHN III: TI LIU THAM KHO


1. John Walkenbach Excel 2002 Power Programming with VBA M&T Books 2001 .
2. Steve Saunders, Jeff Webb Programming Excel with VBA and .NET O'Reilly 2006.
3. Richard Shepherd Excel VBA Macro Programming McGraw-Hill 2004.
4. Autodesk (Ngi dch:L Qunh Mai, Trng Thanh Hong, Hong Thu Linh)
Pht trin AutoCAD bng ActiveX & VBA 2006.
5. Joe Sutphin AutoCAD 2006 VBA: A Programmers Reference Apress 2005.

276

You might also like