Professional Documents
Culture Documents
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
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
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
2
MU
3
GIOTRNHTNGHOTHITKCUNG
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
6
MU
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
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
10
MU
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
12
CHNGI:KHINIM
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
16
CHNGI:KHINIM
17
GIOTRNHTNGHOTHITKCUNG
18
CHNGII:TNGQUANVVBA
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
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
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
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.
23
GIOTRNHTNGHOTHITKCUNG
Hp thoi Macro
Kt qu trn Excel
24
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
26
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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.
27
GIOTRNHTNGHOTHITKCUNG
Cc t kha l nhng t c dng ring cho nhng chc nng khc nhau trong ngn ng lp
trnh, v d t kha Private hn ch phm vi s dng ca bin hay chng trnh con. Do
vic t tn (bin, chng trnh con) bt buc phi khc so vi cc t kha, nu khng s pht
sinh li c php.
5. Cc kiu d liu c bn
Khi mt chng trnh vn hnh, n s tc ng v lm thay i gi tr ca mt vi thng s
trong chng trnh, v d trong chng trnh gii phng trnh bc 2, cc thnh phn trong
phng trnh: y=ax2+bx+c s cn thay i gi tr khi chng trnh hot ng. Nh vy gi tr
ca cc thng s ny c nhu cu thay i trong nhng ln hot ng khc nhau ca chng
trnh cng nh trong mt ln hot ng no , v d gi tr ca y s thay i khi ta thay i gi
tr ca a trong phng trnh trn. Chnh bi nhu cu thay i gi tr ny m ngi ta a khi
nim bin m t s ng ca nhng thng s ny. Vi mi bin, gi tr ca n lun
c quy nh l phi thuc mt kiu d liu no , v d gi tr ca y trong phng trnh trn
phi l kiu s thc. Do ngn ng lp trnh c thit k thc hin nhiu nhim v khc
nhau cho nn trong ngn ng lp trnh no cng lun c nhiu kiu d liu thch ng vi
nhu cu a dng ca vic lp trnh.
Kiu d liu l loi gi tr m mt bin c th nhn, ni cch khc, khi mt bin c khai bo
th ta buc phi gn cho n mt kiu d liu nht nh. V tng th c th chia cc kiu d liu
trong VB ra lm hai loi:
28
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
31
GIOTRNHTNGHOTHITKCUNG
Hnh III-9: Thng tin v cc hm trong th vin lp trnh ca VBA c hin th trong
Object Browser
V d trn s hin th thng tin v thi gian (ngy thng nm) trong ca s Immediate ca
VBA IDE.
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
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
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
34
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Hnh III-10: Phm vi s dng ca bin c khai bo trong chng trnh con
35
GIOTRNHTNGHOTHITKCUNG
36
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
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:
Hay:
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.
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
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.
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.
<Tn_bin>.<Tn_thuc_tnh>
<Tn_bin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>
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
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.
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
Kt qu nh sau:
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:
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
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:
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
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:
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:
Kt qu nh sau:
47
GIOTRNHTNGHOTHITKCUNG
Kt qu nh sau:
Kt qu nh sau:
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)
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:
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.
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:
Do While <iu_kin>
[Khi_lnh]
Loop
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
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>
[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).
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:
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:
V d: to mt chng trnh con dng th tc c tnh nng nh phn trn c th vit m lnh
nh sau:
Sub Dien_Tich(Rong as Double, Dai as Double, Dt as Double)
Dt=Rong*Dai
End Sub
Trong 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:
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.
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
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
55
GIOTRNHTNGHOTHITKCUNG
Mang_tamthoi(j) = Tg
End If
Next
Next
Mang_tangdan = Mang_tamthoi
Erase Mang_tamthoi ' Huy mang tam thoi
End Function
Kt qu nh sau:
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
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
57
GIOTRNHTNGHOTHITKCUNG
<Tn_m-un>.<Tn_hm>(<danh_sch_tham_s>)
58
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
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 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.
62
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
63
GIOTRNHTNGHOTHITKCUNG
Hnh III-20: B sung thm iu khin cho hp cng c (Toolbox) ca VBA IDE.
64
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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.
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_phng_thc> <(tham_s_ca_phng_thc)>
<Tn_UserForm>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>
66
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
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:
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
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
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.
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
TextBox
Name: txtSo
CheckBox
Name: chkChonsochan
Command Button
Name: cmdTinh
Label
Name: lbKetqua
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
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
73
GIOTRNHTNGHOTHITKCUNG
UserForm: usfMc
ListBox: lstDsMc
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
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.
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.
76
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Dng hm
Title
Prompt
Buttons
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.
77
GIOTRNHTNGHOTHITKCUNG
78
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
80
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
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
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:
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
84
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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:
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
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>
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
87
GIOTRNHTNGHOTHITKCUNG
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")
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
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
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
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:
91
GIOTRNHTNGHOTHITKCUNG
Hnh III-27: VBA IDE nh du dng lnh lm pht sinh li thc thi.
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)
V tr con tr bin
dch hin ti
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:
93
GIOTRNHTNGHOTHITKCUNG
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.
94
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
95
GIOTRNHTNGHOTHITKCUNG
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:
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)]
98
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
99
GIOTRNHTNGHOTHITKCUNG
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
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 .
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
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).
104
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
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.
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.
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
108
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
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
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
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
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
112
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Hnh IV-9: Hm tr v li
113
GIOTRNHTNGHOTHITKCUNG
114
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
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.
116
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
119
GIOTRNHTNGHOTHITKCUNG
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
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
120
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
121
GIOTRNHTNGHOTHITKCUNG
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"
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
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
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
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])
124
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
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
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
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
128
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
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
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"
131
GIOTRNHTNGHOTHITKCUNG
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
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.
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"
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
136
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Xt on m th 3:
Worksheets("Sheet1").Cells.Clear
137
GIOTRNHTNGHOTHITKCUNG
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
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
139
GIOTRNHTNGHOTHITKCUNG
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:
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:
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.
141
GIOTRNHTNGHOTHITKCUNG
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
144
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
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
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.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
148
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
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")
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
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
151
GIOTRNHTNGHOTHITKCUNG
Worksheets("Sheet2").Name = "MySheet"
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
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
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
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.
156
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
157
GIOTRNHTNGHOTHITKCUNG
158
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
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
161
GIOTRNHTNGHOTHITKCUNG
162
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
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 (*.*),*.*
164
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,Button
Text)
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
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.
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
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
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
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
170
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
171
GIOTRNHTNGHOTHITKCUNG
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)
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.
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.
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):
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.
175
GIOTRNHTNGHOTHITKCUNG
176
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
S KIN Workbook_BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Gi th tc thc hin vic xo trnh n
XoaMenu
End Sub
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
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
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.
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
Hnh V-1: Thnh phn AutoCAD Objects v m-un ThisDrawing ca d n VBA trong
AutoCAD
185
GIOTRNHTNGHOTHITKCUNG
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
187
GIOTRNHTNGHOTHITKCUNG
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)
189
GIOTRNHTNGHOTHITKCUNG
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
191
GIOTRNHTNGHOTHITKCUNG
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
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
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")
)
193
GIOTRNHTNGHOTHITKCUNG
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
Plot Text
Utility
MenuGroups
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>
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.
196
CHNGV:LPTRNHTRNAUTOCAD
197
GIOTRNHTNGHOTHITKCUNG
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
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
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.
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:
200
CHNGV:LPTRNHTRNAUTOCAD
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:
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]
201
GIOTRNHTNGHOTHITKCUNG
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])
202
CHNGV:LPTRNHTRNAUTOCAD
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
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
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:
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:
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
Utility.Prompt Message
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:
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:
208
CHNGV:LPTRNHTRNAUTOCAD
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])
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.
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:
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()
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:
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:
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.
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:
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
RetVal = object.GetVariable(Name)
214
CHNGV:LPTRNHTRNAUTOCAD
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.
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:
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
TenBien = "MIRRTEXT"
intData = 0
GiaTri = intData ' Kiu Integer
ThisDrawing.SetVariable TenBien, GiaTri
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
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
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
218
CHNGV:LPTRNHTRNAUTOCAD
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:
219
GIOTRNHTNGHOTHITKCUNG
ToitngPoint
S dng phng thc AddPoint thm mt im ti v tr mong mun. C php nh sau:
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
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:
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:
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:
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:
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:
225
GIOTRNHTNGHOTHITKCUNG
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:
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:
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
227
GIOTRNHTNGHOTHITKCUNG
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.
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
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:
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
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
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:
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
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:
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.
232
CHNGV:LPTRNHTRNAUTOCAD
' 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:
233
GIOTRNHTNGHOTHITKCUNG
234
CHNGV:LPTRNHTRNAUTOCAD
Next ent
End Sub
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"
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"
236
CHNGV:LPTRNHTRNAUTOCAD
object.RemoveItems Objects
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
object.Erase
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
238
CHNGV:LPTRNHTRNAUTOCAD
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)
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
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:
240
CHNGV:LPTRNHTRNAUTOCAD
' Ph v ng a tuyn
MsgBox "Ph v ng a tuyn."
Dim explodedObjects As Variant
explodedObjects = plineObj.Explode
DichuynitngPhngthcMove
S dng phng thc Move tnh tin i tng trong khng gian ba chiu. C php ca
phng thc ny nh sau:
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
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:
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
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:
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
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:
244
CHNGV:LPTRNHTRNAUTOCAD
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:
itngvivtr
vkchthcmi
itngvivtrv
kchthcbanu
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
object.Color
246
CHNGV:LPTRNHTRNAUTOCAD
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
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
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
ThuctnhLineweightChiudyntin
Thuc tnh Lineweight dng thit lp chiu dy nt in cho cc i tng hnh hc v i
tng Layer.
object.Lineweight
248
CHNGV:LPTRNHTRNAUTOCAD
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
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
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
252
CHNGV:LPTRNHTRNAUTOCAD
253
GIOTRNHTNGHOTHITKCUNG
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
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
Bt tt c cc lp Bt 2 lp Bt 1 lp
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
258
CHNGV:LPTRNHTRNAUTOCAD
End Sub
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.4. Xo kiu ng c
259
GIOTRNHTNGHOTHITKCUNG
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.
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:
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.
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")
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
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
262
CHNGV:LPTRNHTRNAUTOCAD
ngkchthchnhchiuDimRotated
263
GIOTRNHTNGHOTHITKCUNG
' 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
264
CHNGV:LPTRNHTRNAUTOCAD
ZoomAll
End Sub
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:
265
GIOTRNHTNGHOTHITKCUNG
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.
266
CHNGV:LPTRNHTRNAUTOCAD
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.
267
GIOTRNHTNGHOTHITKCUNG
268
CHNGV:LPTRNHTRNAUTOCAD
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
End Sub
269
GIOTRNHTNGHOTHITKCUNG
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
ThisDrawing.Utility.Prompt vbCrLf & "Chon doi tuong can xem Xdata: "
sset.SelectOnScreen
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:
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:
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:
272
CHNGV:LPTRNHTRNAUTOCAD
274
CHNGV:LPTRNHTRNAUTOCAD
End If
End Sub
275
GIOTRNHTNGHOTHITKCUNG
276