Professional Documents
Culture Documents
Giao Trinh TDHTKCD - Tong Hop
Giao Trinh TDHTKCD - Tong Hop
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.
ft
ra
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.
ft
ra
D
PHN I: M U .................................................................................. 1
1.Tngquanvthitkvtnghathitkcngtrnhgiaothng..............................1
2.intvccphnmmdngchothitkcngtrnhgiaothng..................................3
3.Lachnphnmmdngchothitkcngtrnhgiaothng..........................................4
4.Chuynbithaphnmm....................................................................................................6
5.Ktchng..............................................................................................................................11
ft
ra
1.Nhngquinhvcphp..................................................................................................25
2.Cctrgipvcphptrongqutrnhvitmlnh......................................................25
3.Tnhnngginhvthonthinmlnh.....................................................................26
4.TkhotrongVB...................................................................................................................27
5.Cckiudliucbn..........................................................................................................28
5.1. Kiu logic (boolean) ...........................................................................................................29
5.2. Kiu s nguyn ...................................................................................................................29
5.3. Kiu s thc........................................................................................................................29
5.4. Kiu mng (array) ..............................................................................................................29
5.5. Kiu chui (String) .............................................................................................................31
5.6. Kiu thi gian (Date) ..........................................................................................................32
5.7. Kiu Variant .......................................................................................................................32
5.8. Kiu t nh ngha (user-defined type)...............................................................................33
5.9. Kiu lp (Class) ..................................................................................................................34
6.KhaibobintrongVB..........................................................................................................35
6.1. Khai bo hng s ................................................................................................................38
6.2. Khai bo bin......................................................................................................................38
6.3. Khai bo kiu t nh ngha ...............................................................................................39
6.4. Khai bo mng tnh ............................................................................................................39
6.5. Khai bo mng ng...........................................................................................................39
6.6. Khai bo, to v lm vic vi bin i tng .....................................................................40
7.Cctontvhmthngdng...........................................................................................40
7.1. Cc ton t..........................................................................................................................40
7.2. Cc hm ton hc ...............................................................................................................41
7.3. Cc hm chuyn i d liu ...............................................................................................42
7.4. Cc hm x l chui ...........................................................................................................43
8.Cccutrciukhin.........................................................................................................44
8.1. Cu trc iu kin...............................................................................................................44
8.2. Cu trc la chn ...............................................................................................................46
8.3. Vng lp xc nh...............................................................................................................47
ft
ra
ii
ft
ra
iii
8.Giaodinngidng..........................................................................................................157
8.1. iu khin nhng trong Worksheet ................................................................................. 158
8.1.1. iu khin Spin Button ............................................................................................ 159
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
ft
ra
1.TngquanvAutoCAD.....................................................................................................179
1.1. Kh nng ca AutoCAD .................................................................................................. 179
1.2. Giao din ca AutoCAD .................................................................................................. 180
1.3. Kh nng m rng ca AutoCAD .................................................................................... 181
2.QunldnVBAtrongAutoCAD................................................................................182
2.1. D n VBA trong AutoCAD............................................................................................ 182
2.2. Trnh qun l d n VBA................................................................................................. 183
2.2.1. To mi, M v Lu d n VBA ............................................................................. 184
2.2.2. Nhng v tch d n VBA ....................................................................................... 185
2.3. Qun l d n VBA t dng lnh .................................................................................... 186
3.Macro.....................................................................................................................................186
3.1. Khi nim Macro trong AutoCAD ................................................................................... 186
3.2. To mi v Hiu chnh Macro ......................................................................................... 187
3.3. Thc thi Macro ................................................................................................................. 188
3.4. nh ngha lnh mi bng AutoLISP ............................................................................... 189
3.4.1. To d n mi .......................................................................................................... 189
3.4.2. To v th nghim Macro HelloWorld .................................................................... 190
3.4.3. To lnh mi bng AutoLISP .................................................................................. 191
4.HthngitngtrongAutoCAD................................................................................191
4.1. M hnh i tng trong AutoCAD ................................................................................. 191
4.2. Mt s i tng chnh trong AutoCAD ......................................................................... 193
4.2.1. i tng Application ............................................................................................. 193
4.2.2. i tng Document................................................................................................ 194
4.2.3. Tp i tng ........................................................................................................... 196
4.2.4. i tng phi hnh hc ............................................................................................ 196
4.2.5. i tng hnh hc .................................................................................................. 197
5.CcthaotccbntrongAutoCAD.................................................................................198
5.1. iu khin AutoCAD....................................................................................................... 198
5.1.1. To mi, M, Lu v ng bn v.......................................................................... 198
5.1.2. Khi ng v thot khi chng trnh AutoCAD .................................................... 201
5.1.3. S dng cc lnh sn c ca AutoCAD ................................................................... 203
5.1.4. Thu phng mn hnh bn v (zoom) ........................................................................ 203
5.1.5. Nhp d liu ngi dng t dng lnh ca AutoCAD ............................................ 205
iv
ft
ra
ft
ra
D
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.
ft
ra
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...
GIOTRNHTNGHOTHITKCUNG
ft
ra
D
Hnh I-1: T ng ha thit k hnh hc ng t vi Civil 3D 2008
MU
ft
ra
GIOTRNHTNGHOTHITKCUNG
Trong lnh vc phn tch kt cu: MIDAS/Civil, RM, SAP, ANSYS, LUSAS,
ft
ra
ABAQUS.
Do cng trnh giao thng lun ph thuc vo rt nhiu yu t xung quanh n, cho nn qu trnh
thit k lun gp phi nhng bi ton ring, c bit v khng th khi qut c. Nhng bi
ton ny hu nh khng c li gii tng qut, v cng bi iu ny khin cho khng c mt
phn mm chuyn dng no c th gii quyt c mi vn , nht l trong thit k ng
t. Bn cnh , do c s khc nhau trong cch trnh by v th hin bn v, nn thng thng
cc phn mm chuyn dng ch c th p ng vic to bn v mc c bn, cn vic b sung
thm chi tit hon thin bn v thng c lm th cng. Nhng nhc im ny ca cc
phn mm chuyn dng li l iu kin cho s ra i cc phn mm dng Add-in 1, chng
thng c pht trin bi cc k s cu ng trong cng ty t vn thit k cng trnh giao
thng v chy cng vi cc phn mm chnh, chng tc ng trc tip ln kt qu do phn
mm chnh to ra vi mc ch l hon thin chng theo yu cu ring ca chnh cng ty .
Vi s a dng v chng loi v xut x ca cc phn mm chuyn dng, khin cho vic chn
mua phn mm gp nhiu kh khn, nht l i vi nhng n v t kinh nghim trong vic
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.
MU
C kin thc tin hc c bn: s dng tt h iu hnh Windows (hoc tng ng),
in n, tm kim ti liu trn Internet.
C th thm cc tnh nng mi cho phn mm bng cc cng c dng Add-in (yu cu
ny c th khng bt buc phi c).
ft
ra
GIOTRNHTNGHOTHITKCUNG
T b sung thm nhng kh nng mi cho phn mm ang s dng chng c th gii
quyt c vn pht sinh. Gii php ny i hi phi c nhn lc am hiu v chuyn
mn cu ng v cng ngh thng tin, ng thi phn mm ang s dng phi cho php
cp nht tnh nng mi t pha ngi dng. Nhn lc p ng c yu cu ny chnh l
k s xy dng cng trnh giao thng c trang b thm nhng kin thc v tin hc ph
hp, y l mc tiu chnh ca mn hc T ng ha thit k cu ng v cng l mc
tiu ca chnh gio trnh ny.
Phn mm, m ngi dng c th t to thm cc kh nng mi cho n, phi c mt s
c im sau:
Cung cp tnh nng cho php ngi dng c th t mnh b sung thm chc nng cho
ft
ra
chnh phn mm . V d phn mm AutoCAD cho php ngi dng s dng cng
c lp trnh, nh AutoLISP hay ObjectARX, t xy dng thm nhng chc nng
mi trong AutoCAD.
trnh trong b MS.Office (Excel, Word, Power Point ...). Cc chng trnh dng Addin c th c xy dng t mt s cng c lp trnh (v d ta c th dng VSTO Visual Studio Tools for Office - xy dng cc chng trnh dng Add-in nhng vo
trong b Office)
MU
ft
ra
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.
GIOTRNHTNGHOTHITKCUNG
ft
ra
AutoLISP: l mt ngn ng lp trnh dng thng dch, cho php ngi dng tn
dng ti a nhng lnh sn c ca AutoCAD t hp li nhm to ra nhng tnh
nng mi c mc t ng ha cao.
MU
Hnh I-8: Visual LISP: cng c h tr cho lp trnh vi AutoLISP trong AutoCAD
ft
ra
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.
GIOTRNHTNGHOTHITKCUNG
ft
ra
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:
ft
ra
Qu trnh thit k cng trnh giao thng v sn phm ca tng cng on.
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
ft
ra
D
12
CHNGI:KHINIM
ft
ra
13
GIOTRNHTNGHOTHITKCUNG
ft
ra
Hnh I-2: To bn v bnh tuyn ng t trn AutoCAD
14
CHNGI:KHINIM
ft
ra
D
Hnh I-3: M hnh lp trnh trn ng dng nn
Mi trng lp trnh.
Th vin h tr lp trnh.
15
GIOTRNHTNGHOTHITKCUNG
ft
ra
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 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.
16
CHNGI:KHINIM
AutoLISP
ObjectARX
VBA (Visual Basic for Applications)
Cn Excel h tr cc cng c lp trnh:
VBA
VSTO (Visual Studio Tools for Office)
Mi cng c lp trnh lun c nhng c im ring v kh c th phn xt ci no hay hn
hoc km hn mt cch tng qut. Do , la chn c cng c lp trnh thch hp khi lp
trnh trn ng dng nn, cn da vo mc ch c th. V d khi lp trnh trn AutoCAD, to
cc cng c tr gip v th AutoLISP l la chn hp l. Nhng xy dng nhng ng dng
ln, phc tp, i hi phi can thip su vo bn trong AutoCAD th ch c th dng
ObjectARX mi lm c.
ft
ra
Ktchng
17
GIOTRNHTNGHOTHITKCUNG
ft
ra
D
18
CHNGII:TNGQUANVVBA
S khc bit c bn nht ca VBA trong cc ng dng nn (v d gia VBA trong AutoCAD
v VBA trong Excel) l cch thc s dng cc thnh phn (i tng) ca ng dng nn. Cho
nn khi xy dng ng dng bng VBA, vic u tin l phi tm hiu m hnh i tng ca
ng dng nn v cch s dng chng.
Nh trong chng trc trnh by, xy dng mt d n VBA, mt cch tng qut, ngi
dng cn nm vng hai phn:
Ngn ng lp trnh Visual Basic v giao din lp trnh VBA IDE. Phn ny s bao gm
cc ni dung kin thc trong chng 2 v 3.
ft
ra
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.
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.
ft
ra
3. Cu trc ca mt d n VBA
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
ft
ra
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.
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
ft
ra
D
Hnh II-2: Giao din chnh ca VBA IDE
1. Thanh trnh n (Menu bar): cha tt c cc la chn cn thit thao tc vi VBA IDE
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
ft
ra
23
GIOTRNHTNGHOTHITKCUNG
Public Sub FirstPro()
UserForm1.Show
UserForm1.Caption = Sheets("Sheet1").Range("A1").Value
End Sub
ft
ra
Hp thoi Macro
Kt qu trn Excel
24
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Cc cu lnh phi l cc dng ring bit. Nu c nhiu lnh trn cng mt dng th gia
cc lnh ngn cch nhau bng du hai chm (:). Nu dng lnh qu di, mun ngt lnh
thnh hai dng th s dng du cch v du gch di ( _ ).
Nu mun chn thm ghi ch, phi bt u dng ch thch bng du nhy n ().
Qui c khi t tn: phi bt u bng k t kiu ch ci thng thng; khng cha du
chm, du cch hay cc k t c bit khc; khng qu 255 k t; khng trng vi cc t
kho; cc bin c cng mt phm vi th khng c t tn trng nhau.
ft
ra
T ng kim tra li c php (Auto Systax Check): Ty chn ny cho php VBA IDE t
ng pht hin li c php ngay sau khi ngi dng kt thc dng lnh (xung dng
mi), mt hp thoi (nh hnh di y) s thng bo v tr gy li cng nh nguyn
nhn gy li. Nu ngi dng b qua khng sa ngay th dng lnh c li s c nh
du.
25
GIOTRNHTNGHOTHITKCUNG
Hnh III-2: VBA IDE t ng kim tra li c php v thng bo cho ngi dng
ft
ra
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
ft
ra
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.
Ngoi ra, nu nhng tnh nng tr gip trn cha c kch hot, trong qu trnh vit m lnh,
ngi dng c th kch hot tm thi chng bng cch nhn t hp phm Ctrl + Space. Cn
ch rng, khi danh sch tr gip hin ra, ngi dng c th s dng chut hoc phm mi tn
la chn mc cn s dng trong danh sch ri bm phm Tab xc nhn.
4. T kho trong VB
T kho l tp hp cc t cu thnh mt ngn ng lp trnh. Mi ngn ng lp trnh u c mt
b t kho ring, di y l danh sch cc t kho trong ngn ng lp trnh VB:
27
GIOTRNHTNGHOTHITKCUNG
As
For
Mid
String
Binary
Friend
New
Private
Then
ByRef
Get
Next
Property
Time
ByVal
Input
Nothing
Public
To
Date
Is
Null
Resume
True
Else
Len
On
Seek
WithEvents
Empty
Let
Option
Set
Error
Lock
Optional
Static
False
Me
ParamArray
Step
ft
ra
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
28
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Dng cha cc gi tr l s nguyn v c vi loi d liu kiu ny. S khc nhau ca nhng
loi d liu ny l gii hn gi tr (ln nht v nh nht) m bin c th nhn c (tham kho
bng di).
Kch thc
Phm vi
Byte
1 byte
0 n 255
Integer
2 bytes
-32,768 n 32,767
Long
4 bytes
-2,147,483,648 n 2,147,483,647
ft
ra
Kiu s nguyn
Dng cha cc gi tr l s thc. Cc kiu s thc thng dng c trnh by trong bng
di y:
Kiu s thc
K.thc
Phm vi
Single
4 byte
T
-3.402823E38
n
v t 1.401298E-45 n 3.402823E38
Double
8 bytes
-1.79769313486231E308
n
-4.94065645841247E-324
v t 4.94065645841247E-324 n 1.79769313486232E308
Currency
8 bytes
T -922,337,203,685,477.5808 n 922,337,203,685,477.5807
-1.401298E-45
29
GIOTRNHTNGHOTHITKCUNG
Gn gi tr 100 cho phn t th 2
Matrix_1(1)=100
Gn gi tr 100 cho phn t cui cng
Matrix_1(10)=100
ft
ra
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.
30
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Khai bo mng ng A
Dim A() As Long
Gn kch thc cho mng A
ReDim A(1 To 3, 1 To 3) As Long
Gn gi tr cho phn t ca mng A
A(1,1) = 100: A(1,2) = 200
A(2,1) = 150: A(2,2) = 250
nh li kch thc cho mng A, gi li gi tr ban u
ca cc phn t, lu n phm vi ca mng mi
ReDim Preserve A(1 To 3, 1 To 5) As Long
ft
ra
D
Hnh III-8: Cc phn t c th gi li gi tr ban u v cc phm vi c th thay i kch
thc ca mng ng
31
GIOTRNHTNGHOTHITKCUNG
Hnh III-9: Thng tin v cc hm trong th vin lp trnh ca VBA c hin th trong
Object Browser
ft
ra
V d trn s hin th thng tin v thi gian (ngy thng nm) trong ca s Immediate ca
VBA IDE.
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
V = String
Gn bin V vi
V = 16
Gn bin V vi
V = True
Gn bin V vi
V = #01/06/2007#
32
mt chui
mt s
gi tr kiu logic
mt d liu kiu thi gian
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Ch thch
0-vbEmpty
1-vbNull
2-vbInteger
4-vbSingle
7-vbDate
8-vbString
D
9-vbObject
11-vbBoolean
ft
ra
Kiu t nh ngha l kiu d liu do ngi dng nh ngha, tng t nh kiu bn ghi
(Record) trong ngn ng lp trnh Pascal hay kiu cu trc (Struct) trong ngn ng lp trnh
C. Kiu t nh ngha bao gm nhiu trng d liu, mi trng d liu c th l cc kiu d
liu c bn hoc cc kiu t nh ngha khc.
V d, khi o ton c bng my kinh v c, vi mi im o ta cn lu li cc thng tin sau:
K hiu
ngha
Kiu gi tr
TrM
S hiu trm t my
Integer
STT
Th t ca im o
Integer
DT
S c dy trn
Double
DG
S c dy gia
Double
DD
S c dy di
Double
Gc bng
Double
Gc ng
Double
M t c im ca im o
String
MT
33
GIOTRNHTNGHOTHITKCUNG
STT As Integer
DT As Double
DG As Double
DD As Double
H As Double
V As Double
MT As String
End Type
Sau khi nh ngha kiu d liu DiemDo xong, ta c th s dng n nh nhng kiu d liu
thng thng khc.
ft
ra
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
Trong VB, mun s dng mt bin c th khng cn khai bo, tuy nhin cch lm ny ch nn
dng khi vit cc chng trnh nh, cn i vi cc chng trnh ln, c nhiu m-un, th nn
bt buc khai bo bin trc khi s dng (theo cch thit lp mc 2 ca chng ny).
Khai bo bin, v thc cht, chnh l vic to m lnh (lp trnh) cho nn cc on m lnh khai
bo bin c th t bt c thnh phn no trong d n VBA (m-un chun, m-un lp, v
Userform). Ty theo nhu cu s dng bin m ngi ta gii hn phm vi s dng ca bin
sao cho vic lp trnh c thun tin nht da trn nhng nguyn tc sau:
ft
ra
Khi bin khai bo trong chng trnh con no th phm vi s dng ca n c gii hn
trong chnh chng trnh con . Bin loi ny c gi l bin cc b.
Hnh III-10: Phm vi s dng ca bin c khai bo trong chng trnh con
35
GIOTRNHTNGHOTHITKCUNG
End Sub
Public Sub Test2()
Dim a As Double,
Test1
c = a + b
Debug.Print "a =
Debug.Print "b =
Debug.Print "c =
End Sub
c As Double
"; a;
"; b;
"; c;
ft
ra
36
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Ton cc mc ng dng: Trong trng hp ng dng gm nhiu d n (multiprojects), nu trong mt m-un khng c khai bo la chn Option Private
Module th tt c cc thnh phn d liu hay chng trnh c khai bo Public trong
m-un c phm vi hot ng ton b ng dng ngha l chng cn c th c
tham chiu t nhng d n khc trong ng dng.
ft
ra
CH Khi khai bo kiu d liu ngi dng t nh ngha hoc cc chng trnh con
trong mt m-un, nu khng ch r phm vi hot ng th pham vi hot ng mc nh l
Public.
trnh cc nhm ln do khng nh phm vi hot ng mc nh, ngi dng nn ch r
phm vi hot ng ca chng trnh hay d liu ngay khi khai bo.
Ngoi ra, trong cc m-un lp (Class Module) hoc m-un lnh ca UserForm cn c
th s dng t kha Friend xc nh phm vi hot ng ca mt chng trnh con
(phng thc). Khi s dng t kha ny, chng trnh con c th c truy xut t mi
ni trong ni b d n (Project) cha n nhng khng th c truy xut trong nhng d
n khc ca ng dng (khc vi khi dng t kha Public chng trnh con c th c
truy xut t mi ni ca ng dng).
37
GIOTRNHTNGHOTHITKCUNG
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.
ft
ra
Const Pi=3.14159
Khi dng t kha Public hay Private nhm xc nh phm vi hiu lc ca bin thay cho t
kha Dim trong khai bo bin th c php nh sau:
Public <tn_bin> as <Kiu_d_liu>
Hay:
38
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Private <tn_bin> as <Kiu_d_liu>
<tn_trng_n> as <Kiu_d_liu>
End Type
Sau khi khai bo kiu t nh ngha, ngi dng c th s dng cc bin c kiu t nh ngha
bng cch khai bo nh cc bin thng thng, vi <Kiu_d_liu> c thay bng
<Tn_kiu>. truy cp ti mt trng ca bin kiu bn ghi, dng ton t (.) hoc dng cp
t kha With End With.
CH Cc t kho Public hay Private nhm xc nh phm vi hot ng ca kiu
d liu c khai bo. ng thi khai bo kiu ch c thc hin cp m-un (khng
thc hin c trong cc chng trnh con). Khi khng ch r th phm vi hot ng th
mc nh ca mt kiu d liu t nh ngha l Public.
ft
ra
39
GIOTRNHTNGHOTHITKCUNG
[Public/ Private/ Dim] <tn_mng> () as <tn_kiu>
Trong khai bo trn khng cha cc thng s v chiu v thun ty ch l mt khai bo. Cc
phn t ca mng cha c to ra (hay ni cch khc mng vn cha thc s c cp pht
b nh) v vn cha sn sng s dng. Trc khi s dng mng ng hoc khi mun thay
i kch thc ca mng, s dng lnh Redim. C php nh sau:
Redim <tn_mng> (<cc thng s v chiu>) as <tn kiu>
ft
ra
Ch rng nu thc hin khai bo mt bin i tng nh thng thng (khng c t kha
New) th bin thc s cha c to ra. Trong trng hp , ngi s dng phi to v gn i
tng vi cc t kho tng ng l New v Set.
Dim <tn_bin> as <Kiu_d_liu>
Set <tn_bin> = New <Kiu_d_liu>
CH Cu lnh Set khng phi l cu lnh khai bo, v vy n phi c vit trong
mt chng trnh con no ch khng th nm trong phn General ca mt m-un.
40
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Ton t
M t
Ton t gn
=
Ton t ton hc
+
Cng
Tr
Nhn
Chia
Mod
Chia ly phn d
Lu tha
D
Ton t logic
Not
And
Ni logic hai biu thc. (TRUE And TRUE)=TRUE; cc trng hp khc cho kt qu
bng FALSE
Or
Xor
Eqv
Ton t so snh
ft
ra
So snh bng
<>
Khc nhau
>
Ln hn
>=
Ln hn hoc bng
<
Nh hn
<=
Nh hn hoc bng
7.2. Cc hm ton hc
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
Hm lng gic
Atn(x)
Fix(x)
Int(x)
Round(x,num)
41
GIOTRNHTNGHOTHITKCUNG
Val(str)
D
Hm
M t
CBool(Expression)
CByte(Expression)
CInt(Expression)
CLng(Expression)
CDbl(Expression)
CSng(Expression)
ft
ra
CStr(Expression)
Str(Number)
Val(String As String)
V d:
Kt qu nh sau:
42
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
7.4. Cc hm x l chui
Asc(x)
Chr(x)
Split(String)
Joint(StringArray)
Len(String)
Ucase(String)
ft
ra
Hm
V d:
Kt qu s nh sau:
43
GIOTRNHTNGHOTHITKCUNG
8. Cc cu trc iu khin
8.1. Cu trc iu kin
If <biu_thc_iu_kin> then
Khi_lnh
End If
ft
ra
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:
44
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
GI Nu nh [khi_lnh] c th vit trn mt dng nh v d trn th khng dng
t kha End If. phn tch nhiu lnh trn cng mt dng, s dng du hai chm (:)
ngn cch gia cc lnh.
Ngoi cu trc c bn v trng hp ring trn, trong nhiu trng hp, ta buc phi x l
khi <Biu_thc_iu_kin> tr v gi tr False (sai). gii quyt tnh hung ny ta s
dng cu trc iu kin m rng nh sau:
If <biu_thc_iu_kin>
Khi_lnh_1
Else
Khi_lnh_2
End If
ft
ra
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]
45
GIOTRNHTNGHOTHITKCUNG
Ta xt v d trn:
ft
ra
Cc t kho s dng trong cu trc ny: Select Case, Case, Case Else, End Select.
C php ca cu trc la chn:
46
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
MsgBox "You
Case vbBlue
MsgBox "You
Case vbMagenta
MsgBox "You
Else
MsgBox "You
End Select
C th thy rng vi cch vit s dng cu trc la chn, on chng trnh trn d c hn
nhiu so vi dng cu trc iu kin v ElseIf.
S khi ca cu trc la chn c th c biu din nh sau:
ft
ra
D
8.3. Vng lp xc nh
GIOTRNHTNGHOTHITKCUNG
Kt qu nh sau:
D
V d sau tnh tng ca cc s chn t 0 n 10:
Dim i As Integer
Dim Tong As Integer
Tong = 0
For i = 0 To 10 Step 2
Tong = Tong + i
Next
Debug.Print ("Tong = " & Tong)
ft
ra
Kt qu nh sau:
Kt qu nh sau:
48
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
GI Nu nh mun thot khi vng lp xc nh FOR khi m s ln lp cha th ta
s dng t kha Exit For.
V d sau s tnh tng ca cc s chn t 0 n 10, nhng s dng vng lp FOR ngay khi tng
ln hn 20:
Dim i As Integer
Dim Tong As Integer
Tong = 0
For i = 10 To 0 Step -2
Tong = Tong + i
If Tong > 20 Then Exit For
Next
Debug.Print ("Tong = " & Tong)
D
8.3.2. Lp trong mt tp hp
ft
ra
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
49
GIOTRNHTNGHOTHITKCUNG
a(0, 1) = 4: a(1, 1) = 5: a(2, 1) = 6
Tich = 1
Debug.Print "Cac phan tu trong mang"
For Each v In a
Debug.Print v
Tich = Tich * v
Next
Debug.Print "Tich=" & Str(Tich)
End Sub
Kt qu nh sau:
D
8.4. Vng lp khng xc nh
ft
ra
Kt qu nh sau:
50
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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>
Kiu2:LpchonkhiiukinlFALSE
Do Until <iu_kin>
[Khi_lnh]
Loop
Nu mun vng lp lun c t nht mt ln thi hnh khi lnh s dng c php:
Do
ft
ra
[Khi_lnh]
Loop Until <iu_kin>
51
GIOTRNHTNGHOTHITKCUNG
End <Sub|Function|Property>
Trong phn thn chng trnh con c bc gia phn khai bo v phn kt thc (c t
kha End).
Cc t kha [Private|Public|Friend] xc nh phm vi hot ng ca chng trnh con.
Khi nim phm vi ny cng tng t nh phm vi ca bin c trnh by phn trc.
T kha [Static] xc nh cch thc cp pht b nh cho cc bin khai bo bn trong
chng trnh con (s trnh by c th phn sau).
CH T kha Friend ch c s dng trong m-un lp hoc m-un lnh ca
UserForm.
9.1. Hm (Function)
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.
ft
ra
9.2. Th tc (Sub)
V d: to mt chng trnh con dng th tc c tnh nng nh phn trn c th vit m lnh
nh sau:
Sub Dien_Tich(Rong as Double, Dai as Double, Dt as Double)
Dt=Rong*Dai
End Sub
52
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
ft
ra
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:
Bin a trong Sub Test c khai bo vi t kha ByRef v khi truyn bin v tr ny
(bin va trong CallTest) th gi tr ca bin ban u b thay i tng ng vi cc tc
ng trong chng trnh con.
53
GIOTRNHTNGHOTHITKCUNG
Khi truyn mt bin vo tham s theo kiu tham chiu, a ch ca bin s c truyn cho
chng trnh con. Do , bt k cu lnh no ca chng trnh con tc ng ln tham s s nh
hng trc tip ln bin c truyn tng ng, ngha l khi chng trnh con kt thc, gi tr
ca bin c truyn theo kiu ny s b thay i do chng trnh con. Truyn tham s theo
kiu tham chiu l mc nh trong VB, ngi dng cng c th ch r vic truyn theo tham
chiu bng cch thm t kho ByRef vo trc khai bo tham s.
9.3.2. Truyn tham s theo tham tr
ft
ra
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.
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.
54
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
DT = w * h - pi * r ^ 2
Else
MsgBox " Co loi, lo khoet vuot ra ngoai hinh"
DT = "Error"
End If
Else
DT = w * h
End If
End Function
Sau khi to m lnh trn, nu mun tnh din tch cho mt ct vi w =100, h =200, r =20 c th
gi hm nh sau: DT(100,200,20) tnh din tch c xt n khot l vi bn knh l 20,
hoc DT(100,200) tnh din ca hnh ch nht (khng c l).
Visual Basic 6.0 cho php to mt chng trnh con vi danh sch tham s tu (ngha l s
lng cc tham s c th thay i khi gi chng trnh con) thng qua vic t t kho
ParamArray trc danh sch tham s. Khi danh sch tham s l tu chn v c dng mt
mng kiu Variant.
ft
ra
Khi :
55
GIOTRNHTNGHOTHITKCUNG
ft
ra
Kt qu nh sau:
56
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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
ft
ra
Giithch
Bin stA = 1.
Khi kt thc ln chy th nht, bin B (bin thng thng) s c gii phng, cn bin stA
(bin tnh) vn c lu gi tr (=1) ca n li trong b nh. Do n ln chy th hai, bin B
c to mi s nhn gi tr l B=B+1=0+1=1, cn bin stA do vn tn ti t ln trc nn gi
tr ca n l stA=stA+1=1+1=2.
Trng hp: trong khai bo ca chng trnh con c s dng t kha Static
Khi tt c cc bin khai bo trong chng trnh con s l cc bin tnh.
V d: trong chng trnh con StPro di y s dng khai bo Static u chng
trnh.
57
GIOTRNHTNGHOTHITKCUNG
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
ft
ra
Khi gi chng trnh con dng hm (Function), danh sch tham s phi c t trong cp
k t ( ) sau tn chng trnh con.
<Tn_m-un>.<Tn_hm>(<danh_sch_tham_s>)
58
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
<Tn_m-un>.<Tn_th tc> <danh_sch_tham_s>
DT (100,200,30)
DT (r:=30, w:=100, h:=200)
Trong dng th nht, lun c s ngm hiu trnh t cc tham s l: w,h,r, y chnh l trnh t
khi nh ngha hm DT. Cn dng th 2, trnh t theo nh ngha ca hm DT khng c
ngha na bi c s ch r: Tn bin := Gi tr cn gn. Ch n k hiu ( := ) v
trnh t bt k ca cc tham s.
Vic s dng tham s gn theo tn khi gi chng trnh con c bit tin li khi chng trnh
con c nhiu tham s tu chn v ngi dng khng c nh s dng ht cc tham s .
ft
ra
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 .
59
GIOTRNHTNGHOTHITKCUNG
Hinh_Hoc
Tinh_Duyet
(Module)
(Module)
TinhDTHH_MCatBT
LapTH_TaiTrong
TinhDTHH_MCatCT
TTGH_CuongDo
TinhDTHH_TinhDoi
TTGH_SuDung
ft
ra
D
60
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Hnh III-16: T chc d n theo cu trc chc nng
D
S dng UserForm.
ft
ra
iu khin cho
php nhp d
liu dng vn
bn
iu khin cho
php ngi
dng ra lnh
thng qua vic
kch chut.
iu khin cho
php chn hnh
nh minh ho.
toraUserForm,lmtheotrnhtsau:
1. Xc nh s cn thit phi to giao din nhp-xut d liu ring: Giao din do ng dng
nn cung cp khng hoc khng thch hp cho vic nhp d liu hoc xut kt qu ca
chng trnh.
61
GIOTRNHTNGHOTHITKCUNG
ft
ra
D
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
ft
ra
7. Vit m lnh cho cc thnh phn iu khin. M lnh ny s c lu tr trong phn code
ca UserForm.
11.1.1. To UserForm v cc thnh phn iu khin trong VBA IDE
Trong VBA IDE, UserForm c to ra bng cch chn trnh n Insert UserForm
Sau khi to UserForm, ta c th thm cc thnh phn iu khin vo UserForm bng cch la
chn iu khin cn dng t hp cng c iu khin (Control Toolbox) v thc hin thao tc
63
GIOTRNHTNGHOTHITKCUNG
D
iu khin c
la chn trn
Control Toolbox
ft
ra
Hnh III-20: B sung thm iu khin cho hp cng c (Toolbox) ca VBA IDE.
64
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
ft
ra
Gii thch
Name
BackColor
Caption
Enable
Visible
Font
Picture
ControlTipText
MouseIcon
MousePointer
65
GIOTRNHTNGHOTHITKCUNG
CI Ngoi ra, ng vi mi loi iu khin c th cn c thm nhiu thuc tnh khc
hoc khng c mt s cc thuc tnh c lit k trn. Ngi dng c th tm hiu cc
thuc tnh ny trong Object Browser hoc trong Help (chn iu khin v bm F1) ca VBA
IDE.
Vic thay i thuc tnh ca cc iu khin c th c thc hin bng hai cch:
1. Cch 1: Thay i trc tip trong qu trnh thit k: chn iu khin v thay i gi tr ca
cc thuc tnh trong ca s Properties ca VBA IDE. Cch ny trc quan v d thc hin
i vi a s cc thuc tnh ca hu ht cc iu khin. V d: thay i tiu cho mt
UserForm di y, kch chut chn UserForm sau nhp tn ca tiu vo phn
Caption ca ca s Properties.
ft
ra
D
Hnh III-22: Thay i gi tr thuc tnh trong khi thit k UserForm.
2. Cch 2: Thay i trong lc chng trnh ang chy: v thc cht, cc thuc tnh chnh l
d liu ca cc thnh phn iu khin (thng gi chung cc iu khin ny l i tng)
hay chnh l cc bin c nh ngha ring cho iu khin cho nn ta c th s dng
php gn thng thng thay i gi tr cho mt s thuc tnh. C php thc hin nh
sau:
<Tn_iu_khin>.<Tn_thuc_tnh> = gi tr thuc tnh
<Tn_UserForm>.<Tn_thuc_tnh> = gi tr thuc tnh
66
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
cn phi gi n (tng t nh gi chng trnh con) bng m lnh khi lp trnh. C php gi
phng thc ca mt iu khin hay UserForm cng tng t nh vi bin i tng:
<Tn_iu_khin>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>
<Tn_UserForm>.<Tn_phng_thc> <(tham_s_ca_phng_thc)>
D
11.1.4. Cc s kin trn giao din.
ft
ra
Th tc s kin cho php ngi lp trnh x l cc tng tc ca ngi dng trn giao din
bng cch vit cc m lnh trong th tc s kin.
Chn s kin
Gii thch
Click
xy ra khi ngi dng kch chut trn UserForm hoc trn iu khin
DblClick
xy ra khi ngi dng kch p chut trn UserForm hoc trn iu khin
67
GIOTRNHTNGHOTHITKCUNG
KeyPress
KeyUp
KeyDown
MouseMove
xy ra khi ngi dng r chut ngang qua mt iu khin hoc trn UserForm
MouseUp
MouseDown
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:
ft
ra
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:
68
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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.
Tn_UserForm.Hide
Quay li trng thi trc lnh cui cng c thc hin trn UserForm: thc hin phng
thc UndoAction
Tn_UserForm.UndoAction
Tr li trng thi trc khi thc hin Undo: thc hin phng thc RedoAction
ft
ra
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
69
GIOTRNHTNGHOTHITKCUNG
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.
Theo mc nh, trn Toolbox c sn mt s iu khin thng dng trong th Control, nhng
iu khin ny p ng c hu ht nhu cu thit k giao din thng thng trn UserForm.
Trong nhng phn trc nhc nhiu n vic s dng cc iu khin trn Toolbox nhng
cha c tnh h thng v vy phn ny s trnh by nhng ni dung c bn c th s dng
mt cch hiu qu cc iu khin ny.
2
ft
ra
3
Ntlnh(CommandButton)
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.
70
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
thit lp trng thi nhn lnh (nhn tiu im focus), s dng phng thc
SetFocus
Tn_Command Button.SetFocus
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
M t
Ghi ch
Text
Kiu String
TextAlign
MaxLength
Kiu Long
MultiLine
Kiu Boolean
ScrollBars
Thuc tnh
ft
ra
Phng thc
M t
Ghi ch
Copy
Cut
Tham kho
trong
Object
Browser
hoc Help
Paste
71
GIOTRNHTNGHOTHITKCUNG
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.
ft
ra
TextBox
Name: txtSo
CheckBox
Name: chkChonsochan
Command Button
Name: cmdTinh
Label
Name: lbKetqua
72
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Dim tong As Double
tong = 0
Dim buocnhay As Long ' buoc nhay cua bien chay
If chkChonsochan.Value Then xet lua chon chi tinh tong so chan
buocnhay = 2
Else
buocnhay = 1
End If
For i = 0 To so Step buocnhay
tong = tong + i
Next
lblKetqua.Caption = "Ket qua: " & Str(tong) hien thi ket qua
End Sub
Nttuchn(OptionButton)
ft
ra
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.
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
ListCount
Kiu Long
ListIndex
Kiu Variant
73
GIOTRNHTNGHOTHITKCUNG
Text
Tr v ni dung ca gi tr c chn
Kiu String
Selected(i)
Kiu Boolean
Phng thc:
Phng thc
M t
Ghi ch
AddItem
RemoveItem
Clear
Object Browser
ft
ra
ListBox: lstDsMc
74
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
bit ngi dng la chn phn t no trong ListBox, vit m lnh cho s kin Click ca
ListBox nh sau:
ft
ra
Hpdanhschthp(ComboBox)
Tng t nh ListBox, nhng danh sch cc gi tr c th hin theo kiu hin ra y khi
ngi dng kch chut vo. Ngoi ra iu khin ny cn cho php ngi dng nhp gi tr cn
tm vo, iu ny gip cho vic la chn c nhanh hn khi ngi dng bit tn gi tr cn
chn trong danh sch v chiu di ca danh sch li qu ln.
75
GIOTRNHTNGHOTHITKCUNG
Frame cho php nhm cc iu khin trn UserForm li theo ch , gip cho vic trnh by
trn UserForm c r rng v gip cho ngi dng d s dng chng trnh. Frame cn c
dng tp hp cc OptionButton thnh mt nhm.
Khi to nhm iu khin trong Frame, nn to Frame trc ri mi to cc iu khin thnh
phn trong n (khi cc iu khin to sau s c gn v trong Frame).
Frame nhm cc
ft
ra
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
D
12. Cc hp thoi thng dng
ft
ra
MsgBox c s dng nhc nh, thng bo hoc cnh bo ngi dng. MsgBox c th
c gi theo kiu th tc (khng c gi tr tr v), hoc theo kiu hm (gi tr tr v l nt
lnh c ngi dng chn).
C php gi MsgBox nh sau:
Dng th tc:
MsgBox
Dng hm
M t
Prompt
Buttons
Kiu VbMsgBoxStyle (tham kho trong Object Browser). Kiu hin th biu tng v
nt lnh trong MsgBox.
Title
77
GIOTRNHTNGHOTHITKCUNG
Title
Prompt
Buttons
Tham s
M t
Prompt
Title
Default
XPos, YPos
ft
ra
Hp thoi Open, Save: phc v thao tc m v ghi tp tin mt cch trc quan.
Hp thoi Color: phc v thao tc la chn mu.
Hp thoi Font: phc v thao tc la chn font ch.
Hp thoi Print: phc v thao tc in n.
78
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Thuc tnh
M t
Ghi ch
DialogTitle
Tiu ca hp thoi
Kiu String
ft
ra
FileName
Kiu String
FileTitle
Kiu String
Filter
Kiu String
FilterIndex
Kiu Integer
DefaultExt
Kiu String
InitDir
Kiu String
CancelError
Kiu Boolean
Color
Tham
kho
Object Browser
Phng thc
M t
Ghi ch
ShowOpen
ShowSave
ShowColor
ShowFont
79
GIOTRNHTNGHOTHITKCUNG
ShowPrinter
Common Dialog
Name: cmDlg
Command Button
Command Button
Name: cmdColor
Name: cmdOpen
Yu cu:
ft
ra
80
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Vic nhp d liu t tp tin lm cho mc t ng ha c nng cao hn, cho php cc
phn mm ng dng c th kt ni c vi nhau thng qua hnh thc truyn d liu. Ngoi ra,
lu li thng tin hay kt qu sau mi phin lm vic vi phn mm ng dng, th vic s
dng tp tin lm ni lu tr l ph bin nht. Cc s liu nhp vo cng nh cc kt qu tnh
ton ca phn mm s c lu li vo mt hay nhiu tp tin v chng s c gi li trong
phin lm vic tip theo.
c th xy dng chng trnh c kh nng nhp/xut d liu t tp tin, th ngi lp trnh
cn phi nm c cc ni dung sau:
Kiu ca tp tin: l cch thc t chc d liu trong tp tin . Hin nay c v s cc nh
dng cho tp tin bi ngi dng c th t do nh ngha. Kiu nh dng ph bin nht
dng trao i d liu l tp tin vn bn (thng c phn m rng l TXT, CSV). Vi
nh dng ny ta c th xem ni dung ca tp tin bng cc chng trnh son tho n
gin nh Notepad.exe ca Windows.
ft
ra
Thao tc ln tp tin: l nhng thao tc nhm bin i ni dung hoc chnh tp tin cho
ph hp vi mc ch ca ngi dng. Nhng thao tc ny c thc hin theo mt trnh
t nht nh vi cc chng trnh con chuyn trch cho tng nhim v. Cc thao tc c
bn bao gm:
Truy cp tp tin bao gm cc thao tc c v ghi d liu. Cch thc truy cp bao gm:
Truy cp kiu tun t (Sequential): Qu trnh c v ghi d liu vi tp tin theo cc khi
d liu lin tc t u n cui tp tin. Cc khi d liu lin tc c th l cc k t, cc
s, mu tin, chui, dng vn bn,Cc khi ny c phn cch nhau trong tp tin bng
k t du phy (,) hoc k t xung dng. V d, mun c dng d liu th n trong mt
tp tin vn bn c m dng (m>n), khng th ngay lp tc truy cp ti dng th n m phi
ln lt c t dng hin ti (l dng vn bn m con tr c d liu ang ) ti dng
th n. Kiu truy cp tun t thng p dng vi cc tp tin vn bn (text file).
81
GIOTRNHTNGHOTHITKCUNG
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).
ft
ra
Truy cp kiu nh phn (Binary): Qu trnh c v ghi d liu vi tp tin c thc hin
theo cc khi khng ging nhau v kch thc. Qu trnh truy cp nh phn thng p
dng cho cc tp tin c cu trc khng c nh v d liu c th c xc nh thng qua
cc byte d liu c c vo.
Trong khun kh gio trnh ny, tp tin vn bn v cc thao tc ln n, c trnh by chi tit
bi tnh ph bin v hu dng ca loi tp tin ny khi lm vic vi cc phn mm ng dng
trong ngnh xy dng cng trnh giao thng.
vic thao tc vi cc tp tin c thun li, VB cung cp sn hai phng php c bn:
S dng cc hm c sn thao tc trc tip ln tp tin (dng cc hm I/O).
1. M tp tin: l yu cu bt buc phi thc hin trc khi c hay ghi d liu vo tp tin.
2. Thc hin cc thao tc vi tp tin: c hoc ghi d liu vo tp tin.
Trong khun kh gio trnh ny ch trnh by cc thao tc theo kiu tun t vi tp tin, cc kiu
truy cp khc c th tm trong cc ti liu tham kho ghi cui gio trnh ny hoc trong Help
Online ca VBA IDE.
13.2.1. M tp tin:
C php:
82
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Open <ng dn> For [Kiu thao tc] as <filenumber> [Len=Buffersize]
Trong :
<ng dn>: l mt gi tr kiu String dng xc nh ng dn ca tp tin (v tr
ca n trn a).
<Kiu thao tc>: cch thc thao tc vi tp tin, tham s ny c th nhn mt trong
cc gi tr sau:
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.
ft
ra
Sau khi tp tin c m bng lnh Open vi kiu l Input, n sn sng cho vic c d
liu bn trong n. D liu c th c theo nhng cch thc sau:
cdliutheotngdng
Khi nim dng d liu trong tp tin khc so vi khi nim dng ch trn trang giy. Dng d
liu c th cha rt nhiu k t (c di hu nh khng hn ch) v mt dng c coi l kt
thc ti ni c cha k hiu xung dng (vbCrLf bao gm hai k t c s hiu 13 v 10). C
php c mt dng t tp tin nh sau:
Line Input #<filenumber>, <strVar>
83
GIOTRNHTNGHOTHITKCUNG
CH Ngay khi m tp tin c, con tr c d liu s c t ng t dng u
tin trong tp tin.
ft
ra
CH Khi kt thc thao tc vi tp tin th cn phi ng chng li, nu khng thng tin
trong c th mt hoc ngi khc khng truy cp vo tp tin c.
cmtdanhschccchuitheoktphncch
c mt danh sch cc chui theo k t phn cch l du phy (,) hoc k hiu xung dng
(vbCrLf) vi c php sau:
Input # <filenumber>, <danh sch cc bin>
84
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Open C:\file1.txt For Input As 1
Input #1, strRe1, strRe2, strRe3
Debug.Print strRe1, strRe2, strRe3
Close 1
ft
ra
Thao tc ghi d liu vo tp tin c thc hin sau khi tp tin m ghi vi hai kiu ghi d
liu l ghi ln d liu ban u (vi thng s Output) hay ghi ni vo sau cc d liu ban
u (vi thng s Append). Vi Output: ton b ni dung ban u ca tp tin s b xa v con
tr ghi d liu s c t v tr u tin. Nu tp tin cha c th n s c t ng to ra
theo tn v v tr ca ng dn trong lnh Open. Vi Append: vic ghi c thc hin ni tip
vo tp tin hin ti, v tr bt u ghi mc nh l cui tp tin.
GhidliuvilnhPrint #n
C php nh sau:
Trong :
filenumber: ch s ca tp tin.
V d: chng trnh sau s ghi d liu vo tp tin C:\file1.txt bng lnh Print #
Sub FilePrint()
85
GIOTRNHTNGHOTHITKCUNG
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:
D
GhidliuvilnhWrite #
C php nh sau:
ft
ra
Trong :
filenumber: ch s ca tp tin.
Kt qu nh sau:
86
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
13.2.4. ng tp tin
Sau khi thao tc c/ghi d liu ln tp tin ta cn phi ng chng li bng lnh Close theo c
php sau:
Close <filenumber>
CH Trong tt c cc v d c v ghi d liu trn u c lnh ng tp tin sau khi kt
thc cc thao tc c/ghi.
13.3. X l d liu trong tp tin theo m hnh FSO (File System Object)
Cc thao tc vi tp tin phn trn ch bao gm hai loi c bn nht l c d liu t tp tin v
ghi thng tin ln tp tin, cn nhng thao tc khc, thng xuyn c s dng, nh: la chn
tp tin, sao chp, di chuyn, xa, tuy c th thc hin c t nhng lnh c/ghi c bn
trn nhng kh rc ri. V vy, to thun li cho ngi dng, VB cung cp nhng chc
nng ny thng qua m hnh FSO. y l mt tp hp cc lp i tng, m nhim v ca
chng l cung cp cho ngi dng hu ht cc cng c thao tc vi tp tin.
ft
ra
87
GIOTRNHTNGHOTHITKCUNG
M t
Ghi ch
FileSystemObject
Drive
i tng a
Tham
kho
Object Browser
Help.
Folder
i tng th mc
File
i tng tp tin
TextStream
trong
hoc
CopyFile
DeleteFile
Xo tp tin
MoveFile
Di chuyn tp tin
FileExists
Tr v gi tr Boolean
CreateTextFile
GetFile
Nhn v mt tp tin c
OpenTextFile
Tn phng thc
Ghi ch
thc
Read
ft
ra
Tn
phng M t
Ghi ch
ReadLine
ReadAll
Skip
SkipLine
Write
WriteLine
WriteBlankLines
Close
ng lung d liu.
TrnhtlmvicvidliucatptintheomhnhFSO
Hoc:
Set FSO = CreateObject("Scripting.FileSystemObject")
88
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
13.3.1. To tp tin mi
ft
ra
Trong :
Trong :
FileName: Tn v v tr ca tp tin (kiu String).
89
GIOTRNHTNGHOTHITKCUNG
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.
ft
ra
Sub FSOReadFile()
Dim FSO As New FileSystemObject
Dim TxtStr As TextStream
Dim StrTemp As String
If FSO.FileExists("C:\file1.txt") Then
Set TxtStr = FSO.OpenTextFile("C:\file1.txt", ForReading)
Do While Not (TxtStr.AtEndOfStream)
StrTemp = TxtStr.ReadLine
Debug.Print StrTemp
Loop
TxtStr.Close
Else
MsgBox "Tap tin khng co hoac Duong dan sai",vbCritical,"Thong
bao"
End If
End Sub
Tp tin
Kt qu
90
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
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.
ft
ra
i vi cc li pht sinh lc thc thi chng trnh, VBA IDE s t ng dng chng trnh v
hin th thng bo li, sau cho php ngi dng la chn kt thc chng trnh hoc tip tc
g ri chng trnh.
hiu r hn tnh nng ny, nhp on m lnh sau vo m-un chun ca VBA IDE
Sub VDLoiThucThi()
Dim i As Integer
i = InputBox("Nhap so nguyen: ", "VD loi thuc thi")
MsgBox i
End Sub
91
GIOTRNHTNGHOTHITKCUNG
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:
ft
ra
Nu ngi dng chn nt lnh Debug, chng trnh s dng li ngay ti dng lnh lm pht
sinh li trn. VBA IDE s hin th ca s m lnh v nh du dng lnh ni pht sinh ra li
thc thi.
Hnh III-27: VBA IDE nh du dng lnh lm pht sinh li thc thi.
92
CHNGIII:CBNVNGNNGLPTRNHVISUALBASIC
Chytngbc(StepInto)
Nt lnh:
Chng trnh c dch theo tng dng lnh. Mi khi ngi lp trnh nhn F8 th chng trnh
s thc thi mt dng lnh, c nh th cho n khi kt thc chng trnh.
Nu ti mt dng lnh c li gi n chng trnh con khc th khi tip tc thc hin vi Step
Into, con tr bin dch s c nhy n dng u tin ca chng trnh con c gi.
Chytngbcvikhilnh(StepOver)
Nt lnh:
Phng php ny tng t nh chy tng bc (Step Into) nhng vic thc thi mt chng
trnh con c coi nh thc thi mt dng lnh. V vy nu trong chng trnh hin ti c mt
li gi chng trnh con th chng trnh con s c thc thi nh mt lnh v do con tr
bin dch sau s nhy ti dng lnh tip theo ca chng trnh con hin ti.
Chyrangoichngtrnhcon(StepOut)
Nt lnh:
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)
ft
ra
Nt lnh:
Chy t v tr con tr bin dch hin ti ti v tr c con tr son tho. Phng php ny thng
c dng khi ngi lp trnh mun thc thi qua ton b nhng khi lnh lp n dng lnh
m mnh cn quan tm.
Toimdng(Breakpoint)khichychngtrnh
Nt lnh:
Vi phng php ny, khi ngi lp trnh thc thi chng trnh, trnh bin dch s dng li ti
cc v tr dng lnh tng ng c nh du trc. to im dng cho mt dng lnh,
a con tr son tho chn dng lnh tng ng v nhn phm F9.
V tr con tr bin
dch hin ti
93
GIOTRNHTNGHOTHITKCUNG
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:
G mt dng lnh vo v nhn ENTER thc thi dng lnh trc tip t ca s trung
gian.
ft
ra
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
trong ca s theo di khi trnh bin dch ang thc thi mt dng lnh nm trong chng trnh
con VD1 .
thm mt biu thc vo trong danh sch cc biu thc ang c theo di ca ca s
Watch, thc hin theo cc bc sau:
1. Trong VBA IDE, chn trnh n Debug Add Watch hin th hp thoi Add Watch.
2. Nhp biu thc cn theo di trong mc Expression.
3. Chn tn m-un v tn ca chng trnh con, ni c cha bin/biu thc cn theo di
trong mc Module v Procedure.
4. Nhn ENTER hoc chn OK thm vo ca s theo di.
GI khng phi thc hin cc bc
v
, trc khi hin th ca s theo di,
cn nh du chn bin/biu thc s c theo di. Khi , cc mc Expression, Module
v Procedure s c t ng in cc gi tr tng ng.
ft
ra
D
Hnh III-30: Thm biu thc vo ca s theo di.
Nh cp trn, khi gp phi nhng li pht sinh lc thc thi chng trnh s gy ra
nhng kt qu khng th tin on c hoc chng trnh s dng li v s hin th thng bo
li rt phc tp. Nu ng v pha ngi s dng chng trnh th nhng hp thoi nh vy
thng gy ra s lng tng khi s dng chng trnh. trnh nhng hin tng nh vy,
ngi lp trnh cn phi thc hin cc k thut by li trong khi vit chng trnh.
By li thc cht l vit cc on m lnh chn cc thng bo li mc nh ca h thng v
hng dn chng trnh cch thc x l li chn c. Cc on chng trnh x l li cn
c gi l b x l li (error-handler). VBA c cung cp cc cu lnh nhm gip ngi lp
trnh thc hin by li trong chng trnh ca mnh.
14.3.1. Cu lnh On Error
95
GIOTRNHTNGHOTHITKCUNG
C php
On Error GoTo 0
ft
ra
Khi s dng cu lnh On Error GoTo <Label>, ngay trc nhn <Label> thng c lnh
Exit Sub hoc Exit Function (tu thuc chng trnh con c by li) nhm trnh thc
thi b x l li trong trng hp li khng xy ra. V vy, khun mu ca cc chng trnh c
b x l li c th c tham kho thao on m lnh sau:
Sub InitializeMatrix(Var1, Var2, Var3, Var4)
On Error GoTo B_x_l_li
. . .
Exit Sub
B_x_l_li:
. . .
Resume Next
End Sub
on chng trnh sau y s thc hin truy xut n mt tp, sau ng tp li. Nu
trong qu trnh thao tc c li xy ra, chng trnh s c t ng nhy n dng lnh pha
sau nhn lbErr hin th thng bo v li xy ra cho ngi s dng.
Sub SolveErrorExample()
On Error GoTo lbErr
Open "C:\fileABC.txt" For Input As 1
Close 1
Exit Sub
lbErr:
MsgBox "Loi xay ra: " & Err.Description, vbCritical, "Thong bao
loi"
End Sub
Khi thc thi chng trnh, trong trng hp tp C:\fileABC.txt khng tn ti, ngi dng
s nhn c thng bo li nh sau:
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
ft
ra
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
97
GIOTRNHTNGHOTHITKCUNG
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)]
ft
ra
98
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Vi cch t chc ging nh bng tnh thng thng, Excel l mt phn mm bng tnh trc
quan v rt d s dng. Chnh bi iu ny khin cho Excel l mt trong nhng phn mm
c s dng ph bin nht.
Giao din l ni m ngi dng tng tc vi chng trnh v mt giao din hp l l giao
din quen thuc vi ngi dng. Do chuyn v bng tnh, nn giao din ca Excel (nh hnh
di) c thit k da trn s m phng ca cu trc bng tnh thng thng.
ft
ra
Hnh IV-1: Giao din chnh ca Excel.
99
GIOTRNHTNGHOTHITKCUNG
5. Worksheet l loi ti liu chnh trong tp ti liu ca Excel, mi worksheet cha cc tnh
(cell) c t chc thnh cc hng v ct.
Vi hng trm hm v rt nhiu lnh c sn trong Excel khin cho n l mt chng trnh x l
bng tnh rt mnh, c th gii quyt hu ht cc bi ton t n gin n phc tp. Tuy vy,
vic lp trnh m rng trn Excel vn lun c cp n, khng nhng ch vi mc ch l
lp trnh to thm nhng tnh nng mi cho Excel m cn kt hp cc tnh nng sn c ca
chng trnh Excel gii quyt nhng vn mang tnh chuyn bit ho cao.
ft
ra
Vic lp trnh m rng Excel c th c thc hin theo nhiu cch khc nhau, nhng n gin
v hiu qu nht c th k n nhng cch sau:
Lp trnh m rng thng qua mi trng lp trnh VBAIDE c tch hp sn trong
Excel. Theo cch ny, ngi dng s s dng ngn ng lp trnh VB lp trnh m rng
Excel. Cc ng dng c to ra theo cch ny gn lin vi tp ti liu ca Excel
(Workbook).
Lp trnh m rng thng qua b cng c lp trnh Visual Studio Tools for Office (VSTO)
trong b cng c pht trin phn mm Microsoft Visual Studio. Theo cch ny, ngi s
dng c th lp trnh to ra cc ng dng chuyn nghip dng Add-in (ng dng b sung
trong Excel) bng cc ngn ng c h tr trong Microsoft Visual Studio. ng dng
m rng dng ny c lu tr tch bit vi tp ti liu ca Excel nn rt d dng phn
phi.
Vi nhng u im vn c ca VBA v cng vi kh nng sn c ca Excel, hu ht cc bi
ton trong lnh vc thit k cng trnh giao thng u c th gii quyt c thng qua vic lp
trnh m rng Excel. V vy, trong ton b ti liu ny, vic lp trnh m rng Excel s c
cp n theo cch da trn mi trng lp trnh VBAIDE.
khi ng VBAIDE, t ca s chnh ca Excel, chn trnh n ToolsMacroVisual
Basic Editor, hoc c th s dng t hp phm ALT+F11.
2. Macro
Cch tt nht lm quen vi vic lp trnh trn Excel chnh l s dng Macro v tm hiu
cch thc hot ng ca n.
100
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
2.1. Macro l g?
Khi lm vic trong Excel, i lc gp phi nhng tnh hung m ngi s dng phi lp i lp
li rt nhiu thao tc thc hin cc nhim v tng t nhau, v d nh thng xuyn phi
nh dng d liu thnh mt kiu bng ging nhau. iu ny rt d dn n s nhm chn trong
cng vic. Do , khi thit k Excel, Microsoft a ra khi nim Macro c th gi gn tt
c cc thao tc y vo mt thao tc duy nht.
Macro l tp hp cc lnh v hm c lu tr trong mt m-un m lnh ca VBA nhm thc
hin mt nhim v no . Macro c th c to bng cch:
Excel s t ghi li thao tc ca ngi dng khi lm vic trn n (Macro dng kch bn) v
khi gi Macro ny, Excel s t ng lp li ton b cc thao tc trn;
Ngi dng t vit cc on m lnh thc hin cc thao tc tng ng.
Sau khi c to ra, mi khi thc thi Macro, tt c cc thao tc c lu trong Macro s
c thc hin t ng.
V thc cht, Macro l mt chng trnh con dng th tc (Sub) vi t kho Public. Tuy nhin,
khc vi cc th tc khc, Macro l th tc khng c tham s. Chnh v vy, tt c cc th tc
vi t kho Public v khng c tham s u c xem l Macro v s c hin th trong trnh
qun l Macro ca Excel (cch gi: chn trnh n Tools Macro Macros hoc bm
Alt+F8).
Trong cc khai bo chng trnh con trong v d sau, ta s thy c cch nh ngha mt
Macro:
ft
ra
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
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
ft
ra
CH
, chn vo biu
. K t thi im y, a ch s c lu tng i so vi
tng Relative Reference
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:
ft
ra
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
.ColorIndex = 48
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
ft
ra
Sub Dinh_dang()
With Selection.Font
.Name = "Times New Roman"
.FontStyle = "Italic"
.Size = 11
End With
End Sub
4. Sau khi nhp xong on m lnh, chn trnh n FileClose and Return to Microsoft
Excel tr v mn hnh chnh ca Excel.
Nhm to iu kin thun li cho ngi s dng trong khi lm vic vi Macro, Excel tch
hp sn mt trnh qun l Macro.
hin th trnh qun l Macro, chn trnh n ToolsMacroMacros hoc nhn t hp
phm ALT+F8.
104
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
ft
ra
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 .
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.
ft
ra
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:
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.
Very High
High
Medium
Low
ft
ra
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.
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
Trong qu trnh tnh ton vi cc bng tnh, ngi ta thy rng lun tn ti mt nhu cu: gi tr
trong mt no s c tnh da vo hai yu t:
ft
ra
Tnh theo mt hoc nhiu cng thc hoc theo mt trnh t logic no .
Vic tnh ton cn phi da trn nhng thng s bn ngoi khc.
108
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Trong :
ft
ra
Exit Function: (tu chn) l cu lnh dng kt thc hm ngay lp tc (cho d pha
sau cu lnh ny vn cn cc khi lnh khc).
End Function: (bt buc) l t kho bo hiu kt thc mt hm.
3.2.3. To hm mi
minh ho r hn cch thc to hm mi, ly v d to mt hm rt n gin: hm tnh din
tch hnh ch nht. Hm ny c tn l Dien_tich, vi hai tham s u vo l chiu rng v
chiu cao. Kiu d liu ca cc tham s l kiu s thc v gi tr tr v ca hm cng l kiu s
thc.
to mt hm mi, thc hin theo cc bc sau:
109
GIOTRNHTNGHOTHITKCUNG
ft
ra
6. Trong trnh n File, chn mc Close and Return to Microsoft Excel quay tr v mn
hnh chnh 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
ft
ra
3.3. Hm tr v li
Trong mt s trng hp, hm c th s phi tr v mt gi tr li no . lm r hn iu
ny, ly v d hm phn loi sinh vin.
Function PhanLoai(DiemTB) As String
If (DiemTB >= 5) Then
PhanLoai = "Do"
111
GIOTRNHTNGHOTHITKCUNG
Exit Function
End If
If (DiemTB < 5) Then
PhanLoai = "Truot"
Exit Function
End If
End Function
Hm ny ly tham s u vo phn loi l im trung bnh ca sinh vin thng qua bin
DiemTB vi thang im 10. Hm s tr v gi tr kiu chui: nu im trung bnh ln hn
hoc bng 5, v ngc li l Trt.
ft
ra
112
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
If (DiemTB < 5) Then
PhanLoai = "Truot"
Exit Function
End If
End Function
CH s dng hm tr v thng bo li, ngha l c s dng hm CVErr, ngi dng
phi khai bo kiu d liu tr v ca hm l kiu Variant.
ft
ra
Hnh IV-9: Hm tr v li
Hng s
Gii thch
#DIV/0!
xlErrDiv0
Cng thc c chia mt s cho 0. Li ny cng pht sinh khi chia cho
mt trng.
#N/A
xlErrNA
#NAME?
xlErrName
#NULL!
xlErrNull
#NUM!
xlErrNum
#REF!
xlErrRef
#VALUE!
xlErrValue
113
GIOTRNHTNGHOTHITKCUNG
D
=MOVAVG(A1:A50)
ft
ra
Vn an ton khi s dng Macro trang 107), trnh gy ra s lng tng cho nhng
ngi dng cha c kinh nghim.
Trnh gy ra s bi ri cho ngi dng bi ton b d liu trong cc Sheet ca tp AddIn c che du, nh vy, vi ngi dng t kinh nghim, h s khng phi thc mc hay
cm thy kh hiu khi khng nhn thy nhng d liu ny.
Ngn chn vic truy cp vo m lnh. Khi phn phi ng dng dng Add-In c t ch
bo mt bng mt khu, ngi dng khng th xem hoc thay i m lnh ca ng dng.
iu ny trnh c vic sao chp m lnh ca chng trnh.
Vic qun l cc Add-In trong Excel c thc hin rt n gin thng qua trnh qun l AddIn. hin th trnh qun l Add-In, chn trnh n ToolsAdd-Ins
114
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
ft
ra
GI Thng thng, tp Add-In s c phn m rng l XLA v c lu tr trong th
mc %UserProfile%\Application Data\Microsoft\AddIns.
4.3. To Add-In
Nhn chung, vic to Add-In c thc hin rt d dng bng cch chuyn t workbook thng
thng sang dng Add-In. ng nhin, khng phi workbook no cng thch hp chuyn
thnh Add-In. Nhn chung, workbook thch hp nht chuyn thnh Add-In l workbook c
cha m lnh. Mt workbook nu ch cha worksheet th c th s khng th s dng c khi
chuyn thnh Add-In, bi l tt c cc sheet trong workbook s b n i khi c chuyn thnh
Add-In.
Vic to Add-In t mt workbook thng thng c thc hin rt d dng theo cc bc sau:
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.
ft
ra
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.
6. Trong hp thoi Save As, chn Microsoft Excel add-in (*.xla) trong mc Save as type.
116
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
CH Mt workbook khi c chuyn thnh Add-In phi c t nht mt worksheet.
Chng hn nh khi mt workbook ch cha Chart Sheet hoc Dialog Sheet, th la chn
Microsoft Excel add-in (*.xla) s khng xut hin trong mc Save as type trong hp thoi
Save As. La chn ny ch xut hin khi c mt worksheet c chn lc chn trnh n
File Save As.
Sau khi to Add-In, nn lu gi li workbook ngun (dng XLS) c th hiu chnh hay
cp nht m lnh v cc d liu khc sau ny. Cn phi lm iu ny v tp Add-In khng th
chuyn i ngc li thnh workbook.
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.
ft
ra
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.
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
ft
ra
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
Thnh phn
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)
118
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
D
Worksheets(Sheet1)
ft
ra
H thng i tng trong Excel rt a dng v tng ng dng biu din cc thnh phn
trong Excel. Phn ny s gii thiu chi tit v cc i tng v tp i tng chnh trong Excel
cng vi cc phng thc/thuc tnh ca chng thng qua cc m lnh tng ng.
5.2.1. i tng Application
i tng Application chnh l ng dng Excel m ngi dng ang lm vic trn , mi
ln chy Excel s c mt i tng Application c to ra. Application l i tng cao
nht (i tng gc) trong cy i tng ca Excel. Vic truy cp n cc i tng khc, cn
phi c thc hin thng qua i tng Application.
Khi ng Excel
M mt Workbook
119
GIOTRNHTNGHOTHITKCUNG
Thuc tnh ActivePrinter cha tn ca my in hin hnh. Kiu d liu ca thuc tnh
ActivePrinter l kiu String. on m sau hin th tn ca my in hin hnh:
MsgBox Application.ActivePrinter
Thuc tnh ny rt c ch khi thng bo cho ngi dng bit v my in hin hnh trc khi in
mt bng tnh no .
ActiveSheet
ft
ra
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
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
ft
ra
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
Ch tnh mc nh trong Excel l ch tnh t ng. Tuy nhin, i vi nhng bng tnh c
khi lng tnh ton ln, nu ch tnh t ng th mi ln thay i s liu l mt ln thc
hin tnh ton. Trong nhng trng hp nh vy, nn chuyn sang ch th cng, sau tin
hnh thay i s liu tnh ton. Sau khi thay i xong cc s liu th mi tin hnh tnh ton
mt ln cui.
Caption
L thuc tnh dng cha tiu ca chng trnh Excel. Kiu d liu ca thuc tnh ny l
String. on m sau s thay i tiu ca chng trnh Excel:
Application.Caption = "Chuong Trinh EXCEL"
121
GIOTRNHTNGHOTHITKCUNG
Dialogs
Quit
ft
ra
Phng thc ny s ng chng trnh Excel li, ging nh khi la chn trnh n FileExit.
Chng trnh s nhc ngi dng lu li cc tp cha c lu.
Application.Quit
RecentFiles
Selection
Thuc tnh ny th hin cho i tng ang c chn trong Excel. Kiu d liu tr v ca
thuc tnh ny tu thuc vo i tng c chn. Nu i tng chn l cc , biu , hoc
mt ng thng th kiu d liu tr v tng ng s l Range, ChartArea, Line... V vy khi
lp trnh, cn phi ch kim tra kiu d liu tr v ca thuc tnh ny c cc thao tc hp
l, trnh li xy ra khi thc thi chng trnh. V d sau s hin th a ch ca cc ang c
chn trong Excel:
122
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Dim mySelection As Variant
Set mySelection = Selection
If TypeName(mySelection) = "Range" Then
Kim
liu
MsgBox mySelection.Address
Else
MsgBox "i tng c chn khng phi kiu Range"
End If
tra
kiu
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.
ft
ra
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
To mi mt Workbook
Mi workbook trong Excel c th cha nhiu sheet khc nhau (tu thuc vo dung lng b
nh). C 4 loi sheet khc nhau:
123
GIOTRNHTNGHOTHITKCUNG
Worksheet: y l loi sheet ph bin nht, l loi sheet thc hin vic tnh ton v thao
tc chnh trong Excel. Mi sheet bao gm 256 ct v 65536 hng to thnh h thng cc
cha d liu. Ngoi ra, trn mi worksheet cn th cha cc i tng khc nh biu
, cc i tng ho, cc iu khin,
Chart sheet: mi chart sheet thng ch cha mt biu . Thng thng, ngi dng
thch s dng biu nhng trong worksheet hn l s dng biu trong mt chart
sheet ring bit. Tuy nhin, chart sheet li gip cho vic b tr v in n biu thc hin
d dng hn
XLM macro sheets (cn gi l MS Excel 4 macro sheet, l loi sheet li thi, nhng
vn cn h tr): dng cha cc macro XLM. XLM macro sheet cng c cha cc d
liu nhng ch hin th cng thc ch khng hin th kt qu tnh.
Dialog sheets ( li thi, nhng vn cn h tr): l ni cha cc hp thoi tu bin do
ngi dng t to (ging nh Userform trong VBA).
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
ft
ra
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
Preview: nu bng TRUE, Excel s hin th ca s xem trc khi in. Nu bng FALSE,
hoc b qua, th s in trc tip.
ft
ra
PrintPreview
Phng thc ny s hin th ch xem trc khi in cho sheet hin hnh ca workbook tham
chiu.
Workbooks(1).PrintPreview
SavevSaveAs
Saved
Sheets
125
GIOTRNHTNGHOTHITKCUNG
ft
ra
truy xut n mt i tng trong tp i tng Windows, ngi dng c th truy cp theo
tn hoc theo th t ca ca s. truy xut n ca s c tiu l Book1 (l dng ch xut
hin trn thanh tiu ca ca s), ta s dng cu trc sau:
Windows(Book1)
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
i tng Window c cha nhiu thuc tnh thit lp cc la chn v hin th trong ca s
nh sau:
Gii thch
DisplayFormulas
DisplayGridlines
DisplayHeadings
DisplayHorizontalScrollBar
DisplayOutline
DisplayRightToLeft
DisplayVerticalScrollBar
DisplayWorkbookTabs
DisplayZeros
ft
ra
Thuc tnh
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
127
GIOTRNHTNGHOTHITKCUNG
RangeSelection
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
WindowState
Gi tr ca thuc tnh
xlMaximized
Ca s c thu nh
xlMinimized
xlNormal
ft
ra
ActiveWindow.WindowState = xlMinimized
Zoom
Thuc tnh ny dng thit lp ch phng i cho cho ca s, ging nh khi ta s dng
trnh n ViewZoom trong Excel. on m sau s phng i ca s hin hnh ln 120%:
ActiveWindow.Zoom = 120
128
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Mt cch khc bit th t ca worksheet, l xem th t xut hin trn th cha cc sheet
trong bng tnh.
Phng thc ny thc hin qu trnh tnh ton cho ton b worksheet c tham chiu (xem
thm mc Calculation trang 121):
Worksheets(Sheet1).Calculate
Comments
ft
ra
Delete
Name
129
GIOTRNHTNGHOTHITKCUNG
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.
Worksheets(Sheet2).PrintOut PrintPreview:=True
trc
Worksheets(Sheet3).PrintPreview
in
In,
xem
Xem
trc
khi
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
Worksheets(Sheet2).Protect Password:="Excel"
Bt ch bo v
Bo v, c mt khu
ft
ra
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
SetBackgroundPicture
nh
Visible
Thuc tnh ny thit lp s hin th ca worksheet, bng TRUE nu worksheet c hin th.
Vic thay i gi tr ca thuc tnh ny cng tng t nh khi chn t trnh n
FormatSheetHide/Unhide trong Excel.
Worksheets(Sheet1).Visible = False
130
n Sheet1
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Worksheets(Sheet1).Visible = True
Hin th li Sheet1
NamettnchomtvngdliutrongWorksheet
S dng thuc tnh Name t tn cho vng d liu cn thao tc theo cch sau:
Dim a As Worksheet
Set a = Worksheets("Sheet1")
a.Names.Add "ABC", "=$A$1:$D$5"
CH Nu tn c t c th vng d liu c s c nh ngha li theo phm vi
mi. Nu vng d liu khn c du $ th n s t ng tnh tin theo v tr ca hin
hnh.
i tng Range tham chiu n mt hoc mt vng d liu trn bng tnh. y l i tng
ph bin nht trong Excel, bi hu ht cc tng tc vi Excel u c thc hin da trn cc
v vng d liu. Vi i tng Range, ngi lp trnh khng ch tc ng ln mt ring l
m cn c th tc ng ln nhiu cng mt lc.
ThamchiunitngRange
ft
ra
131
GIOTRNHTNGHOTHITKCUNG
Cch th nht
Cch th hai
Cch th ba
Hoc thay v s dng i tng Range, c th dng trc tip du ngoc vung ([ ]). iu ny
tng ng vi khi tham chiu s dng i tng Range:
Worksheets("Sheet1").[B2:C3] = 9
Worksheets("Sheet1").[B2.C3] = 9
Cch th nht
Cch th hai
Nu mun tham chiu n mt vng d liu l giao ca cc vng d liu, s dng du cch
gia cc vng d liu. V d sau s tham chiu n vng d liu l giao ca hai vng d liu l
A1:C3 v B2:D4, vng c tham chiu thc s l vng B2:C3
Worksheets("Sheet1").Range("A1:C3 B2:D4") = 9
ft
ra
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
kch hot mt vng d liu trn mt worksheet no , cn phi chuyn worksheet thnh
worksheet hin hnh.
Worksheets(Sheet1).Activate
Range(A3:B5).Activate
AddCommentvClearComments
Phng thc AddComment cho php thm ch thch vo vng c tham chiu. Vng d liu
ny ch c php l mt , v phi cha c ch thch, nu khng s lm pht sinh li.
Cn phng thc ClearComments cho php xo tt c cc ch thch ca cc vng d liu.
Khc vi phng thc AddComment, phng thc ny c th l mt vng bt k.
Range("A1:C3").ClearComments
Range("B2").AddComment "Chu thich moi"
D
Address
BorderAround
ft
ra
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 136.
Clear,ClearContentsvClearFormats
Phng thc Clear xo tt c nhng g c trong vng d liu c tham chiu: ni dung, nh
dng, ch thch
Xo tt c
Xo ni dung
Xo nh dng
ColumnvRow
133
GIOTRNHTNGHOTHITKCUNG
Hin th gi tr
Hin th gi tr
ColumnsvRows
Thuc tnh Columns v Rows thc cht l tp i tng kiu Range cha cc ct v cc hng
nm trong phm vi vng d liu c tham chiu. V d sau s dng vng lp For Each
Next i mu v in s th t ct vo cc ct trong vng d liu c tham chiu.
th
ft
ra
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:
134
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Worksheets("Sheet1").Range("A4:B5").Offset(-2, 3).Value = 9
Replace
Phng thc ny dng thay th mt chui k t bng mt chui k t khc. V d sau s
thay th t SIN bng COS:
ft
ra
Phng thc ny s la chn vng d liu c tham chiu, ging nh khi s dng chut
la chn mt vng d liu trong worksheet. Cng ging nh phng thc Activate, vng d
liu c tham chiu phi nm trong worksheet hin hnh, nu khng s lm pht sinh li khi
thc thi chng trnh. V d sau s chn vng d liu B2:C3 trong worksheet hin hnh:
Range(B2:C3).Select
Value
c v hin th gi tr A1
Gn gi tr cho vng d liu B2:C3
135
GIOTRNHTNGHOTHITKCUNG
Excel cho php la chn cc vng d liu ri rc bt k. Trong khi s dng Excel, c th
thc hin bng cch gi phm CRTL khi chn vng d liu.
object.Cells(ch_s_hng, ch_s_ct)
object.Cells(ch_s_)
object.Cells
Object l i tng c cha thuc tnh Cells, c th l i tng kiu Worksheet hoc kiu
Range. Cc tham s ch_s_hng v ch_s_ct l ch s tng i trong phm vi ca vng
d liu c tham chiu. Ch_s_ l s th t ca trong tp i tng Cells, s th t c
nh s theo tng hng, t tri sang phi v t trn xung di.
Xt on m sau:
ft
ra
Worksheets(Sheet1).Range("B2:E4").Cells(2, 3).Value = 9
Worksheets("Sheet1").Cells(257).Value = 9
136
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Ngoi ra, ngi lp trnh cn c th tham chiu n tng trong tp i tng Cells bng cch
thc hin cu lnh lp For Each Next. V d sau s thc hin tnh tng tt c cc nm trong
vng d liu c tham chiu:
Sub VD_Cells()
Dim myCell As Range
Dim Tong As Double
Tong = 0
For Each myCell In Worksheets("Sheet1").Range("A2.C4").Cells
Tong = Tong + myCell.Value
Tnh tng
Next myCell
MsgBox Tong
Hin th kt qu
End Sub
ft
ra
Khi ngi dng thc hin mt thao tc no trong chng trnh, Excel s lm sinh mt s
kin tng ng vi cc thao tc , chng hn nh cc s kin khi m hoc lu workbook. Nh
c cc s kin m ngi lp trnh c th vit m lnh thc hin mt s thao tc mi khi s
kin xy ra (cn gi l b x l s kin event handler). Nhng hp thng bo nh Would
you like to save changes? khi ta ng bng tnh m cha lu d liu l minh ho r nht vic
s dng cc s kin trong Excel.
Thc cht, mi b x l s kin l mt chng trnh con dng th tc. Khi s kin xy ra,
chng trnh con tng ng s c t ng thc thi. Excel c kh nng gim st nhiu loi s
kin khc nhau. Cc s kin c th c phn loi nh sau:
S kin ca Workbook (s kin mc Workbook): cc s kin xy ra trong mt workbook
no . Chng hn nh cc s kin Open (khi m hoc to workbook), BeforeSave (trc
khi lu workbook), NewSheet (mt sheet mi va c thm),
137
GIOTRNHTNGHOTHITKCUNG
ft
ra
Tobxlskin
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
D
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
ft
ra
Activate
AddinInstall
Workbook c ci t lm Add-In
AddinUninstall
BeforeClose
BeforePrint
BeforeSave
Deactivate
139
GIOTRNHTNGHOTHITKCUNG
NewSheet
Open
M workbook
SheetActivate
SheetBeforeDoubleClick
SheetBeforeRightClick
Ngay trc khi ngi dng kch phi chut trn sheet
SheetCalculate
SheetChange
SheetDeactivate
SheetSelectionChange
WindowActivate
WindowDeactivate
D
WindowResize
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
ft
ra
M mt workbook khc
Kim tra cc iu kin cn thit khc. Chng hn nh kim tra xem add-in cn thit cho
hot ng ca workbook c ci t hay cha
Khun mu ca b x l s kin Open nh sau:
Private Sub Workbook_Open()
M lnh s c t y
End Sub
140
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
SkinBeforeClose
S kin BeforeClose xy ra trc khi mt workbook chun b ng. S kin ny thng c
dng kt hp vi s kin Open. Ly v d nh, c th s dng s kin Open to trnh n
tu bin cho workbook, sau s dng s kin BeforeClose xo trnh n trc khi
workbook c ng. V nh vy, theo cch ny, workbook lun c mt trnh n tu bin m
khng lm nh hng n chng trnh Excel ni chung.
Khun mu ca b x l s kin BeforeClose nh sau:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
M lnh s c t y
End Sub
Tham s
Gii thch
D
Cancel
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):
ft
ra
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
Activate
BeforeDoubleClick
BeforeRightClick
Ngay trc khi ngi dng kch phi chut trn sheet
Calculate
Change
Deactivate
FollowHyperlink
SelectionChange
ft
ra
Tham s
Gii thch
Target
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:
ft
ra
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.
Xy ra khi
Activate
Click
DblClick
Deactivate
Initialize
UserForm c to ra.
KeyDown
KeyPress
KeyUp
143
GIOTRNHTNGHOTHITKCUNG
Layout
MouseDown
MouseMove
MouseUp
QueryClose
Resize
Terminate
UserForm b hu (UnLoad).
SkinOnKey
Trong khi ngi dng ang lm vic trn bng tnh, Excel lun gim st nhng g ngi dng
g vo t bn phm. V vy, ngi lp trnh c th thit lp phm tt (hoc t hp phm tt)
khi ngi dng nhn phm tt th s t ng thc thi mt th tc mong mun.
ci t cho s kin OnKey, s dng phng thc OnKey c trong i tng Application.
C php ca phng thc ny nh sau:
expression.OnKey Key, Procedure
ft
ra
Tham s
Gii thch
expression
Key
Procedure
M phm
BACKSPACE
BREAK
{BREAK}
CAPS LOCK
{CAPSLOCK}
CLEAR
{CLEAR}
144
MI TN XUNG
{DOWN}
END
{END}
ENTER
~ (du ng)
ENTER (phm s)
{ENTER}
ESC
F1 n F15
{F1} n {F15}
HELP
{HELP}
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
HOME
{HOME}
RETURN
{RETURN}
MI TN PHI
{RIGHT}
SCROLL LOCK
{SCROLLLOCK}
TAB
{TAB}
Phm
M phm
INS
{INSERT}
MI TN LN
{UP}
MI TN TRI
{LEFT}
SHIFT
+ (du cng)
NUM LOCK
{NUMLOCK}
CTRL
^ (du m)
PAGE DOWN
{PGDN}
ALT
% (phn trm)
PAGE UP
{PGUP}
V d sau s x l s kin OnKey ci t li chc nng ca phm PgUp v phm PgDn. Sau
khi thc thi th tc Setup_ConKey, nu ngi dng nhn phm PgDn, Excel s thc thi th tc
DgDn_Sub, cn nu ngi dng nhn phm PgUp, Excel s thc thi th tc PgUp_Sub. V kt
qu s l: khi ngi dng nhn phm PgDn s di chuyn con tr xung hai hng, cn khi nhn
phm PgUp s di chuyn con tr ln hai hng.
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
End Sub
ft
ra
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)
145
GIOTRNHTNGHOTHITKCUNG
ft
ra
Sub QuitSaveNone()
Dim wb As Workbook
For Each wb In Workbooks
' nh du coi nh cc workbook c lu
' nhng thc cht, cc workbook vn cha c lu
wb.Saved = True
Next
Application.Quit
End Sub
Sub QuitSaveNone()
' Tt tt c cc thng bo, hp thoi
Application.DisplayAlerts = False
Application.Quit
End Sub
Cch thot khi Excel s dng thuc tnh Saved hoc DisplayAlerts s c th lm mt tt c
nhng thay i cha c lu. V th cng c th s dng mt cch khc, l s dng
phng thc SaveWorkspace lu trng thi lm vic ca Excel ca trc lc thot vo tp
.xlw, v khi m tp ny, trng thi lm vic ca Excel ti thi im s c khi phc li.
on m sau s lu ton b trng thi lm vic vo tp Resume.xlw:
Sub QuitWithResume()
Application.SaveWorkspace "C:\Resume.xlw"
146
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Application.Quit
End Sub
Nhng cch trn u cn phi thc hin u on m lnh v phi thc hin li cui ca
on m lnh thit lp li cc gi tr mc nh, nu khng s lm kho hon ton chng
trnh Excel.
V d sau minh ho cch tm thi kho tng tc ngi dng khi thc hin cc on m lnh
mt nhiu thi gian:
ft
ra
Sub Khoa_nguoi_dung()
Dim cel As Range
' Chuyn con tr chut thnh biu tng ch.
Application.Cursor = xlWait
' Tt tng tc ngi dng v vic cp nht mn hnh.
Application.Interactive = False
Application.ScreenUpdating = False
' on m lnh m phng vic tnh ton mt nhiu thi gian.
For Each cel In [a1:iv999]
cel.Select
Next
' Khi phc li trng thi ban u.
Application.Interactive = True
Application.ScreenUpdating = True
Application.Cursor = xlDefault
[a1].Select
End Sub
GI Gn thuc tnh ScreenUpdating bng FALSE trong khi thc khi cc on m lnh
c lin quan n vic hin th trn mn hnh, chng hn nh i mu nn cho vng d
liu , s lm tng tc thc thi ca m lnh
7.1.3. Thao tc vi ca s
i tng Application c tp i tng Windows cho php m, sp xp, thay i kch thc v
ng cc ca s bn trong Excel. Chng hn nh on m sau to thm mt ca s mi v sau
xp chng cc ca s bn trong workbook hin hnh:
147
GIOTRNHTNGHOTHITKCUNG
Sub OpenCascadeWindows()
ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub
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
ft
ra
Sub ChangeExcelWindowState()
Application.WindowState = xlMaximized
MsgBox "Trang thai phong dai"
Application.WindowState = xlMinimized
MsgBox "Trang thai thu nho"
Application.WindowState = xlNormal
MsgBox "Trang thai thong thuong"
Application.DisplayFullScreen = True
MsgBox "Trang thai toan man hinh"
Application.DisplayFullScreen = False
MsgBox "Trang thai thong thuong"
End Sub
Thu nh ca s
Thng thng, khi s dng VBA trong Excel, chng trnh Excel c khi ng sn v
ngi lp trnh khng cn quan tm n cc thao tc khi ng chng trnh Excel. Tuy
nhin, vn c nhng lc cn khi ng chng trnh Excel t chng trnh khc, chng hn
nh khi mun xut d liu tnh ton sang Excel chng hn. Lc , cn phi lp trnh khi
ng Excel, hay ni theo cch n gin hn, l to i tng Application cha ng dng Excel.
thc hin c vic ny, cn phi thc hin cc bc sau:
2. Vit m lnh thc hin vic khi ng chng trnh Excel (to i tng Application ca
Excel).
Di y s trnh by cch thc khi ng chng trnh Excel t VBA trong AutoCAD.
ThamchiuthvinmrngcachngtrnhExcel
1. Khi ng chng trnh AutoCAD Khi ng VBAIDE trong AutoCAD bng cch
nhn t hp phm ALT+F11.
148
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
ft
ra
D
Hnh IV-14: Hp thoi References trong VBAIDE ca AutoCAD.
VitmlnhkhingchngtrnhExcel
149
GIOTRNHTNGHOTHITKCUNG
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 ======
Bt u thc hin cc thao tc trong Excel
ging nh khi thc hin trong mi trng VBA ca Excel
Dim WBook As Workbook, WSheet As Worksheet
Set WBook = App.Workbooks.Add
Set WSheet = WBook.Worksheets(1)
WSheet.Range("A1") = "Vi du ket noi voi Excel"
WBook.SaveAs "C:\Test.xls"
WBook.Close
Set WBook = Nothing
Set WSheet = Nothing
End Sub
Tomiworkbook
ft
ra
Mworkbook
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
150
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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
D
Sub TestCloseAll()
Workbooks.Close
End Sub
ft
ra
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
151
GIOTRNHTNGHOTHITKCUNG
thng bo bng cch gn thuc tnh DisplayAlerts bng FALSE, v cng nn nh l phi tr v
cc gi tr mc nh trc khi kt thc chng trnh.
itnworksheet
Vic i tn worksheet c thc hin mt cch d dng, ch cn thay i thuc tnh Name c
trong i tng worksheet. on m sau s i tn Sheet2 thnh MySheet:
Worksheets("Sheet2").Name = "MySheet"
duyt qua tng trong vng d liu, s dng vng lp For Each Next duyt qua tng
i tng trong tp i tng Cells. Trnh t duyt l theo s th t ca : duyt t tri sang
phi l t trn xung di. V d sau s duyt qua tng trong vng d liu A1:D3, in s
vo tng theo th t c duyt. Thng qua v d ny, ta s hiu r hn v trnh t duyt cc
trong vng d liu:
ft
ra
Sub Duyet_O()
Dim myCell As Range
Dim i As Integer
i = 0
For Each myCell In Range("A1:D3").Cells
Cc thao tc x l nm y
V d: in s th t duyt vo tng
i = i + 1
myCell.Value = i
Next myCell
End Sub
Qu trnh duyt theo hng hoc ct c thc hin s dng vng lp For EachNext trn cc
tp i tng Rows, Columns v Cells. i tng thnh phn trong cc tp i tng ny u
c kiu l Range. V d sau s tnh tng tng ct ca vng d liu c tham chiu v in gi
tr tng ny vo ngay pha di tng ct.
1. Sub Duyet_O_Theo_Cot()
2.
Dim myCell As Range
3.
Dim myColumn As Range
4.
Dim Tong As Double
5.
For Each myColumn In Range("A1:D3").Columns
6.
Tong = 0
7.
For Each myCell In myColumn.Cells
8.
Tong = Tong + Val(myCell.Value)
9.
Next myCell
10.
myColumn.Cells(myColumn.Rows.Count + 1, 1) = Tong
11. Next myColumn
12. End Sub
152
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
ft
ra
153
GIOTRNHTNGHOTHITKCUNG
Biu , d l dng nhng hay c lp, u c cng mt kiu d liu l Chart. Hn na, trong
hu ht cc bng tnh, cc biu thng c nhng trong worksheet tin cho vic trnh
by. Chnh v vy, ni dung trong gio trnh ny ch tp trung thao tc i vi biu nhng.
7.5.1. To mi biu
Cch nhanh nht to biu bng m lnh l s dng phng thc ChartWizard ca i
tng Chart. Vi phng thc ny, ngi lp trnh c th to c biu ch trong 2 bc:
ft
ra
Tham s
Gii thch
Source
Gallery
Format
PlotBy
CategoryLabels
SeriesLabels
HasLegend
154
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Title
Tiu ca biu
CategoryTitle
ValueTitle
Tiu ca trc ng
ExtraTitle
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 B
2000
20.0
35.0
2001
21.0
35.5
2002
24.0
36.0
2003
25.0
37.0
2004
23.0
36.5
2005
23.5
37.0
2006
25.0
38.0
ft
ra
Mt Hng A
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
D
7.5.2. Thm mt chui s liu vo biu c
ft
ra
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
Rowcol
SeriesLabels
CategoryLabels
Replace
156
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Set sc = chrt.SeriesCollection
' Thm chui s liu mi.
sc.Add [ThemSoLieu], xlColumns, True, False, False
' Ly chui s liu cui trong tp i tng SeriesCollection
' chnh l chui s liu mi b sung.
Set sr = sc(sc.Count)
' i dng biu cho chui s liu mi.
sr.ChartType = xlColumnClustered
End Sub
ft
ra
D
7.6. S dng cc hm c sn trong Excel
Ngi lp trnh c th tn dng cc hm c sn ca Excel trong khi lp trnh trn VBA thng
qua i tng WorksheetFunction. i tng ny l mt thuc tnh ca i tng gc
Application.
V d sau s tm gi tr nh nht trn vng d liu A1:A10 bng cch s dng hm Min ca
Excel:
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer
Khi xy dng chng trnh, ngi khc c th dng c, ngi lp trnh cn phi c bit
ch n giao din ngi dng. Giao din ngi dng c hiu l cch thc m ngi s
dng s tng tc vi chng trnh bng cch nhn nt bm, chn mt trnh n, nhn phm,
chn trn thanh cng c,
Khi xy dng cc ng dng, cn phi lun ghi nh rng mc ch xy dng chng trnh l
cho ngi dng cui s dng. Ngi lp trnh thng c kinh nghim s dng my tnh hn
ngi dng, cho nn, vi mt giao din no th i vi ngi lp trnh l d s dng trong
khi , i vi ngi s dng li rt kh dng.
Khi mt chng trnh c trin khai xy dng da trn VBA ca Excel th hp l nht l nn
hng n vic s dng nhng tnh nng sn c ca chnh Excel lm giao din, c nh vy ta
mi tn dng c mt trong nhng th mnh ca Excel, l giao din thn thin, n gin
157
GIOTRNHTNGHOTHITKCUNG
v hiu qu. Vi nh hng thit k giao din nh vy, ta nn s dng h thng trnh n,
thanh cng c v chnh bng tnh lm giao din chnh cho ng dng ca mnh.
Nh vy trong Excel, ngi dng c th s dng nhng tnh nng c cung cp sn thit
k giao din cho chng trnh ca mnh v sau y l mt s phng n thit k giao din nn
s dng khi lp trnh VBA trong Excel:
S dng iu khin nhng trc tip trn worksheet chng hn nh ListBox hoc
CommandButton;
S dng cc hp thoi thng dng c sn trong Excel;
To cc hp thoi tu bin (chnh l vic s dng UserForm);
Tu bin trnh n;
Tu bin thanh cng c;
Tu bin phm tt.
ft
ra
Hnh IV-15: Bng tnh s dng iu khin nhng trong worksheet.
158
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
M t
Name
LinkedCell
Max
Min
ft
ra
SmallChange
Value
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
LinkedCell
ListFillRange
ColumnCount
BoundColumn
159
GIOTRNHTNGHOTHITKCUNG
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
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
Value
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.
ft
ra
160
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
ft
ra
Hnh IV-17: Cc bc thm s kin cho iu khin Command Button.
Hp thoi l mt trong nhng thnh phn hay dng n nht khi thit k giao din, do , ngoi
vic s dng nhng iu khin thit k hp thoi trn Userform c cp phn
trc, hoc s dng chnh nhng hp thoi n gin ca VB nh hm InputBox hoc MsgBox
th ngi dng c th s dng nhng hp thoi c Excel cung cp v ta s thy rng trong
nhiu trng hp, nhng hp thoi ny rt tin dng. Di y l mt s hp thoi c trng
trong Excel.
GI Tham kho mc Cc hp thoi thng dng trang 77 bit thm chi tit v cc
hp thoi c bn thng c s dng.
161
GIOTRNHTNGHOTHITKCUNG
Ngi s dng c th la chn mt vng d liu trc tip trn worksheet bng cch s
dng chut;
Vic kim tra d liu nhp vo c thc hin t ng.
C php ca hm InputBox ny nh sau:
Application.InputBox(prompt, title, default, left, top, helpFile,
context, type)
prompt
title
default
left, top
helpFile, context
Tn tp tr gip v ch cn hin th
type
M xc nh kiu tr v ca hm.
Tham s
0
1
2
4
8
16
64
Kiu gi tr tr v l
ft
ra
Cng thc
Chui
162
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Dim DefaultRange As String
DefaultRange = Selection.Address
On Error GoTo Canceled
Set UserRange = Application.InputBox _
(Prompt:=Vng d liu cn xo:, _
Title:= Xo vng d liu, _
Default:=DefaultRange, _
Type:=8)
UserRange.Clear
UserRange.Select
Canceled:
End Sub
ft
ra
D
Mt li im na ca vic s dng hm inputBox ca Excel chnh l vic t ng thc hin
kim tra gi tr nhp vo. Trong v d trn, nu ngi dng nhp vo gi tr khng phi l a
ch ca mt vng d liu, Excel s hin th mt hp thng bo v nhc ngi dng nhp li d
liu.
163
GIOTRNHTNGHOTHITKCUNG
Tham s
Gii thch
FileFilter
FilterIndex
S th t ca b lc tp mc nh.
Title
ButtonText
Khng s dng.
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
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:
ft
ra
164
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
End Sub
ft
ra
D
Hnh IV-18: Hp thoi Open
GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,Button
Text)
Tham s
Gii thch
InitialFilename
Xc nh tn tp gi ban u
FileFilter
FilterIndex
S th t ca b lc tp mc nh.
Title
ButtonText
Khng s dng.
V d sau s hin th hp thoi Save As ngi dng nhp vo tn tp, sau s hin th tn
tp c la chn.
165
GIOTRNHTNGHOTHITKCUNG
Sub SaveAs()
Dim fileSaveName As String
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
V d sau hin th mt hp thoi cho php ngi dng chn th mc. Sau hin th tn th
mc bng cch s dng hp thoi MsgBox. Tn tp s c truy cp thng qua thuc tnh
SelectedItems ca i tng FileDialog.
ft
ra
Sub GetAFolder()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & \
.Title = Please select a location for the backup
.Show
If .SelectedItems.Count = 0 Then
MsgBox Canceled
Else
MsgBox .SelectedItems(1)
End If
End With
End Sub
i tng FileDialog cho php ch nh th mc ban u bng cch gn gi tr cho thuc tnh
InitialFileName. Trong v d trn s dng th mc mc nh ca Excel lm th mc ban
u.
8.2.5. Cc hp thoi mc nh trong Excel Tp i tng Dialogs
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
166
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
thoi hin th khi gi bng VBA khng hon ton ging nh khi gi thng qua trnh n trong
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.
ft
ra
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
ft
ra
M t
xlDialogOpen
Hp thoi Open
xlDialogSaveAs
Hp thoi Save As
xlDialogPageSetup
xlDialogPrint
Hp thoi Print
xlDialogPrinterSetup
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.
ft
ra
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.
169
GIOTRNHTNGHOTHITKCUNG
ft
ra
hin th UserForm, s dng phng thc Show ca i tng UserForm. Phng thc ny
c c php nh sau:
object.Show modal
Trong :
Ngoi ra, cn c mt k thut khc hin th UserForm: s dng phng thc Add ca tp
i tng UserForm, sau s dng phng thc Show hin th UserForm. Phng thc
ny thch hp khi trong d n c nhiu UserForm v ngi c th ch nh s xut hin ca mt
UserForm bt k. on m sau s hin th UserForm c tn l UserForm1:
MyForm = UserForm1
UserForms.Add(MyForm).Show
CH Th tc hin th hp thoi tu bin (UserForm) phi c t trong mt mun chun ca VBA (ch khng phi t trong m-un ca UserForm).
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
ft
ra
Ngi lp trnh c th dng rt nhiu loi iu khin khc nhau ln UserForm. Thng tin chi
tit, xem li mc Lm vic vi UserForm v cc thnh phn iu khin trang 61. Di y
ch trnh by thm mt iu khin ring ca Excel, iu khin RefEdit.
iu khin RefEdit cho php ngi dng la chn mt vng d liu bng cch nhp a ch
hoc nhp tn vng d liu hoc s dng chut chn trc tip trong worksheet. Khi ngi
dng kch chut vo biu tng nh gc phi ca iu khin, hp thoi s tm thi c n i
v mt ca s nh ngi dng chn vng d liu s c hin ln, ging ht nh cc hp
thoi mc nh ca Excel.
171
GIOTRNHTNGHOTHITKCUNG
Hnh IV-19: iu khin RefEdit
RefEdit1.Text = ActiveWindow.Selection.Address
ft
ra
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
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.
ft
ra
Cu trc ca h thng thanh trnh n trong Excel c th c th hin thng qua s hnh
cy nh sau:
Menu Bar: L hng ch nm trn cng, ngay pha di thanh tiu ca ng dng
Excel. Nh cp, tu vo tng ng cnh m thanh Menu Bar c th l Worksheet
Menu Bar hoc Chart Menu Bar.
Menu: L mt thnh phn trong h thng trnh n ca Excel, khi ngi dng kch chut
vo mt Menu th mt danh sch cc MenuItem s hin ra.
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 .
173
GIOTRNHTNGHOTHITKCUNG
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.
ft
ra
D
Hnh IV-21: H thng thanh 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 cn to v cc chc nng tng ng.
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
gc, ni s cha Menu v MenuItem. C php ca phng thc Add nh sau (tt c cc tham
s u l tham s tu chn):
object.Add(Type, Id, Parameter, Before, Temporary)
174
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Tham s
M t
Object
Type
Parameter
Before
Id
Temporary
ft
ra
Phng thc Add ch to cc i tng trng trn h thng thanh trnh n. V vy, ngi lp
trnh cn phi gn thm cc thuc tnh khc cho nhng i tng mi ny.
M t
BeginGroup
Nu gn bng TRUE, pha trc iu khin s xut hin Separator Bar ngn
cch cc nhm trnh n.
BuiltIn
Caption
Enabled
FaceID
Id
OnAction
ShortcutText
State
ToolTipText
Type
175
GIOTRNHTNGHOTHITKCUNG
Vd:ToMenumi
ft
ra
176
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Dim cbtn As CommandBarButton
' LY THAM CHIU N THANH TRNH N
Set cb = Application.CommandBars("Worksheet Menu Bar")
' TO MENU1: VI DU MENU (CommandBarPopup).
Set cpop = cb.Controls.Add(Type:=msoControlPopup, Temporary:=True)
cpop.Caption = "&Vi du Menu"
' TO MENUITEM2: TINH TONG (CommandBarButton).
' (thm MenuItem vo MENU1)
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
' Gn thuc tnh cho MenuItem.
cbtn.Caption = "Tinh Tong"
Gn tiu
cbtn.OnAction = "Macro1"
Gn m lnh
ft
ra
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
177
GIOTRNHTNGHOTHITKCUNG
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
ft
ra
S KIN Workbook_Open
Private Sub Workbook_Open()
Gi th tc thc hin vic to trnh n
TaoMenu
End Sub
S KIN Workbook_BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Gi th tc thc hin vic xo trnh n
XoaMenu
End Sub
Gn phm tt cho Menu Item thc cht l gn phm tt cho Macro tng ng vi Menu Item
(l Macro c gn cho Menu Item thng qua thuc tnh OnAction). B sung on m lnh
sau vo cui th tc TaoMenu v d trc gn phm tt l CTRL+SHIFT+T cho Menu
Item Tinh Tong:
To phm tt cho MenuItem
Application.MacroOptions _
Macro:="Macro1", _
HasShortcutKey:=True, _
ShortcutKey:="T"
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.
178
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:
ft
ra
Khng gian to bn v c chia thnh hai loi:
179
GIOTRNHTNGHOTHITKCUNG
ft
ra
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.
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
180
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.
ft
ra
Mc d AutoCAD c thit k vi cu trc rt linh hot, giao din thn thin v d s dng,
rt nhiu i tng hnh hc v phi hc sn c, hng trm lnh h tr to bn v v iu khin
AutoCAD c sn khin cho vic s dng AutoCAD nhanh, d v hiu qu cao, nhng ngay
t nhng phin bn u tin, AutoCAD c thit k vi kin trc m, ngha l n cho php
ngi dng t pht trin thm nhng phn mm mi chy trn AutoCAD, b sung nhng tnh
nng mi cho AutoCAD vi mc ch gip ngi dng c th bin AutoCAD thnh mt cng
c lm vic chuyn dng vi hiu sut cao.
Bn trong AutoCAD, t phin bn 2000 (R15), tch hp sn hai cng c lp trnh m rng
cho AutoCAD l AutoLISP v VBA. Bn cnh , nu nh ngi dng c nhu cu xy dng
nhng phn mm i hi can thip su vo AutoCAD, th ObjectARX l mt la chn ph
hp. Vi ObjectARX, ngi dng c th s dng ngn ng C++ trong b cng c lp trnh
Visual Studio ca Microsoft, mt b cng c lp trnh c coi l mnh v thn thin nht hin
nay, xy dng phn mm. Nh vy ta c th lp trnh m rng AutoCAD vi cc cng c
sau:
181
GIOTRNHTNGHOTHITKCUNG
nhin, cng nh AutoLISP, vi VBA, ngi dng khng th can thip su vo bn trong
AutoCAD, v d nh khng th b sung thm vo AutoCAD mt i tng hnh hc
hoc phi hnh hc mi.
ObjectARX v VC++: thng c gi l ObjectARX, thc cht y l mt th vin lp
trnh cho VC++, vi th vin ny, ngi dng c th s dng VC++ to ra cc chng
trnh m khng c bt k s hn ch no trong vic tng tc vi AutoCAD. Chng
trnh s c bin dch thnh dng ARX (chnh l DLL) v khi cn s dng th ngi
dng c th gi chng vo trong AutoCAD bng mt lnh ring.
Qua kinh nghim trin khai cc d n phn mm trn AutoCAD, c th thy rng hu ht cc
nhu cu tnh ton v t ng to bn v thng thng u c th thc hin mt cch d dng v
nhanh chng bng VBA v AutoLISP, v vy, trong khun kh ca gio trnh ny, ni dung lp
trnh m rng AutoCAD bng VBA c t l trng tm bi tnh hiu qu ca n. Bn cnh
, khai thc tt nht AutoCAD, th vic kt hp VBA vi AutoLISP thc hin mt d n
phn mm l mt la chn hay, do , trong gio trnh ny cng cp n mt phn s kt
hp ny. Cn i vi ObjectARX, nhng ai quan tm c th xem trong gio trnh mn hc
Lp trnh trn ng dng nn.
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:
ft
ra
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.
182
CHNGV:LPTRNHTRNAUTOCAD
ft
ra
Hnh V-1: Thnh phn AutoCAD Objects v m-un ThisDrawing ca d n VBA trong
AutoCAD
Vi AutoCAD, qu trnh qun l cc d n VBA c thc hin rt d dng thng qua trnh
qun l d n VBA VBA Manager. hin th ca s VBA Manager, chn trnh n
ToolMacroVBA Manager (hoc gi lnh VBAMAN t dng lnh ca AutoCAD).
183
GIOTRNHTNGHOTHITKCUNG
ft
ra
1. Danh sch cc bn v hin c trong AutoCAD (s dng n danh sch ny khi mun nhng
mt d n no vo trong mt bn v hoc tch d n ra khi bn v ).
184
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
ft
ra
D
Hnh V-3: Hp thoi m d n VBA.
1. Khi ng VBAIDE (nhn phm ALT+F11 hoc chn trnh n Tools Macro
Visual Basic Editor).
2. Chn d n cn lu trong ca s Project.
nhngdnclpvomtbnv
1. M ca s VBA Manager.
2. Trong mc Drawing, chn bn v cn nhng d n vo.
3. Trong mc Projects, chn d n cn nhng vo bn v.
185
GIOTRNHTNGHOTHITKCUNG
AutoCAD c cung cp mt s cu lnh lin quan n vic qun l d n VBA v thc thi
Macro trong VBA. Di y l danh sch cc cu lnh c lin quan:
Lnh
Gii thch
VBAIDE
VBAMAN
Hin th trnh qun l d n VBA VBA Manager, qua ngi dng c th thc
hin cc thao tc trn d n VBA.
VBANEW
To mi d n c lp.
ft
ra
VBALOAD
-VBALOAD
VBAUNLOAD
VBARUN
Thc thi Macro. AutoCAD s hin th mt hp thoi cho ngi dng chn Macro
cn thc thi.
-VBARUN
Thc thi Macro t dng lnh ca AutoCAD. Ngi dng phi nhp tn ca Macro
cn thc thi ngay trn dng lnh ca AutoCAD. Nu c nhiu Macro trng tn
trong cc m-un khc nhau, s dng c php: <tn_m_un.tn_Macro>.
VBASTMT
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
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;
186
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.
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
ft
ra
187
GIOTRNHTNGHOTHITKCUNG
ft
ra
HiuchnhMacro
1. M hp thoi Macros.
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.
188
CHNGV:LPTRNHTRNAUTOCAD
thc hin mt chc nng mi c to ra bng cch lp trnh trong VBA, hay ni cch khc
l thc thi mt Macro, r rng phi thc hin qua kh nhiu bc. Cho nn, to ra s
thun tin cho ngi s dng, nn nh ngha lnh mi, m qua ngi s dng c th thc
thi Macro ch vi mt lnh n gin, ging nh khi cn v ng thng, ta ch cn s dng
lnh line dng lnh AutoCAD. S kt hp vi AutoLISP l mt gii php tt v d dng
thc hin mc tiu ny.
Vi VBA, ngi dng c th to Macro thc hin mt thao tc no . Cn vi AutoLISP,
ngi dng c th nh ngha mt lnh mi thc thi Macro c to trong d n VBA.
Hay ni cch khc, AutoLISP l chic cu ni nhm to s lin kt gia dng lnh AutoCAD
v Macro trong d n VBA.
ft
ra
189
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:
ft
ra
Sub HelloWorld()
End Sub
Sub HelloWorld()
Dim strMsg As String
strMsg = InputBox("Nhap thong diep chao mung", "HelloWorld")
Dim objText As AcadText
Dim pInsert(0 To 2) As Double
pInsert(0) = 50: pInsert(1) = 100: pInsert(2) = 0
Set objText = ThisDrawing.ModelSpace.AddText(strMsg, pInsert, 2.5)
ZoomExtents
End Sub
12. t con tr vo gia hai dng Sub HelloWorld() v End Sub, sau nhn phm F5
thc thi th Macro. Mt hp thoi nh s hin ln yu cu ngi dng nhp vo mt thng
ip Nhp vo thng ip v nhn OK Thng ip va nhp s c v trn khng
gian m hnh ca AutoCAD.
190
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")
)
ft
ra
17. Thot khi chng trnh AutoCAD (nu ang thao tc trn AutoCAD). Khi ng li
chng trnh AutoCAD. Trong dng lnh ca AutoCAD, g lnh Hello. Tht bt ng, mt
hp thoi yu cu ngi dng nhp thng ip cho mng xut hin - Macro HelloWorld
c thc thi.
AutoCAD c to thnh t nhiu thnh phn khc nhau v chng lun c mt mi lin h
cht ch c quy nh t trc theo mt cu trc nht nh. Nu ch s dng AutoCAD vi
cc lnh c sn v (mc thng thng) th ngi dng khng cn bit n cu trc ny,
i vi h, kh nng v mc tin dng ca cc lnh ny mi l quan trng. Nhng khi s
dng AutoCAD nh l mt ng dng nn lp trnh, th lc ny c nhiu khi nim phi c
hiu theo cch khc, thit thc cho vic lp trnh. AutoCAD c coi nh l mt i tng
c cu thnh t nhng i tng khc, nhng i tng con ny, theo cch hiu thng
thng, chnh l cc thnh phn ca AutoCAD. Trong tng i tng con , c th c nhiu
i tng cp thp hn na, hay ni cch khc, mt i tng c th bao gm nhiu i
tng con vi cc cp khc nhau. Cc i tng ny c t chc cht ch theo mt cu trc
c nh, v da vo cu trc t chc i tng ny, AutoCAD cho ngi dng ci nhn tng
quan v cu to ca n cng nh ch cho ngi dng bit cn phi lm nh th no tc ng
ln mt i tng c th (hay thnh phn) ca n. Thng thng cu trc ny c gi l m
hnh i tng trong AutoCAD v c biu din di dng cu trc cy phn nhnh. Vi cu
trc ny, ngi dng c th d dng truy cp n i tng mnh cn thao tc bng cch tra cu
theo nhnh ca i tng .
191
GIOTRNHTNGHOTHITKCUNG
ft
ra
D
Nhng thao tc bng m lnh tc ng ln i tng Preferences s tng ng vi vic
ngi dng thao tc trc tip ln hp thoi Options t trong AutoCAD.
Nh vy c th thy rng, lp trnh tt trn AutoCAD, ngi dng, trc ht, phi quen
thuc v thao tc thnh tho trn cc thnh phn (hay i tng) ca AutoCAD.
Trong AutoCAD, c rt nhiu loi i tng khc nhau, chng hn nh:
Cc i tng hnh hc: line, arc, text, dimension
Thit lp v nh dng: linetype, dimension style
Cu trc t chc: layer, group, block
M hnh i tng ca AutoCAD trong VBA c th hin di dng cu trc cy phn cp,
trong i tng gc l Application, chnh l phin bn AutoCAD ang chy. Nh c m
hnh i tng m ngi lp trnh c th bit c mt i tng c th cho php truy cp n
nhng i tng no cp tip theo.
Di y l m hnh i tng rt gn trong AutoCAD dng cho vic lp trnh bng VBA. M
hnh i tng y c th tham kho trong ti liu ActiveX and VBA Developer's Guide i
km AutoCAD.
192
CHNGV:LPTRNHTRNAUTOCAD
Application
Ch gii:
Preferences
Tp i tng
Documents
i tng
Document
ModelSpace
Arc
PaperSpace
Circle
PViewPort
Hatch
DimStyle
Layers
Layer
DimStyles
Layouts
Layout
Linetypes
Linetype
TextStyles
TextStyle
SelectionSets
SelectionSet
Plot
MText
Point
Polyline
Ray
Text
ft
ra
Utility
Line
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>
193
GIOTRNHTNGHOTHITKCUNG
cu hnh bn trong ca hp thoi Option. Cc thuc tnh khc ca i tng Application cho
php truy cp n cc d liu ring ca chng trnh chng hn nh tn v phin bn chng
trnh, kch thc, v tr ca ca s ... . Cc phng thc ca i tng Application s thc hin
cc thao tc nh: to mi, m, ng bn v hay thot khi AutoCAD.
i tng Application l i tng gc trong m hnh i tng ca AutoCAD. T i tng
Application, ta c th truy xut n bt k i tng no, chng hn nh i tng Application
c cc lin kt n bn v AutoCAD thng qua tp i tng Documents, cc trnh n v
thanh cng c AutoCAD thng qua tp i tng MenuBar v MenuGroups, v VBAIDE
thng qua mt thuc tnh gi l VBE.
ft
ra
194
CHNGV:LPTRNHTRNAUTOCAD
ft
ra
D
Trong mi d n VBA, ThisDrawing l mt i tng kiu Document v lun c sn. Vi i
tng ThisDrawing ny, ngi dng khng cn phi khai bo hoc gn gi tr cho i tng
ny m c th truy cp c ngay do n lun tn ti trong d n VBA. ThisDrawing tham
chiu n bn v hin hnh trong AutoCAD, ngha l nhng tc ng ln i tng ny s
tng ng vi vic tc ng ln bn v hin hnh trong AutoCAD. Mt i tng tng
195
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.
ft
ra
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
Cc i tng phi hnh hc l nhng i tng khng th nhn thy c, chng c s dng
trong AutoCAD thit lp cc thuc tnh cho i tng hnh hc. Nhng i tng phi hnh
hc hay gp l: Layer, Linetype, DimStyle, ... Cc i tng phi hnh hc thng c cha
trong cc tp i tng c tn tng ng, v d nh Layers, Linetypes, DimStyles,
Cch thc to ra mt i tng phi hnh hc l s dng phng thc Add ca i tng tp
i tng tng ng. V d sau s to ra mt Layer mi c tn l ABC:
Layers.Add ("ABC")
hiu chnh v truy vn cc i tng phi hnh hc, s dng cc phng thc v thuc tnh
ring trong tng i tng tng ng. V d sau s thay i mu ca Layer ABC thnh mu
:
196
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 198.
4.2.5. i tng hnh hc
ft
ra
Gii thch
ArrayPolar
ArrayRectangular
Copy
GetBoundingBox
Highlight
IntersectWith
Mirror
Move
Rotate
ScaleEntity
Update
197
GIOTRNHTNGHOTHITKCUNG
Ccthuctnhcaitnghnhhc
Thuc tnh
Gii thch
Color
Layer
Linetype
LinetypeScale
Lineweight
Xc nh b dy nt v ca i tng c chn.
Visible
D
5.1.1. To mi, M, Lu v ng bn v
Nhng thao tc ny c thc hin thng qua vic truy cp n tp i tng Documents v
i tng Document.
to mt bn v mi, hoc m mt bn v c, ta phi s dng cc phng thc trong tp
i tng Documents. Phng thc Add s to mt bn v mi v thm bn v vo tp i
tng Documents. Phng thc Open s m mt bn v c v cng s thm bn v vo
tp i tng Documents. Ngoi ra cn c phng thc Close trong tp i tng Documents
dng ng tt cc cc bn v ang m trong phin lm vic ca AutoCAD.
ft
ra
Mbnv
Gii thch
Name
L chui k t cha ng dn y n tp bn v cn m.
ReadOnly
198
CHNGV:LPTRNHTRNAUTOCAD
If Err.Description <> "" Then
Thng
li
MsgBox "File " & dwgName & " does not exist."
Err.Clear
End If
End Sub
bo
khi
Tobnvmi
to bn v mi, s dng phng thc Add c trong tp i tng Documents. Gi tr tr v
ca phng thc ny l mt i tng kiu Document cha bn v va c to. C php ca
phng thc Open nh sau:
Set RetVal = Documents.Add([TemplateName])
D
Tham s
Gii thch
TemplateName
RetVal
ft
ra
Sub NewDrawing()
Dim docObj As AcadDocument
Set docObj =Documents.Add
End Sub
To bn v mi
Lubnv
Tham s
Gii thch
Object
FileName
199
GIOTRNHTNGHOTHITKCUNG
FileType
acR14_DXF
acR15_DWG
acR15_DXF
Sub SaveActiveDrawing()
Lu bn v hin hnh s dng tn tp sn c
ThisDrawing.Save
Lu bn v s dng tn khc
ThisDrawing.SaveAs "MyDrawing.dwg"
End Sub
ft
ra
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
Tham s
Gii thch
object
SaveChanges
200
CHNGV:LPTRNHTRNAUTOCAD
FileName
Sub CloseDrawing()
If MsgBox("Bn c mun ng bn v: " & ThisDrawing.WindowTitle, _
vbYesNo + vbQuestion) = vbYes Then
If ThisDrawing.FullName <> "" Then
ThisDrawing.Close SaveChanges:=True
ng bn v hin hnh
Else
MsgBox(ThisDrawing.Name & " cha c lu nn khng th ng!")
End If
End If
End Sub
ft
ra
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.
201
GIOTRNHTNGHOTHITKCUNG
ft
ra
Sub ConnectToAcad()
Dim acadApp As AcadApplication
On Error Resume Next
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
202
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
ft
ra
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
203
GIOTRNHTNGHOTHITKCUNG
Phng thc ny s phng mn hnh bn v theo mt hnh ch nht do ngi dng chn trn
mn hnh.
on m sau minh ho cch s dng phng thc ny:
Application.ZoomPickWindow
ZoomWindow
Phng thc ny thc hin thu phng mn hnh bn v theo mt hnh ch nht c xc nh
trc. C php ca phng thc ny nh sau:
Application.ZoomWindow Di_Tri, Trn_Phi
Tham s
Gii thch
D
Di_Tri
Trn_Phi
ft
ra
Sub VD_ZoomWindow()
Khai bo bin cha to cc im gc
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Gn to cho cc im gc
point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0
point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0
Thc hin phng thc ZoomWindow
ZoomWindow point1, point2
End Sub
ZoomScaled
Tham s
Gii thch
Scale
ScaleType
acZoomScaledRelative
204
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
Trong mt chng trnh, giao din ngi s dng thao tc vi chng trnh l mt b phn
rt quan trng v khng th thiu. Thng qua giao din, ngi s dng c th nhp d liu v
iu khin chng trnh hot ng, cn chng trnh, cng thng qua giao din, s hng dn
cho ngi dng cch thao tc v trnh by kt qu thc hin ca n cho ngi dng.
ft
ra
C nhiu cch thit k giao din nhp d liu cho chng trnh, nh s dng cc hp thoi
chun (nh InputBox hoc MsgBox) hay thng qua h thng cc hp thoi ngi dng
(UserForm). Khi lp trnh VBA trong AutoCAD, bi chng trnh s hot ng da trn nn l
AutoCAD cho nn vic thit k mt giao din cho php ngi dng tng tc vi chng trnh
ngay trong giao din ca AutoCAD l mt nhu cu cn thit. Hn na iu ny c AutoCAD
v VBA h tr thng qua i tng Utility (l mt thuc tnh ca i tng Document). Vi
nhng phng thc ca i tng Utility ngi lp trnh c cho php ngi s dng thao tc
vi chng trnh VBA thng qua dng lnh ca AutoCAD cng nh mn hnh ha ca
AutoCAD. Cc phng thc ny s hin th mt dng nhc trn dng lnh ca AutoCAD v
yu cu ngi s dng nhp vo nhiu kiu d liu khc nhau (tu thuc vo tng loi phng
thc) t bn phm hoc chn trn mn hnh ha ca AutoCAD.
Cc phng thc ngi dng nhp d liu vo t bn phm hay bng chut thng c dng
GetXXX, tu thuc vo loi d liu m ngi lp trnh cn ly. Di y l mt s phng
thc thng c s dng:
Prompt
Sub VDPrompt()
Utility.Prompt ("Vi du phuong thuc Prompt")
End Sub
205
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:
Sub VDPrompt()
Utility.Prompt (vbCrLf & "Vi du phuong thuc Prompt")
End Sub
ft
ra
GetString
Tham s
Gii thch
HasSpaces
Tham s cho php ngi dng nhp vo du cch. Nu bng TRUE, ngi dng c
th nhp du cch trong dng lnh, kt thc nhp phi nhn phm ENTER. Nu
bng FALSE, ngi dng khng th nhp du cch cho chui k t, khi ngi dng
nhn phm SPACE hoc ENTER th s kt thc qu trnh nhp.
Prompt
Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal
206
CHNGV:LPTRNHTRNAUTOCAD
' Gi tr nhp vo khng th cha du cch
returnString = ThisDrawing.Utility.GetString _
(False, "Nhp chui (nhn SPACE hoc ENTER kt thc): ")
MsgBox "Chui va nhp l: '" & returnString & "'"
' Nhc ngi dng nhp
' Gi tr nhp vo c th cha du cch
returnString = ThisDrawing.Utility.GetString _
(True, " Nhp chui (nhn ENTER kt thc): ")
MsgBox "Chui va nhp l: '" & returnString & "'"
End Sub
GetInteger,GetReal
Phng thc ny c s dng khi mun ngi dng nhp mt s nguyn (phng thc
GetInteger) hoc mt s thc (phng thc GetReal). C php ca cc phng thc ny nh
sau:
RetVal = Utility.GetInteger([Prompt])
RetVal = Utility.GetReal([Prompt])
Gii thch
Prompt
Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal
L bin kiu Double hoc Interger (tu thuc vo phng thc c s dng), cha
gi tr l s ngi dng va nhp vo.
ft
ra
Tham s
Nu ngi dng nhp vo mt t kho hoc khng nhp s m nhn ngay phm ENTER kt
thc nhp liu, AutoCAD s pht sinh li User input keyword..
V d sau minh ho cch s dng cc phng thc ny:
Sub Example_GetReal()
' V d sau s dng phng thc GetReal v phng thc GetInteger
' ngi dng nhp vo s thc v s nguyn.
Dim returnReal As Double
Dim returnInteger As Integer
GetAngle
207
GIOTRNHTNGHOTHITKCUNG
Phng thc ny c s dng khi mun ngi lp trnh nhp vo mt gi tr gc bng cch
nhp gi tr ngay trn dng lnh hoc chn mt gc trn mn hnh. C php ca phng thc
ny nh sau:
RetVal = Utility.GetAngle([Point][, Prompt])
Tham s
Gii thch
Point
Prompt
Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal
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).
ft
ra
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 phng
nhp ()
thc GetAngle
0.0
-90
1.5708
180
3.14159
90
4.71239
208
CHNGV:LPTRNHTRNAUTOCAD
Nu ngi dng khng nhp gi tr no c m nhn ENTER, AutoCAD s pht sinh li User
input keyword.
V d sau minh ho cch s dng phng thc GetAngle:
Sub Example_GetAngle()
Dim retAngle As Double
' Ly v gc tnh bng radian
retAngle = ThisDrawing.Utility.GetAngle(, "Nhp vo gc: ")
MsgBox "Gc va c nhp l: " & retAngle
' Ly v gc tnh bng radian vi to im u cho trc
Dim basePnt(0 To 2) As Double
basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0#
retAngle = ThisDrawing.Utility.GetAngle(basePnt, "Nhp vo gc: ")
MsgBox "Gc va c nhp l: " & retAngle
D
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:
ft
ra
Tham s
Gii thch
Point
Prompt
Sub Example_GetPoint()
' V d minh ha cch s dng phng thc GetPoint.
Dim returnPnt As Variant
209
GIOTRNHTNGHOTHITKCUNG
GetDistance
Phng thc GetDistance c s dng ngi dng nhp vo gi tr khong cch. Ngi
dng c th nhp mt s thc trc tip t dng lnh hoc c th chn hai im trn mn hnh
bn v, AutoCAD s t ng tr v gi tr s thc l khong cch gia hai im. C php ca
phng thc GetDistance nh sau:
RetVal = Utility.GetDistance([Point][, Prompt])
Gii thch
Point
ft
ra
Tham s
Prompt
Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
RetVal
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.
210
CHNGV:LPTRNHTRNAUTOCAD
Sub Example_GetDistance()
' V d minh ha cch s dng phng thc GetDistance.
Dim returnDist As Double
' Nhp v tr v gi tr khong cch, c s dng dng nhc
returnDist = ThisDrawing.Utility.GetDistance(, "Nhap khoang cach: ")
MsgBox "Khoang cach vua nhap la: " & returnDist & vbCrLf & _
"(Nhap gia tri tiep theo co su dung diem co so.)"
End Sub
GetEntity
Phng thc GetEntity c s dng ly mt i tng ca AutoCAD bng cch cho php
ngi dng chn trc tip bng chut trn mn hnh ha. C php ca phng thc nh sau:
Utility.GetEntity Object, PickedPoint[, Prompt]
ft
ra
Tham s
Gii thch
Object
Pickedpoint
Prompt
Tham s tu chn, l chui k t s hin trn dng lnh AutoCAD nhc ngi
dng nhp d liu.
Phng thc GetEntity yu cu ngi dng chn i tng bng cch kch chut trn mn hnh
bn v. Nu ngi dng chn mt i tng, i tng s c tr v thng qua tham s
Object v to ca im m ngi dng chn s c tr v trong tham s PickedPoint. Nu
im m ngi dng kch chut khng phi i tng th phng thc ny s lm pht sinh li.
Vi phng thc ny, ngi dng cn c th chn nhanh i tng c v sau cng nht
bng cch nhp k t L hoc l ti dng lnh AutoCAD. Khi dng lnh L ny, nu i
tng c v cui cng khng nhn thy trn mn hnh bn v (i tng c thuc tnh
Visible=FALSE) hoc i tng ang nm trong mt lp b ng bng (FrozenLayer) th
i tng cui cng nht c v nm trn mt lp bnh thng s c chn. Tuy nhin, cch
ng x ny c th khc nhau trong tng phin bn ca AutoCAD, chng hn nh i vi
AutoCAD 2007, vi lnh L, phng thc GetEntity c th tr v mt i tng khng c
nhn thy trn mn hnh bn v.
211
GIOTRNHTNGHOTHITKCUNG
ft
ra
Loi bin c tc dng vi ton b ng dng AutoCAD: vi loi bin ny, khi ngi thay
i gi tr ca bin, tt c cc bn v ang c m s chu tc ng do s thay i ca
bin ny. Cc bin kiu ny c lu trong bn thn chng trnh AutoCAD.
Loi bin c tc dng vi mt bn v AutoCAD: vi loi bin ny, khi ngi dng thay
i gi tr ca bin, ch c bn v hin hnh (bn v ni thc hin thao tc thay i gi tr
ca bin) l chu tc ng do s thay i ca bin. Cc bin h thng kiu ny c lu
ngay bn trong tp bn v.
PhngthcGetVariable
Phng thc ny dng ly v gi tr hin hnh ca mt bin h thng trong AutoCAD. C
php ca phng thc ny nh sau:
RetVal = object.GetVariable(Name)
212
CHNGV:LPTRNHTRNAUTOCAD
Tham s
Gii thch
Name
object
RetVal
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
ft
ra
Phng thc ny dng thit lp gi tr cho bin h thng trong AutoCAD. C php ca
phng thc ny nh sau:
object.SetVariable Name, Value
Tham s
Gii thch
Name
Value
object
Bin h thng trong AutoCAD rt a dng vi nhiu kiu d liu khc nhau: s thc, s
nguyn, chui, Chnh v vy, khi gn gi tr cho bin h thng, cn phi ch sao cho kiu
d liu ca bin h thng cn gn v kiu gi tr ca tham s Value phi tng thch nhau, nu
khng s lm pht sinh li khi thc thi chng trnh.
V d sau minh ho cch thc gn gi tr cho bin h thng s dng phng thc SetVariable:
Sub Example_SetVariable()
' V d sau gn gi tr cho nhiu bin h thng khc nhau,
' mi bin c mt kiu d liu khc nhau.
Dim TenBien As String
Dim GiaTri As Variant
' Gn gi tr bin MIRRTEXT (kiu s nguyn) bng 1.
' Ch rng cn phi gn gi tr thch hp vi
213
GIOTRNHTNGHOTHITKCUNG
' kiu d liu ca bin h thng.
Dim intData As Integer
TenBien = "MIRRTEXT"
intData = 0
GiaTri = intData
ThisDrawing.SetVariable TenBien, GiaTri
ft
ra
Ccbinhthngthngdng
Gii thch
ANGBASE
AUPREC
DIMTIH
FILLETRAD
INSBASE
To im chn mc nh.
CELTSCALE
LTSCALE
214
CHNGV:LPTRNHTRNAUTOCAD
MIRRTEXT
TILEMODE
Xc nh khng gian hin hnh l khng gian m hnh hay khng gian in.
Bng 0: khng gian in; bng 1: khng gian m hnh.
ZOOMFACTOR
TEXTFILL
Xc nh 2 im to nn ng knh ng trn,
ft
ra
Hoc to mt cung trn, trong AutoCAD, ngi dng c ti 11 phng thc la chn
nh hnh bn.
Tuy nhin, vi VBA trong AutoCAD, mi i tng ch c th c to
bng mt phng thc vi mt loi thng s nht nh, v d nh i
vi ng trn, ngi lp trnh ch c th to ra vi cc thng s l v tr
tm v bn knh ca ng trn.
Hu ht cc i tng hnh hc trong AutoCAD, tuy khc nhau v hh
dng, nhng cch to ra chng bng VBA li tng t nhau, cho nn
trong phn ny ch gii thiu cch thc to ra mt s i tng hnh hc
chnh trong AutoCAD, bao gm:
i tng Point;
215
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:
Gi tr tng ng
acModelSpace
acPaperSpace
Hng s
ft
ra
Sub VD_ActiveSpace()
If ThisDrawing.ActiveSpace = acModelSpace Then
MsgBox "Khng gian hin hnh l khng gian m hnh."
Else
MsgBox "Khng gian hin hnh l khng gian in."
End If
End Sub
Ngoi ra ngi dng cn c th chuyn i gia khng gian in v khng gian m hnh bng
cch gn gi tr cho thuc tnh ActiveSpace. on m sau s thc hin thao tc ny:
Sub VD_ChuyenKhongGian()
With ThisDrawing
If .ActiveSpace = acModelSpace Then
.ActiveSpace = acPaperSpace
Else
.ActiveSpace = acModelSpace
End If
End With
End Sub
Sub VD_ChuyenKhongGian()
ThisDrawing.ActiveSpace = (ThisDrawing.ActiveSpace + 1) Mod 2
End Sub
216
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:
Set Bin_i_tng = Object.AddXXX(Danh_sch_tham_s)
ft
ra
217
GIOTRNHTNGHOTHITKCUNG
D
ToitngPoint
Gii thch
Point
RetVal
ft
ra
Tham s
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.
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
218
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
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:
Tham s
Gii thch
StartPoint, EndPoint
RetVal
ft
ra
219
GIOTRNHTNGHOTHITKCUNG
' V i tng
If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEnt = ThisDrawing.ModelSpace.AddLine(diemDau, diemCuoi)
Else
Set objEnt = ThisDrawing.PaperSpace.AddLine(diemDau, diemCuoi)
End If
' Cp nht i tng hin th trn mn hnh bn v
objEnt.Update
End Sub
ToitngLWPolyline,Polyline
LWPolyline l i tng dng biu din ng a tuyn phng v do ch dng th
hin cc i tng trong khng gian 2D. iu ny gip cho d liu ca i tng LWPolyline
gn nh hn v cc thao tc ho s thc hin nhanh hn. cng chnh l l do ti sao i
tng ny l c tn l LightWeight - Nh.
Gii thch
VerticesList
RetVal
ft
ra
Tham s
nh ca a
points(1) =
points(3) =
points(5) =
points(7) =
points(9) =
tuyn phng
1
' To
2
' To
3
' To
2
' To
4
' To
nh
nh
nh
nh
nh
1
2
3
4
5
220
CHNGV:LPTRNHTRNAUTOCAD
Ngoi ra, vi VBA trong AutoCAD, ngi dng cng c th to ng a tuyn phng vi
phng thc AddPolyline. C php ca phng thc ny tng t nh ca phng thc
AddLightweightPolyline:
Set RetVal = object.AddPolyline(VerticesList)
Gii thch
VerticesList
RetVal
ft
ra
Tham s
'
'
'
'
'
To
To
To
To
To
im
im
im
im
im
1
2
3
4
5
221
GIOTRNHTNGHOTHITKCUNG
VBA trong AutoCAD cho php to nhiu loi i tng dng ng cong khc nhau, trong
c hai loi i tng rt ph bin l Circle ng trn v Arc cung trn. Tt c cc phng
thc ny u to i tng trong mt phng XY.
ToitngCircle
to i tng Circle, s dng phng thc AddCircle. Phng thc ny s to mt ng
trn da trn thng s tm v bn knh ca ng trn:
Set RetVal = object.AddCircle(Center, Radius)
Gii thch
Center
Radius
RetVal
Tham s
ft
ra
ToitngArc
222
CHNGV:LPTRNHTRNAUTOCAD
to i tng Arc, s dng phng thc AddArc. Phng thc ny s to ra mt cung trn
da trn 4 thng s khc nhau xc nh v tr v kch thc ca cung trn:
Set RetVal = object.AddArc(Center, Radius, StartAngle, EndAngle)
Gii thch
Center
Radius
StartAngle,
EndAngle
RetVal
ft
ra
Tham s
trn
= 0: centerPoint(2) = 0
knh
bt u
kt thc
223
GIOTRNHTNGHOTHITKCUNG
' To i tng Arc trong khng gian m hnh
Set arcObj = ThisDrawing.ModelSpace.AddArc _
(centerPoint,
radius,
endAngleInRadian)
ZoomAll
End Sub
startAngleInRadian,
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.
ft
ra
Tham s
Gii thch
TextString
InsertionPoint
Height
RetVal
224
CHNGV:LPTRNHTRNAUTOCAD
End Sub
Tovnbnnhiudng(MText)
i vi cc on vn bn di v phc tp, nn s dng i tng vn bn nhiu dng MText.
Vn bn nhiu dng c b tr nm trn trong mt b rng nht nh nhng li c th m rng
v hn theo chiu ng. Ngoi ra, i tng MText cn c th c nh dng chi tit n tng
t hoc tng k t.
Mc d c nhiu dng nhng chng thuc v mt i tng duy nht. i tng ny c th di
chuyn, xoay, xa, sao chp, ly i xng, co gin hoc thay i t l.
to i tng MText, s dng phng thc AddMText. C php ca phng thc ny nh
sau:
Set RetVal = object.AddMText(InsertionPoint, Width, Text)
D
Gii thch
InsertionPoint
Width
TextString
RetVal
ft
ra
Tham s
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
225
GIOTRNHTNGHOTHITKCUNG
Nhn chung, qu trnh lm vic vi i tng SelectionSet cn phi tri qua cc bc sau:
D
1. Khai bo i tng SelectionSet,
Vic to i tng SelectionSet c thc hin d dng thng qua phng thc Add c trong
tp i tng SelectionSets.
ft
ra
Tham s
Gii thch
Object
L tp i tng SelectionSets
Name
RetVal
Sub VD_TaoSelectionSet()
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("MySSet")
SelectionSet
End Sub
Khai bo bin
To
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:
2:
3:
4:
5:
6:
226
Sub VD_GetXData()
Dim sset As AcadSelectionSet
On Error Resume Next
Set sset = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
CHNGV:LPTRNHTRNAUTOCAD
7:
Set sset = ThisDrawing.SelectionSets.Add("MySelectionSet")
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
Phng thc ny dng thm tng i tng vo trong SelectionSet. C php ca phng
thc ny nh sau:
object.AddItems Items
ft
ra
Tham s
Gii thch
Object
L i tng SelectionSet.
Items
227
GIOTRNHTNGHOTHITKCUNG
points(2) = 9: points(3) = 2
points(4) = 3: points(5) = 5
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
Set objs(0) = plineObj
Thm vo mng cc i tng
' To ng thng trong khng gian m hnh
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0
endPoint(0) = 2: endPoint(1) = 2: endPoint(2) = 0
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
Set objs(1) = lineObj
Thm vo mng cc i tng
ft
ra
PhngthcSelect
Phng thc Select l phng thc c bn trong i tng SelectionSet. Vi phng thc
thc ny, ngi dng s c nhiu la chn khc nhau khi chn i tng tu thuc vo cc
tham s ca phng thc. C php ca phng thc ny nh sau:
object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]
Tham s
Gii thch
Object
L i tng SelectionSet
Mode
Point1
Point2
FilterType,
FilterData
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
228
Gi tr
ngha
CHNGV:LPTRNHTRNAUTOCAD
acSelectionSetWindow
acSelectionSetCrossing
acSelectionSetPrevious
acSelectionSetLast
acSelectionSetAll
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
ft
ra
PhngthcSelectAtPoint
Tham s
Gii thch
Object
L i tng SelectionSet
Point
FilterType,
FilterData
229
GIOTRNHTNGHOTHITKCUNG
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:
ft
ra
Tham s
Gii thch
Object
L i tng SelectionSet
Mode
PointsList
FilterType,
FilterData
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
acSelectionSetWindowPolygon
acSelectionSetCrossingPolygon
230
CHNGV:LPTRNHTRNAUTOCAD
ft
ra
Sub VD_SelectByPolygon()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If
' Xc nh cc nh ca ng a tuyn
Dim pointsArray(0 To 11) As Double
pointsArray(0) = 28.2: pointsArray(1) = 17.2: pointsArray(2) = 0
pointsArray(3) = -5: pointsArray(4) = 13: pointsArray(5) = 0
pointsArray(6) = -3.3: pointsArray(7) = -3.6: pointsArray(8) = 0
pointsArray(9) = 28: pointsArray(10) = -3: pointsArray(11) = 0
' Xc nh ch chn i tng
Dim mode As Integer
mode = acSelectionSetFence
' Chn i tng
ssetObj.SelectByPolygon mode, pointsArray
End Sub
PhngthcSelectOnScreen
Phng thc ny s hin th dng nhc Select object: ti dng lnh v cho php ngi
dng chn i tng trc tip trn mn hnh bn v, cch thao tc trn mn hnh AutoCAD ny
tng t nh khi s dng cc lnh thng thng khc ca AutoCAD, m c yu cu la chn
i tng (v d nh lnh Copy). C php ca phng thc ny nh sau:
231
GIOTRNHTNGHOTHITKCUNG
object.SelectOnScreen [FilterType] [, FilterData]
Tham s
Gii thch
Object
L i tng SelectionSet
FilterType,
FilterData
Sub VD_SelectOnScreen()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If
ft
ra
Nh phn trc trnh by, thc cht i tng SelectionSet l mt tp i tng dng
nhm cc i tng hnh hc li vi nhau nhm mc ch hiu chnh cc i tng hnh hc
d dng hn. Do bn thn l mt tp i tng nn cch thc truy cp n tt c cc i tng
bn trong SelectionSet tt nht l s dng cu trc lp For each next.
on m lnh sau s yu cu ngi s dng thc hin chn i tng trn mn hnh bn v,
sau tin hnh i mu cc i tng c chn thnh mu xanh.
Sub VD_SelectOnScreen()
' To i tng SelectionSet
Dim ssetObj As AcadSelectionSet
On Error Resume Next
Set ssetObj = ThisDrawing.SelectionSets("MySelectionSet")
If Err <> 0 Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Add("MySelectionSet")
Else
ssetObj.Clear
End If
232
CHNGV:LPTRNHTRNAUTOCAD
' on chng trnh x l cc i tng s nm y
' Trong v d ny, cc i tng s c i mu thnh mu xanh
ent.Color = acBlue
ent.Update
Next ent
End Sub
Tu theo nhu cu m ngi lp trnh phi chn cho mnh mt tiu ch lc i tng thch hp.
Di y s lit k danh sch cc m DXF tng ng vi mt s kiu lc i tng thng s
dng:
ft
ra
M DXF
ngha
-4
0
1
2
6
7
8
Chui th hin kiu i tng, chng hn nh: Line, Polyline, LWPolyline, Spline,
Circle, Arc, Text, Mtext,...
10
62
Lctheomtiukin
233
GIOTRNHTNGHOTHITKCUNG
' 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
Ton
t
AND
OR
XOR
NOT
ft
ra
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:
Gi
tr Gi tr kt S
lng ngha
bt u
thc
iu kin
<AND
AND>
<OR
OR>
<XOR
XOR>
<NOT
NOT>
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")
234
CHNGV:LPTRNHTRNAUTOCAD
' To b lc i tng:
Dim gpCode(8) As Integer
Dim dataValue(8) As Variant
gpCode(0) = -4: dataValue(0) = "<and"
gpCode(1)
gpCode(2)
gpCode(3)
gpCode(4)
=
=
=
=
-4:
0:
0:
-4:
gpCode(5) = -4:
gpCode(6) = 8:
gpCode(7) = -4:
dataValue(1) =
dataValue(2)
dataValue(3)
dataValue(4) =
"<or"
= "line"
= "circle"
"or>"
dataValue(5) = "<not"
dataValue(6) = "Layer1"
dataValue(7) = "not>"
ft
ra
Phng thc ny thc hin loi b mt hoc nhiu i tng ra khi SelectionSet. Cc i
tng ny s khng nm trong SelectionSet na nhng vn cn tn ti trong bn v. C php
ca phng thc ny nh sau:
object.RemoveItems Objects
Tham s
Gii thch
Object
L i tng SelectionSet
Objects
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
235
GIOTRNHTNGHOTHITKCUNG
D
Trong , object l i tng SelectionSet.
ft
ra
Phng thc thng dng thay i v hnh dng, kch thc, v tr ca i tng, hoc
thm ch c th to mi i tng da trn i tng c. Thng thng, mi phng
thc u c nhng tham s ring.
Thuc tnh thng dng thay i cc tnh cht lin quan n hin th ca chnh i
tng trn mn hnh hoc khi in, chng hn nh mu sc, kiu ng, nt,
Do c nhng khc bit nh vy nn trong phn ny, trc ht s gii thiu cch thc hiu
chnh chung cho tt c cc i tng hnh hc bao gm:
Sao chp, xo, ph v, di chuyn, ly i xng, off-set, quay v co gin i tng;
Thc hin nhn bn i tng dng cc v dng ch nht;
Thao tc vi d liu m rng - XData;
V tip s trnh by mt s thao tc hiu chnh i tng theo cc phng thc v thuc tnh
ring ca i tng:
Hiu chnh ng a tuyn;
Hiu chnh vn bn n.
Trong cc phin bn trc AutoCAD 2006, mi khi hiu chnh i tng bng m lnh, nhng
thay i s cha c hin th trn mn hnh cho n khi ngi dng gi phng thc
Update ca i tng , hoc gi phng thc Update ca i tng Application, hoc
236
CHNGV:LPTRNHTRNAUTOCAD
D
Set RetVal = object.Copy
Tham s
Gii thch
Object
RetVal
ft
ra
V d sau to mt hnh trn sau thc hin sao chp hnh trn . Cn lu l sau khi thc
thi macro ny, ta ch nhn thy trn mn hnh bn v mt hnh trn nhng thc cht l c hai
hnh trn vi v tr trng nhau.
Sub VD_Copy()
' To hnh trn
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
' Sao chp i tng
Dim copyCircleObj As AcadCircle
Set copyCircleObj = circleObj.Copy()
End Sub
XoitngPhngthcDelete
237
GIOTRNHTNGHOTHITKCUNG
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
On Error Resume Next
' Chn i tng trn mn hnh bn v
ThisDrawing.Utility.GetEntity _
objDrawingObject, varEntityPickedPoint, "Chn i tng xo: "
If objDrawingObject Is Nothing Then
MsgBox "Bn cha chn i tng."
Exit Sub
End If
' Xo i tng c chn
objDrawingObject.Delete
End Sub
D
PhvitngPhngthcExplode
S dng phng thc Explode ph v mt i tng thnh cc i tng con. Phng thc
ny tr v mt mng tham chiu n cc i tng con, l cc i tng cu thnh nn i
tng gc. C php ca phng thc ny nh sau:
Set RetVal = object.Explode
Gii thch
Object
RetVal
ft
ra
Tham s
238
CHNGV:LPTRNHTRNAUTOCAD
points(4) = 2: points(5) =
points(6) = 3: points(7) =
points(8) = 4: points(9) =
points(10) = 4: points(11)
2
2
4
= 1
DichuynitngPhngthcMove
S dng phng thc Move tnh tin i tng trong khng gian ba chiu. C php ca
phng thc ny nh sau:
ft
ra
Tham s
Gii thch
Object
Point1, Point2
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
239
GIOTRNHTNGHOTHITKCUNG
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
' Xc nh 2 im to nn vec-t tnh tin
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = 2: point2(1) = 0: point2(2) = 0
MsgBox "Di chuyn theo trc X 2 n v."
ZoomAll
MsgBox "Qu trnh dch chuyn kt thc."
End Sub
LyixngPhngthcMirror
ft
ra
Tham s
Gii thch
Object
Point1, Point2
RetVal
240
CHNGV:LPTRNHTRNAUTOCAD
(MIRRTEXT=1)
(MIRRTEXT=0)
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
' Xc nh trc i xng
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 4.25: point1(2) = 0
point2(0) = 4: point2(1) = 4.25: point2(2) = 0
ft
ra
MsgBox "Ly i xng ng a tuyn.", , "VD Mirror"
' Thc hin ly i xng ng a tuyn
Dim mirrorObj As AcadLWPolyline
Set mirrorObj = plineObj.Mirror(point1, point2)
mirrorObj.Color = acRed
ZoomAll
MsgBox "Mirror completed.", , " VD Mirror"
End Sub
LyOffsetPhngthcOffset
Tham s
Gii thch
Object
L i tng gc s c ly Off-set.
241
GIOTRNHTNGHOTHITKCUNG
Distance
RetVal
Sub VD_Offset()
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
MsgBox "Off-set a tuyn vi khong cch 0.25.", , "V d Offset"
ft
ra
ZoomAll
End Sub
XoayitngPhngthcRotate
Tham s
Gii thch
Object
L i tng s c xoay.
BasePoint
RotationAngle
242
CHNGV:LPTRNHTRNAUTOCAD
points(0) = 1: points(1) = 2
points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
MsgBox "Xoay gc 45 .", , "VD Rotate "
' nh gc xoay v to im c s
Dim basePoint(0 To 2) As Double
Dim rotationAngle As Double
basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
rotationAngle = 45/180*3.1416
' 45
ThayitlitngPhngthcScaleEntity
ft
ra
Tham s
Gii thch
Object
L i tng s c thay i t l.
BasePoint
ScaleFactor
243
GIOTRNHTNGHOTHITKCUNG
itngvivtr
vkchthcmi
itngvivtrv
kchthcbanu
ft
ra
Sub VD_ScaleEntity()
' To ng a tuyn
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 2
points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
MsgBox "Thay i t l vi h s 0.5", , "V d ScaleEntity"
' Xc nh cc tham tham s ca phng thc
Dim basePoint(0 To 2) As Double
Dim scalefactor As Double
basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
scalefactor = 0.5
' Thay i t l ng a tuyn
plineObj.ScaleEntity basePoint, scalefactor
ZoomAll
End Sub
244
CHNGV:LPTRNHTRNAUTOCAD
ThuctnhColorMucaitng
S dng thuc tnh Color ly hoc gn mu cho mt i tng hnh hc. Thuc tnh ny
cng c trong i tng Layer vi ngha tng ng.
object.Color
Tham s
Gii thch
Object
Color
ngha
acByBlock
acRed
Mu .
acYellow
Mu vng.
acGreen
Mu xanh l.
acCyan
Mu xanh lam.
acBlue
Mu xanh da tri.
acMagenta
Mu tm
acWhite
acByLayer
256
ft
ra
Hng s
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
245
GIOTRNHTNGHOTHITKCUNG
Tham s
Gii thch
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):
ft
ra
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
ThuctnhLineTypeKiungcaitng
Tham s
Gii thch
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()
246
CHNGV:LPTRNHTRNAUTOCAD
Dim ent As AcadEntity
Dim P(2) As Double
' Chn i tng trn mn hnh
On Error Resume Next
ThisDrawing.Utility.GetEntity ent, P, "Chon DT can doi kieu duong: "
If Not (ent Is Nothing) Then
' Chuyn kiu ng cho i tng
ent.Linetype = "DASHED2"
ent.Update
End If
End Sub
CH c th phi iu chnh gi tr ca bin h thng LTSCALE th mi quan st c cc
kiu ng khng phi l nt lin.
ThuctnhLineweightChiudyntin
B dy (mm)
Hng s
dy Hng s
(mm)
ft
ra
(mm)
B dy
acLnWtByLayer
Theo lp
acLnWt020
0.2
acLnWt080
0.8
acLnWtByBlock
Theo Block
acLnWt025
0.25
acLnWt090
0.9
acLnWtByLwDefault
Mc nh
acLnWt030
0.3
acLnWt100
1.0
acLnWt000
0.0
acLnWt035
0.35
acLnWt106
1.06
acLnWt005
0.05
acLnWt040
0.4
acLnWt120
1.2
acLnWt009
0.09
acLnWt050
0.5
acLnWt140
1.4
acLnWt013
0.13
acLnWt053
0.53
acLnWt158
1.58
acLnWt015
0.15
acLnWt060
0.6
acLnWt200
2.0
acLnWt018
0.18
acLnWt070
0.7
acLnWt211
2.11
Sub VD_LineWeight()
Dim circleObj As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius As Double
' Xc nh cc thng s ca ng trn
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
' To ng trn trong khng gian m hnh
247
GIOTRNHTNGHOTHITKCUNG
Set
circleObj
=
ThisDrawing.ModelSpace.AddCircle(centerPoint,
radius)
ZoomAll
' Hin th chiu dy hin hnh ca ng trn
MsgBox "Chieu day hien hanh la: " & circleObj.Lineweight
' Thay i chiu dy ca ng trn
circleObj.Lineweight = acLnWt211
circleObj.Update
MsgBox " Chieu day hien hanh la: " & circleObj.Lineweight
End Sub
Ngoi nhng thuc tnh nh gii thiu trn, ngi lp trnh c th s dng cc thuc tnh
sau hiu chnh i tng:
i tng p dng
Gii thch
Center
Arc, Circle.
Radius
Arc, Circle.
Area
Length
Line
TextString
MText, Text.
ft
ra
Thuc tnh
Alignment
Text.
Rotation
DimAligned, DimAngular,
DimDiametric,
DimOrdinate, DimRadial,
DimRotated, MText, Text
Gii thch
Area
Closed
ConstantWidth
Elevation
248
CHNGV:LPTRNHTRNAUTOCAD
Coordinate(i)
Coordinates
Phng thc
Gii thch
SetWidth
GetWidth
D
object.AddVertex Index, Point
Gii thch
Object
L i tng LWPolyline.
Index
Point
ft
ra
Tham s
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
249
GIOTRNHTNGHOTHITKCUNG
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
ft
ra
' 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
250
CHNGV:LPTRNHTRNAUTOCAD
MsgBox "Thuoc tinh TextString la: " & textObj.TextString, _
vbInformation, "Vi du TextString"
textObj.TextString = "Chao cac ban!"
textObj.Update
MsgBox " TextString duoc thay doi thanh: " & textObj.TextString, _
vbInformation, "Vi du TextString"
End Sub
Thayichcanhhng
thay i ch canh hng ca vn bn n, s dng thuc tnh Alignment. Gi tr ca
thuc tnh ny c th l mt trong nhng hng s acAlignment sau:
Hng s
Hng s
acAlignmentLeft
acAlignmentFit
acAlignmentMiddleCenter
acAlignmentCenter
acAlignmentTopLeft
acAlignmentMiddleRight
acAlignmentRight
acAlignmentTopCenter
acAlignmentBottomLeft
acAlignmentAligned
acAlignmentTopRight
acAlignmentBottomCenter
acAlignmentMiddle
acAlignmentMiddleLeft
acAlignmentBottomRight
Hng s
ft
ra
Hnh V-14: Minh ho cc hng s acAlignment.
Chnh v vy, khi thay i ch canh hng cho vn bn, cn phi xc nh r ch canh
hng xc nh to im chn ca vn bn cho hp l.
V d sau s minh ho cch thay i ch canh hng cho vn bn. Trong v d c to mt
im trong khng gian m hnh dng to im tham chiu thy r hn s thay i v tr
ca vn bn khi thit lp li ch canh hng
Sub VD_Alignment()
251
GIOTRNHTNGHOTHITKCUNG
Dim textObj As AcadText
Dim textString As String
Dim insPoint(0 To 2) As Double, aliPoint(0 To 2) As Double
Dim height As Double
Dim oldPDMODE As Integer
Dim pointObj As AcadPoint
' nh ngha i tng vn bn n
textString = "Hello, World."
insPoint(0) = 3: insPoint(1) = 3: insPoint(2) = 0
aliPoint(0) = 3: aliPoint(1) = 3: aliPoint(2) = 0
height = 0.5
' To i tng vn bn trong khng gian m hnh
Set textObj = ThisDrawing.ModelSpace.AddText _
(textString, insPoint, height)
' Lu kiu hin th im
oldPDMODE = ThisDrawing.GetVariable("PDMODE")
ft
ra
Lp l cc tng trong sut m trn ta c th t chc v nhm nhiu loi i tng hnh hc
khc nhau ca bn v, Vic sp xp cc lp v i tng trn lp gip qun l thng tin ca
bn v d dng hn.
Qu trnh v lun c thc hin trn mt lp no . c th l lp mc nh hoc mt lp
t to ra. Mi lp u c mt mu v kiu ng tng ng. Chng hn, ngi lp trnh c th
to ra mt lp m trn ch v cc ng trc v gn cho n mu xanh vi kiu ng l
CENTER. Tip , c khi no mun v cc ng trc ta ch cn chuyn sang lp v bt
u v. Khng nht thit l phi thit lp kiu ng v mu sc mi khi mun v mt ng
trc. Ngoi ra, cng c th tt lp ng trc nu khng mun hin th hoc in cc i tng
ny. S dng lp l mt trong nhng u im ln khi v bng AutoCAD so vi khi s dng vi
giy bt thng thng.
252
CHNGV:LPTRNHTRNAUTOCAD
Tng
in
g
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.
ft
ra
Tham s
Gii thch
Object
L tp i tng Layers.
Name
RetVal
253
GIOTRNHTNGHOTHITKCUNG
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.
ft
ra
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
layerNames = layerNames + ent.Name + vbCrLf
Next
MsgBox "Danh sach cac lop: " + vbCrLf + layerNames
End Sub
Qu trnh v lun c thc hin trn lp hin hnh. Sau khi chn lp thnh lp hin hnh, cc
i tng hnh hc mi c to ra u c t trn lp v tt c cc i tng ny u s
dng mu v kiu ng ca lp . Cn lu l: khng th thit lp thnh lp hin hnh cho
mt lp no nu nh lp ng cng (Freeze).
chn mt lp lm lp hin hnh, ta s dng thuc tnh ActiveLayer trong i tng
Document. on m di y s to mt lp mi v bin lp thnh lp hin hnh:
Dim newlayer As AcadLayer
Set newlayer = ThisDrawing.Layers.Add("LAYER1")
ThisDrawing.ActiveLayer = newlayer
254
CHNGV:LPTRNHTRNAUTOCAD
thy v lp n. Bng cch tt cc lp, ta trnh phi ti to li bn v mi khi lm tan lp. Khi
bt mt lp c tt, AutoCAD s v li cc i tng trn lp .
Bt tt c cc lp
Bt 2 lp
Bt 1 lp
ft
ra
Sub VD_LayerInvisble()
To ng trn
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
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
255
GIOTRNHTNGHOTHITKCUNG
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
ft
ra
GI xo cc i tng phi hnh hc (bao gm c i tng Layer) khng cn c
s dng trong bn v, c th s dng phng thc PurgeAll c trong i tng Document,
hoc s dng lnh Purge ti dng lnh ca AutoCAD.
Sub VD_LayerDelete()
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
layerObj.Delete
End Sub
256
CHNGV:LPTRNHTRNAUTOCAD
Tham s
Gii thch
Object
L tp i tng Linetypes
LineTypeName
FileName
' by li
ft
ra
Khi cn thc hin mt mt tc ng no n kiu ng, ngi lp trnh cn phi thc hin
thao tc truy xut n kiu ng . lm c vic ny, ngi lp trnh phi thc hin
thng qua tp i tng Linetypes c trong i tng Document v tt c cc kiu ng u
c cha trong tp i tng ny. Cch thc truy xut n kiu ng c tn l CENTER
c trong bn v nh sau:
Dim linetypeObj As AcadLineType
Set linetypeObj = ThisDrawing.Linetypes("CENTER")
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
257
GIOTRNHTNGHOTHITKCUNG
linetypeObj.Name = "Duong_Tam"
End If
End Sub
Sub VD_ActiveLinetype()
Dim linetypeObj As AcadLineType
Set linetypeObj = ThisDrawing.Linetypes("CENTER")
ThisDrawing.ActiveLinetype = linetypeObj
End Sub
5.6.4. Xo kiu ng c
ft
ra
258
CHNGV:LPTRNHTRNAUTOCAD
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.
Tokiungkchthc
ft
ra
Tham s
M t
Name
RetVal
nhdngkiungkchthc
259
GIOTRNHTNGHOTHITKCUNG
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
tr gip ca AutoCAD. Di y l danh sch cc bin h thng nh dng kiu ng kch
thc hay c s dng:
M t
DIMASZ
DIMBLK
ft
ra
Bin
"."
"_OBLIQUE"
"_OPEN"
DIMTSZ
DIMCLRD
DIMCLRE
DIMCLRT
DIMLWD
DIMDEC
Sdngkiungkchthc
Hoc
ThisDrawing.ActiveDimStyle = ThisDrawing.DimStyles("NewDimStyle")
260
CHNGV:LPTRNHTRNAUTOCAD
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
ft
ra
Hnh V-16: ng kch thc di.
Tham s
Gii thch
ExtLine1Point
ExtLine2Point
TextPosition
RetVal
261
GIOTRNHTNGHOTHITKCUNG
Sub VD_AddDimAligned()
Dim dimObj As AcadDimAligned
Dim P1(0 To 2) As Double
Dim P2 (0 To 2) As Double
Dim location(0 To 2) As Double
' nh ngha cc im trn ng kch thc
P1 (0) = 5#: P1 (1) = 5#: P1 (2) = 0#
P2 (0) = 10#: P2 (1) = 8#: P2 (2) = 0#
location(0) = 6.5: location(1) = 8#: location(2) = 0#
' To ng kch thc di trong khng gian m hnh
Set dimObj = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, location)
ZoomAll
End Sub
ngkchthchnhchiuDimRotated
ft
ra
Hnh V-17: ng kch thc hnh chiu.
Tham s
Gii thch
XLine1Point
XLine2Point
DimLineLocation
RotationAngle
RetVal
262
CHNGV:LPTRNHTRNAUTOCAD
ft
ra
ngkchthcgcDimAngular
Tham s
Gii thch
263
GIOTRNHTNGHOTHITKCUNG
AngleVertex
FirstEndPoint
SecondEndPoint
TextPoint
RetVal
ft
ra
ngkchthcbnknhDimRadial
Tham s
Gii thch
Center
264
CHNGV:LPTRNHTRNAUTOCAD
ChordPoint
LeaderLength
RetVal
ngkchthcngknhDimDiametric
ft
ra
Tham s
Gii thch
ChordPoint
265
GIOTRNHTNGHOTHITKCUNG
FarChordPoint
LeaderLength
RetVal
ft
ra
Ngoi cch nh dng ng kch thc bng kiu ng kch thc thng qua thuc tnh
StyleName nh trnh by mc S dng kiu ng kch thc trang 260, ngi dng
cn c th thay i cc nh dng ny thng qua cc thuc tnh tng ng ca i tng ng
kch thc. Di y l danh sch cc thuc tnh nh dng cho ng kch thc thng
dng:
Thuc tnh
M t
AngleFormat
Arrowhead1Type,
Arrowhead2Type
ArrowheadSize
CenterMarkSize
CenterType
DecimalSeparator
DimensionLineColor
DimensionLineWeight
ExtensionLineColor
Quy nh mu ca cc ng ging.
ExtensionLineExtend
ExtensionLineOffset
ExtensionLineWeight
Quy nh dy ca ng ging.
LinearScaleFactor
PrimaryUnitsPrecision
TextColor
266
CHNGV:LPTRNHTRNAUTOCAD
TextHeight
TextRotation
Gii thch
Object
XDataType
Xdata
ft
ra
Tham s
Bng di y l danh sch cc gi tr thng dng trong mng XDataType v ngha tng
ng:
Gi tr
ngha
1001
1000
Gi tr kiu String.
1003
Tn ca Layer.
1010
To 3D ca mt im
1040
Gi tr ca Double.
1071
Gi tr kiu Interger.
V d sau s to mt ng thng trong khng gian m hnh, sau tin hnh gn cc d liu
m rng cho ng thng .
Sub VD_SetXdata()
' To ng thng
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
267
GIOTRNHTNGHOTHITKCUNG
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll
' Khi to cc gi tr cho d liu m rng.
' Ch l d liu u tin phi l tn ca ng dng
' v m tng ng l 1001
Dim DataType(0 To 5) As Integer
Mng cha kiu d liu
Dim Data(0 To 5) As Variant
Mng cha d liu
Dim reals3(0 To 2) As Double
DataType(0)
DataType(1)
DataType(2)
DataType(3)
DataType(4)
reals3(0) =
DataType(5)
End Sub
ft
ra
Tham s
Gii thch
Object
AppName
XDataType
Xdata
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
Dim ent As AcadEntity
268
CHNGV:LPTRNHTRNAUTOCAD
Dim XDataType As Variant
Dim XData As Variant
Dim i As Integer
For Each ent In sset
ent.GetXData "", XDataType, XData
If Not IsEmpty(XDataType) Then
ThisDrawing.Utility.Prompt (vbCrLf & ent.ObjectName)
For i = LBound(XDataType) To UBound(XDataType)
ThisDrawing.Utility.Prompt vbCrLf & XDataType(i)
ThisDrawing.Utility.Prompt " : " & XData(i)
Next i
Else
ThisDrawing.Utility.Prompt vbCrLf & "Doi tuong khong chua XData"
End If
Next ent
End Sub
Qu trnh nhp d liu v tng tc vi ngi dng c h tr theo nhiu cch khc nhau
trong AutoCAD:
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 205
ft
ra
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 225 hoc mc Nhp d liu
ngi dng t dng lnh ca AutoCAD trang 205.
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 61 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.
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:
269
GIOTRNHTNGHOTHITKCUNG
ft
ra
PopupMenuItem l thnh phn cui cng trong cu trc phn cp i tng ca thanh
trnh n. Mi PopupMenuItem chnh l mt lnh trong h thng thanh trnh n. Khi
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:
270
CHNGV:LPTRNHTRNAUTOCAD
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
D
1. Phc tho cu trc trnh n nh sau:
ft
ra
271
GIOTRNHTNGHOTHITKCUNG
D
Cc on m c to trong bc
ca d n VBA.
v bc
ft
ra
Sub VD_TaoMenu2()
' nh ngha bin v tham chiu n MenuGroup u tin
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' To trnh n (To PopupMenu)
' v x l tnh hung khi trnh n c to
Dim newMenu As AcadPopupMenu
On Error Resume Next
Set newMenu = currMenuGroup.Menus.Add("Trinh don tuy bien")
If Err <> 0 Then
Set newMenu = currMenuGroup.Menus("Trinh don tuy bien")
Dim menuEnt As AcadPopupMenuItem
For Each menuEnt In newMenu
menuEnt.Delete
Next
End If
' Khai bo bin cho PopupMenuItem
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
272
CHNGV:LPTRNHTRNAUTOCAD
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Lua chon 3", openMacro)
' Hin th trnh n va to trn thanh trnh n (MenuBar)
currMenuGroup.Menus.InsertMenuInMenuBar "Trinh don tuy bien", ""
End Sub
ft
ra
273
GIOTRNHTNGHOTHITKCUNG
ft
ra
D
274