You are on page 1of 77

CHNGIV:LPTRNHTRNMICROSOFTEXCEL

2. Thanh cng c c rt nhiu thanh cng c khc nhau, mi thanh cng c cha cc nt lnh
trc quan hoc cc la chn dng thc hin mt nhm chc nng no trong chng
trnh.
3. Thanh cng thc bao gm cha a ch ca hin hnh v cha ni dung ca hin
hnh.
4. Workbook l mt tp ti liu ca Excel. Mi Workbook cha nhiu bng tnh (Worksheet)
v cc d liu m rng khc. Ti mi thi im ch c mt worksheet hin hnh.
5. Worksheet l loi ti liu chnh trong tp ti liu ca Excel, mi worksheet cha cc tnh
(cell) c t chc thnh cc hng v ct.
1.3. Kh nng m rng ca Excel
Microsoft Excel 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 bng nhng tnh nng sn c trong chng trnh. Tuy vy, vic lp
trnh m rng trn Excel vn lun c cp n, khng nhng ch vi mc ch l lp trnh
to thm nhng tnh nng mi cho Excel m cn kt hp cc tnh nng sn c ca chng
trnh Excel gii quyt nhng vn mang tnh chuyn bit ho cao.
B chng trnh D Ton l mt v d c th cho vic lp trnh m rng trn Excel. Cc bi
ton chuyn bit v tnh ton d ton cng trnh c gii quyt mt cch d dng da trn s
kt hp gia cc hm c sn trong Excel v mt s tnh nng v c s d liu.
Vic lp trnh m rng Excel c th c thc hin theo nhiu cch khc nhau, nhng n gin
nht c th k n nhng cch sau:
Lp trnh m rng thng qua mi trng lp trnh VBAIDE c tch hp sn trong
Microsfot Excel. Theo cch ny, ngi s dng c th lp trnh m rng Excel mt cch
nhanh chng v d dng vi ngn ng lp trnh VB. Cc ng dng c to ra theo cch
ny gn lin vi tp ti liu ca Excel.
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, vic lp trnh m rng Excel trong ton b ti liu ny s
c thc hin da trn mi trng lp trnh VBAIDE.
khi ng VBAIDE, t ca s chnh ca chng trnh Microsoft Excel, ta 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 Macro.
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. iu ny rt d dn n s nhm
chn trong cng vic. Khi , ta nn ngh ngay n vic s dng Macro c th gi gn tt c
cc thao tc y ch trong mt thao tc duy nht.
Macro l tp hp cc lnh v hm c lu tr trong mt mun m lnh ca VBA nhm thc
hin mt nhim v no . Macro c th c to bng cch thu Macro t Excel, hoc ngi
dng c th t vit cc on m lnh thc hin cc thao tc tng ng. Sau khi to c
Macro, mi khi thc thi Macro, tt c cc thao c lu trong Macro s c thc hin.
Macro thc cht 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 khng c tham s u c xem l Macro v s c hin th trong trnh qun l
Macro.
V d sau s minh ho r iu ny
Sub Macro() Macro
Public Sub Macro () Macro
Private Sub Macro() Th tc vi t kho Private, khng phi Macro
Sub Macro(Input as Double) Th tc c tham s, khng phi Macro
Public Function Macro() as Double Hm, khng phi Macro

2.2. To Macro
2.2.1. To Macro theo kch bn
Cch thc to Macro d dng nht chnh l to Macro theo kch bn. Theo cch ny, ngi s
dng s chun b trc tt c cc thao tc s thc hin, khi bt u to, ngi dng s ln lt
thc hin cc thao tc , 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 trong m-un. Nu trong qu
trnh thu macro, ngi s dng thc hin b li v sa li li , th ton b nhng thao tc sa
li cng c ghi nhn.
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:
1. Chn vng d liu cn nh dng, v d vng A1:D5.
2. Trong trnh n Tools, chn MacroRecord New Macro hin th hp thoi Record
Macro.

Hnh: Hp thoi Record Macro.


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

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


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

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

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


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

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


ghi ch bt u bng du '.
2.2.2. To Macro s dng Microsoft Visual Basic for Application
Ngoi cch to Macro theo kch bn cn c th to Macro bng cch trc tip vit m lnh trong
VBAIDE. Theo cch ny, ngi s dng phi t vit m lnh thc hin cc thao tc mong
mun.
Thc t trong khi to Macro theo kch bn, khng phi tt c cc thao tc u c th thc hin
c. khc phc nhc im ny, ngi s dng phi tin hnh vit cc on m lnh ring
thc hin cc thao tc .
V d sau minh ho cch thc to mt Macro s dng VBA. Ni dung ca Macro l tin hnh
nh dng li phng ch cho vng tnh ang c la chn trong bng tnh: thay i tn phng
ch thnh Time News Roman, kiu ch thnh Italic, kch c ch 11.
ToMacrosdngVBAIDE
1. Trong mn hnh chnh ca Excel, chn trnh n ToolsMacroVisual Basic Editor.
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
2. Trong mn hnh ca VBAIDE va c hin th, chn trnh n InsertModule.
3. G on m lnh sau vo trong ca s m lnh:
Sub Dinh_dang()
With Selection.Font
.Name = "Times New Roman"
.FontStyle = "Italic"
.Size = 11
End With
End Sub

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

2.3. Qun l Macro


Nhm to iu kin thun li cho ngi s dng trong khi lm vic vi Macro, chng trnh
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.

Hnh: Trnh qun l Macro


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

Hnh: Hp thoi Macro Options.


2.4. S dng Macro
Vic s dng cc Macro c to, thc cht l thc thi cc on m lnh cu thnh Macro, c
th c thc hin theo nhiu cch khc nhau:
Thc thi bng cch dng phm tt gn cho Macro;
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;
Thc thi bng cch nhn chut vo mt i tng ho;
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 10, 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 13.
2.4.2. Thc thi Macro thng qua trnh qun l Macro
Chi tit tham kho phn Qun l Macro trang 13.
2.4.3. Thc thi Macro trc tip t VBAIDE
Cch thc thi Macro trc tip t VBAIDE rt thch hp khi ngi s dng mun th nghim
ngay Macro ang c to.
thc thi Macro no trong VBAIDE, cn thc hin nh sau:
1. Trong ca s m lnh ca VBAIDE, t con tr vo gia khi Sub End Sub.
2. Nhn phm F5 hoc chn biu tng trn thanh cng c.
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh: Thc thi Macro trc tip t VBAIDE


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

Thng thng, khi s dng Excel vi cc tp c cha Macro, nn t mc an ninh Medium.


mc ny, Excel s yu cu ngi dng xc thc xem cc on m lnh trong tp bng tnh c
phi t ngun tin cy hay khng.
Hnh: Hp thoi cnh bo an ninh ca Excel
Nu ngi dng chn Enable Macros, cc Macro cha trong workbook s c php thc thi.
Nu ngi dng chn Disable Macros, cc Macro cha trong workbook vn tn ti trong
workbook nhng khng th thc thi c.

3. Xy dng hm mi trong Excel


3.1. Khi nim v hm trong Excel
Hm l nhng cng thc c nh ngha sn trong Excel thc hin tnh ton da trn cc s
liu u vo, gi l tham s, theo mt trnh t c lp trnh sn nhm thc hin cc php tnh
t n gin n phc tp.
hiu r hn v cu trc ca mt hm, ta tm hiu v hm ROUND c sn trong Excel, l hm
dng lm trn s:

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


sch cc tham s cch nhau bng du phy , v cui cng l du ngoc n ).
2. Tn hm. n phm SHIFT+F3 hin th danh sch tt c cc hm trong Excel.
3. Cc tham s. Tham s c th l s, ch, gi tr logic nh TRUE hoc FALSE, mng, gi tr
li nh #NA, hoc tham chiu n mt khc. Tham s truyn vo phi c kiu thch hp
vi kiu ca tng tham s tng ng ca hm. Tham s truyn vo c th l mt hng s,
cng thc, hoc l mt hm bt k.
4. Ch thch hm. Ch thch hm dng th hin cu trc v danh sch cc tham s ca hm,
hin ln khi ta nhp vo tn hm. Ch thch hm ch xut hin i vi nhng hm c xy
dng sn trong Excel.
3.2. To hm mi bng VBA
3.2.1. Ti sao phi dng hm?
Ngoi vic cho php to Macro, VBA cn cho php ngi s dng to thm cc hm mi trong
Excel. Khc vi Macro, hm trong VBA thng tr v mt gi tr hoc mt ma trn no ,
tng t nh hm ca Excel v cc hm c sn trong VBA.
Hm trong VBA c th c s dng trong hai trng hp:
S dng nh mt hm s dng trong cc chng trnh con ca VBA
S dng nh mt hm c sn trong cc bng tnh
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
V nh vy, thc cht, hm trong VBA c th c s dng bt k ni no c th dng c
hm c sn ca Excel v VBA.
Mt cu hi t ra l vi hn 300 hm c sn trong Excel cng vi cc hm c sn trong VBA,
ti sao li cn phi to ra hm mi? Cu tr li rt n gin: n gin ho cng vic. Vi mt
cht sng to, ngi dng c th to thm cc hm mi phc v cho nhng nhu cu ca mnh.
Khng phi lc no cc hm c sn cng c th gii quyt c cng vic ca ngi dng, hoc
c th gii quyt c nhng phi thng qua rt nhiu hm khc nhau hoc thc hin theo mt
cch rt phc tp. Thay vo , ngi dng c th to ra mt hm mi m nhn nhim v ny.
Hm mi ny c th c cch thc tnh ton hon mi, hoc cng c th ch l vic tp hp li cc
hm sn c to thnh mt hm n gin hn. Cng n gin, cng d hiu, d nh v d s
dng.
Ly v d nh trong Excel, c cung cp mt b cng c c tn l Lookup. B cng c ny cho
php ngi s dng tin hnh tra bng 2 chiu mt cch d dng. Nhng vic tra bng v ni suy
khng th thc hin c nh b cng c ny. V th, ngi s dng s ngh ngay n vic s
dng VBA to ra mt b cng c mi dng tra bng v ni suy 2 chiu. y s l mt
cng c tt phc v cho qu trnh tnh ton, nht l i vi ngnh cng trnh.
3.2.2. Cu trc hm
Thc cht, hm l mt chng trnh con dng Function. Khc vi Macro, hm l chng trnh
con c gi tr tr v v c th c tham s.
Khi to hm mi, ngi s dng cn phi tun th theo dng thc khai bo nh sau:

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


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

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

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


Tn_hm: (bt buc) l tn ca hm, cch t tn hm tng t nh cch t tn ca bin.
Tn_hm s c s dng nh l bin trong ton b hm, khi hm kt thc gi tr tr v
ca hm chnh l gi tr gn cho bin Tn_hm.
Danh_sch_tham_s: (tu chn) l danh sch cc tham s u vo ca hm. Cc tham s
c phn cch vi nhau bng du phy.
Kiu_d_liu: (tu chn) quy nh kiu gi tr tr v ca hm. Nu khng quy nh kiu
d liu, hm s c kiu d liu mc nh l Variant.
Exit Function: (tu chn) l cu lnh dng kt thc hm ngay lp tc (cho d pha
sau cu lnh ny vn cn cc khi lnh khc).
End Function: (bt buc) l t kho bo hiu kt thc mt hm.
3.2.3. To hm mi
minh ho r hn cch thc to hm mi, ly v d to mt hm rt n gin: hm tnh din
tch hnh ch nht. Hm ny c tn l Dien_tich, vi hai tham s u vo l chiu rng v
chiu cao. Kiu d liu ca cc tham s l kiu s thc v gi tr tr v ca hm cng l kiu s
thc.
to mt hm mi, thc hin theo cc bc sau:
1. Khi ng VBAIDE. Trong trnh n Tools, chn mc MacroVisual Basic Editor;
2. Trong trnh n Insert, chn mc Module to mt m-un mi, ni s cha hm do
ngi dng nh ngha.
3. Trong trnh n Insert, chn mc Procedure hin th hp thoi Add Procedure. Sau
in tn hm vo mc Name, chn kiu chng trnh con l Function v phm vi l
Public. Cui cng chn OK;

Hnh: Hp thoi Add Procedure.


4. Chng trnh s t ng pht sinh on m lnh nh sau:
Public Function Dien_Tich()

End Function

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


Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
Hm tnh din tch hnh ch nht
Dien_Tich = Rong * Cao
End Function
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
6. Trong trnh n File, chn mc Close and Return to Microsoft Excel quay tr v mn
hnh chnh ca Excel;
7. Lc ny, hm m ta va xy dng, c tn l Dien_Tich, c th c s dng bnh thng
nh cc hm khc ca Excel.

Hnh: S dng hm mi trong Excel.


CH Cc bc to hm mi cng tng t nh cc bc to Macro phn trc. Tuy
nhin, do hm cn phi c gi tr tr v nn khi khai bo kiu chng trnh con cho hm,
ngi dng cn phi chn l Function (khc vi khi to Macro, phi chn l Sub).

Thng thng cc hm u khng n gin nh th ny, y ch l mt on v d rt n gin


nhm minh ho cch thc to hm v cu trc ca hm. hiu r hn v hm, ta cng xem li
on m trn:
Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
Hm tnh din tch hnh ch nht
Dien_Tich = Rong * Cao
End Function

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


sch hm trong Excel. Tip sau l t kho Function (ch khng phi l Sub nh Macro) v
tn hm, Dien_Tich. Hm c hai tham s, nm gia hai du ngoc n, l Rong v Cao, v u
c kiu s thc. T kho As Double cui xc nh kiu tr v ca hm Dien_Tich l kiu s
thc.
dng th 2, n gin ch l mt dng ch thch v c bt u bng du phy trn ().
dng th 3, gi tr ca hm c tnh da trn hai tham s u vo l Rong v Cao.
Hm c kt thc bng cu lnh End Function.
CH Khi xy dng hm mi, cn phi ch s khc bit gia hm gi t cc chng
trnh con trong VBA v hm s dng trong bng tnh. Cc hm s dng trong bng tnh
mang tnh b ng, tc l khng th thao tc trn cc vng d liu hoc thay i ni dung
no trong bng tnh.
Nu ngi dng c to mt hm trong c thay i nh dng ca mt , nh mu
nn chng hn, th nhng hm nh vy khng thc hin c, v hm s lun tr v gi tr
li.
Nh vy, khi to hm mi cn ghi nh: Hm ch n gin l tr v mt gi tr no ;
Hm khng th thc hin thao tc lm thay i i tng.
3.3. Hm tr v li
Trong mt s trng hp, hm c th s phi tr v mt gi tr li no . lm r hn iu
ny, ly v d hm phn loi sinh vin.
Function PhanLoai(DiemTB) As String
If (DiemTB >= 5) Then
PhanLoai = "Do"
Exit Function
End If

If (DiemTB < 5) Then


PhanLoai = "Truot"
Exit Function
End If
End Function

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

If (DiemTB >= 5) Then


PhanLoai = "Do"
Exit Function
End If

If (DiemTB < 5) Then


PhanLoai = "Truot"
Exit Function
End If
End Function

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


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

CH s dng hm tr v thng bo li, c s dng hm CVErr, ngi dng phi khai


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

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


th nhn ra v sa li kp thi.

Hnh: Hm tr v li
Trong on m lnh trn, tr v thng bo li #N/A th tham s ca hm CVErr phi l
hng s xlErrNA. C rt nhiu gi tr li khc nhau, mi gi tr li c mt hng s tng ng.
Bng di y s lit k mt s thng bo li cng nh cc hng s tng ng trong VBA.
Bng: Cc gi tr li trong Excel
Gi tr li Hng s Gii thch
#DIV/0! xlErrDiv0 Cng thc c chia mt s cho 0. Li ny cng pht sinh khi chia cho
mt trng.
#N/A xlErrNA Li ny biu th d liu khng c.
#NAME? xlErrName Hm c tn m Excel khng th nhn dng c. Thng xy ra khi
nhp tn hm sai, hoc thay i tn hm nhng cha cp nht
trong bng tnh.
#NULL! xlErrNull Gi tr rng, chng hn nh tm giao ca hai vng khng giao nhau.
#NUM! xlErrNum C vn vi gi tr no . V d nh ngi dng nhp vo s m,
trong khi ch chp nhn s dng.
#REF! xlErrRef Tham chiu n khng tn ti. iu ny thng xy ra khi b
xo khi bng tnh.
#VALUE! xlErrValue Hm c cha tham s hoc cng thc khng ph hp v kiu d
liu
4. Add-in v Phn phi cc ng dng m rng
Mt tnh nng rt hu ch cho ngi lp trnh trong Excel l kh nng to Add-In. Phn ny s
trnh by nhng li ch khi s dng Add-In, cch thc to v s dng Add-In.
4.1. Khi nim v Add-In
Add-In l mt chng trnh gn thm vo Excel nhm b sung thm tnh nng cho Excel. Thng
thng, cc tp cha Add-In c phn m rng l XLA v cng c cu trc tng t nh cc
workbook ca Excel.
So vi cc ng dng trong tp XLS ca Excel, vic s dng Add-In c mt s u im sau:
n gin ho vic s dng hm. i vi cc hm lu trong Add-In, khi s dng khng cn
phi thm tn workbook pha trc tn hm. Ly v d nh ngi dng to mt hm c
tn l MOVAVG trong workbook c tn l Newfuncs.xls. Khi mun s dng hm trong
mt workbook khc, ngi dng phi s dng hm vi cch thc nh sau:
=Newfuncs.xls!MOVAVG(A1:A50)
Nhng nu hm c lu trong mt Add-In ang c m trong Excel, ngi dng
khng cn phi thm tn Add-In hay tn workbook trc tn hm na, ch n gin l s
dng tn hm m thi:
=MOVAVG(A1:A50)
n gin ho qu trnh m ng dng. Mi Add-In sau khi c ci t s c t ng
m mi khi bt u khi ng chng trnh Excel. Hn na, hp thoi cnh bo an ninh
ca Excel s khng xut hin (xem mc Vn an ton khi s dng Macro trang 15),
trnh gy ra s lng tng cho nhng ngi dng cha c kinh nghim.
Trnh gy ra s bi ri cho ngi dng. Nu ngi s dng ti Add-In vo, cc sheet trong
Add-In s khng c hin th, trnh gy ra s ri rm cho nhng ngi dng cha c
kinh nghim.
Ngn chn vic truy cp vo m lnh. Khi phn phi ng dng dng Add-In c t ch
bo mt bng mt khu, ngi dng khng th xem hoc thay i m lnh ca ng dng.
iu ny trnh c vic sao chp m lnh ca chng trnh.
4.2. Trnh qun l Add-In
Vic qun l cc Add-In trong Excel c thc hin rt n gin thng qua trnh qun l Add-
In. hin th trnh qun l Add-In, chn trnh n ToolsAdd-Ins
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Hnh: Trnh qun l Add-In


ti/d ti Add-In trong Excel: kch chut vo hp kim bn tri tn ca Add-In.
m mt Add-In: chn nt lnh Browse Chn Add-In cn m.
GI Thng thng, tp Add-In s c phn m rng l XLA v c lu tr trong th
mc %UserProfile%\Application Data\Microsoft\AddIns.

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

Hnh: Hp thoi Project Properties


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

Hnh: Hp thoi Save As


7. Chn Save. Mt bn sao ca workbook c lu (vi phn m rng l *.xla), v tp XLS
cha workbook vn cn gi nguyn trong Excel.
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, cn phi lu gi li workbook ngun c th hiu chnh m lnh v cc


d liu khc sau ny. Cn phi lm iu ny v tp Add-In khng th c chuyn i ngc li
thnh workbook.
4.4. Phn phi v Ci t Add-In
Vic phn phi cc Add-In c thc hin rt n gin, ch cn sao chp tp *.xla n cc my
khc, sau ci t cc Add-In thng qua trnh qun l Add-In trong Excel.
ci t Add-In, thc hin theo cc bc sau:
1. Trong Excel, chn trnh n Tools Add-Ins hin th trnh qun l Add-In
2. Chn nt Browse, sau tr n tp Add-In cn ci t trong Excel chn OK. Tn ca
Add-In s c hin th trong trnh qun l Add-In.
3. Chn OK ln na chp nhn ci t Add-In. Gi y, ngi dng c th s dng tt c
cc tnh nng c trong Add-In va c ci t.

5. H thng cc i tng trong Excel


im khc bit ca lp trnh trn Excel so vi vic lp trnh trn cc ng dng khc chnh l
vic thc hin cc thao tc nhm tc ng trc tip n cc thnh phn trong chng trnh Excel
thng qua cc cu lnh c b sung trong mi trng 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 h
thng cc thnh phn ca Excel.
5.1. M hnh i tng trong Excel
to ci nhn tng quan cho ngi lp trnh, Microsoft cung cp m hnh i tng s dng
trong Microsoft 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. y xin c
gii thiu li m hnh i tng s lc vi mt s i tng thng c s dng trong lp
trnh trn Microsoft Excel.
Application

Workbooks

Workbook

Worksheets
Rows

Worksheet

Columns
Ch gii:
Range Tp i tng

i tng
Cells
Mi i tng (Object), cng ging nh mt vt th, u c nhng tnh cht v nhng hnh vi
c trng cho tng i tng. 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 Excel, c thuc tnh
Caption cha tiu ca chng trnh Excel v phng thc Quit dng thot khi chng
trnh Excel.
truy cp n cc thnh phn (phng thc, thuc tnh, ) ca i tng, ta s dng du
chm (.). V d sau thc hin phng thc Quit thot khi Excel nh cp trn:
i tng
Th nh ph n

Application.Quit

Du chm

Cutrcphncpitng
i tng Application (chnh l ng dng Microsoft Excel) cha nhiu i tng khc, chng
hn nh:
Workbooks (tp i tng cha tt c cc i tng Workbook ti liu Excel)
Windows (tp i tng cha tt c cc i tng Window - cc ca s trong Excel)
AddIns (tp i tng cha tt c cc i tng Add-in)
Cc i tng cng c th cha cc i tng khc. Tp i tng Workbooks cha tt c cc
i tng Workbook ang m, v mi i tng Workbook cha cc i tng khc nh:
Worksheets (tp i tng cha cc i tng Worksheet)
Charts (tp i tng cha cc i tng Chart)
n lt mnh, cc i tng trn cng c th cha nhiu i tng khc na. Mt i tng
Worksheet trong tp i tng Worksheets c th cha cc i tng khc na, chng hn nh:
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
ChartObjects (tp i tng cha tt c i tng ChartObject biu trong Excel)
Range
PageSetup
C nh vy, ngi lp trnh c th truy cp n tng thnh phn ca chng trnh Excel thng
qua h thng phn cp cc i tng trong Excel.
TpitngCollection
Mt khi nim rt quan trng trong lp trnh VBA l khi nim tp i tng (hay Collection).
Tp i tng l mt nhm cc i tng cng lp vi nhau (v ng nhin, bn thn tp i
tng cng l mt i tng). Chng hn nh tp i tng Workbooks cha tt c cc i
tng Workbook ang c m hay tp i tng Worksheets cha tt c cc Worksheet trong
mt Workbook no . Ngi lp trnh c th thao tc trn ton b cc i tng c trong tp
i tng hoc c th trn mt i tng ring l trong tp i tng . tham chiu n mt
i tng ring l trong tp i tng, c th tham chiu s dng tn ca i tng theo cch
sau:
Worksheets(Sheet1)

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


th t ca i tng theo cch sau:
Worksheets(1)

Tng t, tham chiu n i tng th 2 trong tp i tng, s dng Worksheets(2),


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

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

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


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

Thuc tnh ny rt c ch khi hin th cho ngi dng thng tin v my in hin hnh trong qu
trnh in mt bng tnh no .
ActiveSheet
Thuc tnh ny tr v i tng cha sheet hin hnh ang c hin th trong Excel. Trong
Excel c nhiu loi sheet khc nhau, chi tit xem thm mc i tng Workbook trang 31. V
do vy, kiu d liu tr v ca thuc tnh ny ph thuc vo loi sheet ang c la chn. on
m sau s hin th kiu ca sheet hin hnh bng cch s dng hm TypeName, hm tr v kiu
d liu ca bin:
MsgBox TypeName(Application.ActiveSheet)

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

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

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


workbook cng ging nh mt ca s trong Excel, nhng thc cht khng phi vy. r hn
s khc bit gia workbook v ca s, ta to thm mt ca s mi bng cch chn trnh n
WindowNew Window. Ca s mi c to c ni dung ging nh ca s ban u, nhng
ngi dng c th la chn nhng vng khc nhau trn hai ca s (mc d c hai ca s u l
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
th hin ca cng mt workbook). V nh vy, mi mt workbook c th c th hin bng
nhiu ca s khc nhau, nhng mi mt ca s ch th hin c mt workbook m thi.
AddIns
L tp i tng cha tt c cc add-in ang c ti vo trong Excel. on m lnh sau s ln
lt hin th tn ca tt c cc add-in, bao gm c ng dn:
Sub Hien_thi_Add_in()
Dim MyAddin As AddIn
For Each MyAddin In Application.AddIns
MsgBox MyAddin.FullName
Next MyAddin
End Sub

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

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

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


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

V y l kt qu thc thi on m trn

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


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

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


Application.Rows(9).Select

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

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


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

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

Selection
Thuc tnh ny th hin cho i tng ang c chn trong Excel. Kiu d liu tr v ca thuc
tnh ny tu thuc vo i tng c chn. Nu i tng chn l cc , biu , hoc mt
ng thng th kiu d liu tr v tng ng s l Range, ChartArea, Line... V vy trong qu
trnh 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 trong qu trnh thc thi chng trnh. V d sau s hin th a ch ca cc
ang c chn trong Excel:
Dim mySelection As Variant
Set mySelection = Selection
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
If TypeName(mySelection) = "Range" Then Kim tra kiu d liu
MsgBox mySelection.Address
Else
MsgBox "i tng c chn khng phi kiu Range"
End If

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

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

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


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

5.2.2. i tng Workbook


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

Mi workbook trong Excel c th cha nhiu sheet khc nhau (tu thuc vo dung lng b
nh). C 4 loi sheet khc nhau:
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. XLM ( li thi, nhng vn
cn c h tr)
Dialog sheets ( li thi, nhng vn cn h tr): l ni cha cc hp thoi tu bin do
ngi dng t to (ging nh Userform trong VBA).
Cc phng thc v thuc tnh thng c s dng cho i tng workbook
Activate
Phng thc ny s kch hot mt workbook trong tp i tng Workbooks thnh workbook
hin hnh, v sheet hin hnh ca workbook s c kch hot lm sheet hin hnh trong
Excel.
kch hot workbook c tn book1, thc hin nh sau:
Workbooks(Book1).Activate

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


Workbooks(1).Activate

ActiveSheet
Thuc tnh ny tham chiu n sheet hin hnh ca workbook. Kiu d liu tr v ca thuc tnh
ny tu thuc vo kiu sheet hin hnh.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. Cn thuc tnh ActiveSheet ca i tng Workbook ch l sheet hin
hnh trong phm vi workbook m thi. Nu workbook cng l workbook 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 ging nh khi s dng trnh n FileClose trong Excel.
Ngoi ra cn c cc tham s tu chn khc phc v cho vic lu tr tp.
Workbooks(Book1).Close ([SaveChanges],[Filename])

Trong ngha ca cc tham s nh sau:


SaveChanges: tham s tu chn. Bng TRUE nu mun lu tt c cc thay i, v bng
FALSE nu ch mun ng workbook m khng lu. Nu b qua, tu chn ny th phng
thc ny s ging hon ton nh khi ta chn trnh n FileClose.
Filenam: tham s tu chn. S lu tp s dng tn cha trong Filename.
PrintOut
Phng thc ny in sheet hin hnh ca workbook ra my in.
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Workbooks(1).PrintOut

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


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

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

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

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

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


Windows(2)

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


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

ActiveCell
Thuc tnh ny tham chiu n hin hnh, l c con tr ang hot ng, trong i tng
Window. on m sau s hin th a ch ca hin hnh trong ca s th 2 trong tp i tng
Windows:
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:
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
ActiveWindow.Caption = MyWindow

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

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


ActiveWindow.DisplayWorkbookTabs = False

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

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

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


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

on m sau s thu nh ca s hin hnh:


ActiveWindow.WindowState = xlMinimized

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

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


chut.

5.2.4. i tng Worksheet


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

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


tng Workbook. V vy, cc i tng Worksheet u c truy cp thng qua tp i tng
Worksheets. Tng t nh i vi i tng Window, mi i tng Worksheet u c truy
cp thng qua tp i tng Worksheets bng tn ca worksheet hoc theo th t ca worksheet.
Tuy nhin, th t ca worksheet xc nh rt d dng theo trt t xut hin trn th cha cc
sheet.

Hnh: Th t ca Worksheet
Trong minh ho trn, v tr th 2 l ca Chart sheet nn khng c tnh trong th t ca cc
worksheet.
to mt worksheet mi, s dng phng thc Add c trong tp i tng Worksheets.
Worksheets.Add
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Di y l cc phng thc v thuc tnh ph bin trong i tng worksheet.
Calculate
Trong trng ch tnh ton ca Excel c thit lp thnh Manual (xem thm mc
Calculation trang 29), phng thc ny bt u thc hin qu trnh tnh ton cho ton b
worksheet c tham chiu.
Worksheets(Sheet1).Calculate

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

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

Name
Thuc tnh ny tr v tn ca worksheet ging nh c hin th trn th cha cc sheet trong
workbook.
PrintOutvPrintPreview
Nhng phng thc ny dng thc hin in hoc xem trc khi in mt worksheet. Chi tit v
cc tham s cho phng thc PrintOut, xem li mc i tng Workbook - PrintOut trang 32.
Worksheets(Sheet2).PrintOut PrintPreview:=True In, c xem trc
Worksheets(Sheet3).PrintPreview Xem trc khi in

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

Phng thc Unprotect s tt ch bo v ca worksheet. i vi nhng worksheet c bo


v bng mt khu, cn phi truyn thm tham s l chui k t cha mt khu tt ch bo

1
Ch thch l mt on vn bn gn thm vo mt no . on vn bn ny c hin ln mi khi ngi dng di
chut trn . no c ch thch th s c thm biu tng hnh tam gic mu gc trn bn phi ca . to
ch thich cho mt , chn trnh n InsertComment trong Excel.
v; nu khng truyn tham s mt khu, mt hp thoi s c hin ln ngi s dng nhp
vo mt khu.
Worksheets(Sheet2).Unprotect Password:="Excel" Tt ch bo v

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

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

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

5.2.5. i tng Range


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

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

Trng hp nu mun tham chiu n mt vng d liu, ngi lp trnh c th da trn a ch


ca hai , gc trn bn tri v gc i bn phi. V d sau s tham chiu n vng d
liu t B2 n C3 theo nhiu cch khc nhau:
Worksheets("Sheet1").Range("B2:C3") = 9 Cch th nht
Worksheets("Sheet1").Range("B2.C3") = 9 Cch th hai
Worksheets("Sheet1").Range("B2", "C3") = 9 Cch th ba

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

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

Di y l cc phng thc v thuc tnh ca i tng Range:


Activate
Phng thc ny dng chuyn mt thnh hin hnh. Nu vng d liu l nhiu hn mt
th ch c mt c chn lm hin hnh, l gc trn bn tri. Cn lu l phng thc ny
ch c gi thnh cng nu vng d liu nm trn worksheet hin hnh. V vy, mun kch
hot mt vng d liu trn mt worksheet no , cn phi chuyn worksheet thnh
worksheet hin hnh.
Worksheets(Sheet1).Activate
Range(A3:B5).Activate

AddCommentvClearComments
Phng thc AddComment cho php thm ch thch vo vng c tham chiu. Vng d liu 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 khng yu cu v vng d liu, vng d liu c th l mt
vng bt k.
Range("A1:C3").ClearComments Xo ch thch vng A1:C3
Range("B2").AddComment "Chu thich moi" Thm ch thch B2

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

BorderAround
Phng thc ny thc hin v ng bin xung quanh vng d liu c tham chiu. Ngi lp
trnh c th thit lp kiu ng, b dy nt v v mu ca ng. Chi tit v cc tham s, tham
kho trong ti liu tr gip i km ca Excel.
Worksheets("Sheet1").Range("A1:D4").BorderAround _
LineStyle:=xlDashDot, ColorIndex:=3, Weight:=xlThick

Calculate
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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 43
Clear,ClearContentsvClearFormats
Phng thc Clear xo tt c nhng g c trong vng d liu c tham chiu: ni dung, nh
dng, ch thch
Phng thc ClearContents ch xo ni dung c lu tr trong vng d liu. Cn phng thc
ClearFormats ch xo nh dng ca cc trong vng d liu. Sau khi xo nh dng, cc s c
nh dng mc nh trong Excel.
Worksheets(Sheet2).Range(A1:C3).Clear Xo tt c
Worksheets(Sheet2).Range(A1:C3).ClearContents Xo ni dung
Worksheets(Sheet2).Range(A1:C3).ClearFormats Xo nh dng

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

ColumnsvRows
Thuc tnh Columns v Rows thc cht l tp i tng kiu Range cha cc ct v cc hng
nm trong phm vi vng d liu c tham chiu. V d sau s dng vng lp For Each
Next i mu v in s th t ct vo cc ct trong vng d liu c tham chiu.

Public Sub VD_Columns()


Dim myColumns As Range
For Each myColumns In Range("B4:C5,E2:F6").Columns
myColumns.Interior.Color = RGB(0, 255, 0) i mu
myColumns.Value = myColumns.Column in s th t ct
Next myColumns
End Sub

GI C th s dng tp i tng Columns v Rows truy cp n mt hng hay mt


ct no trong worksheet. V d sau s in gi tr 9 vo ct C v hng 3:
Worksheets("Sheet1").Columns("C") = 9
Worksheets("Sheet1").Rows("3") = 9
ColumnWidthvRowHeight
Thuc tnh ny th hin chiu rng ca ct v chiu cao ca hng ca vng d liu c tham
chiu.
Worksheets("Sheet2").Range("B2:C4").ColumnWidth = 15
Worksheets("Sheet2").Range("B2:C4").RowHeight = 15

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

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

Phng thc ny cng c nhiu tham s khc na thit lp ch tm kim vo thay th nh


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

Value
Thuc tnh ny cha gi tr ca vng d liu. Cn phi lu rng khi c gi tr ca vng d liu
th vng d liu bt buc phi l mt n nht, cn khi gn gi tr th vng d liu c th l
mt hoc mt vng d liu gm nhiu v trong trng hp tt c cc u c cng mt
gi tr.
MsgBox Range("A1").Value c v hin th gi tr A1
Range("B2:C3").Value = 9 Gn gi tr cho vng d liu B2:C3
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
GI Trong khi lm vic vi i tng Range, i tng tham chiu n mt vng d
liu, cn lu nhng im sau:
Vic thao tc vi Excel bng m lnh khng cn phi thc hin la chn vng d liu, v
th nn hn ch s dng cc phng thc nh Activate hoc Select.
Trong trng hp bt buc phi s dng cc phng thc ny, cn phi kch hot
worksheet c cha vng d liu lm worksheet hin hnh bng phng thc Activate ca
worksheet .
Nn s dng cc vng d liu c t tn, chng hn nh nn s dng
Range(KetQua) thay v s dng Range(D45). V khi s dng Range(D45), nu ngi
dng chn thm mt hng pha trn hng 45 th a ch ca cn tham chiu s thay i,
v cn phi thay i m lnh thnh Range(D46). Nhng nu s dng vng d liu c t
tn th khng cn phi thay i m lnh.
Excel cho php la chn cc vng d liu ri rc bt k. Trong khi s dng Excel, c th
thc hin bng cch gi phm CRTL khi chn vng d liu.

5.2.6. Tp i tng Cells


Tp i tng Cells l tp i tng cha tt c cc nm trong vng c tham chiu. Tp i
tng Cells l mt thuc tnh ca i tng worksheet v cng l mt thuc tnh ca i tng
Range. Khi truy cp thng qua i tng worksheet, tp i tng Cells tham chiu n tt c
cc ca worksheet . Khi truy cp thng qua i tng Range, tp i tng Cells ch tham
chiu n cc nm trong vng d liu. Thc cht, mi thnh phn cu thnh nn tp i tng
Cells l mt , c kiu d liu l Range nn tt c cc phng thc v thuc tnh ca i tng
Range u c trong tp i tng Cells. Xem thm mc i tng Range trang 38 bit chi
tit v i tng Range.
tham chiu n mt no thng qua tp i tng Cells, c th s dng cu trc sau:
object.Cells(ch_s_hng, ch_s_ct)
object.Cells(ch_s_)
object.Cells
Object l i tng c cha thuc tnh Cells, c th l i tng kiu Worksheet hoc kiu
Range. Cc tham s ch_s_hng v ch_s_ct l ch s tng i trong phm vi ca vng
d liu c tham chiu. Ch_s_ l s th t ca trong tp i tng Cells, s th t c
nh s theo tng hng, t tri sang phi v t trn xung di.
Xt on m sau:
Worksheets(Sheet1).Range("B2:E4").Cells(2, 3).Value = 9

on m trn s dng cch th nht gn gi tr 9 cho mt nm trong vng B2:E4. Object


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

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

on m trn s dng cch th 3 tham chiu n cc . Theo , tt c cc u c tham


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

6. S kin ca cc i tng trong Excel


Khi ngi dng thc hin mt thao tc no trong chng trnh, Excel s lm sinh mt s kin
tng ng vi cc thao tc , chng hn nh cc s kin khi m hoc lu workbook. Nh c
cc s kin m ngi lp trnh c th vit m lnh thc hin mt s thao tc mi khi s kin
xy ra (cn gi l b x l s kin event handler). Nhng hp thng bo nh Would you
like to save changes? l minh ho r nht vic s dng cc s kin trong Excel.
Thc cht, mi b x l s kin l mt chng trnh con dng th tc. Khi s kin xy ra,
chng trnh con tng ng s c t ng thc thi. Excel c kh nng gim st nhiu loi s
kin khc nhau. Cc s kin c th c phn loi nh sau:
S kin ca Workbook (s kin mc Workbook): cc s kin xy ra trong mt workbook
no . Chng hn nh cc s kin Open (khi m hoc to workbook), BeforeSave (trc
khi lu workbook), NewSheet (mt sheet mi va c thm),
S kin ca Worksheet (s kin mc Worksheet): cc s kin xy ra trong mt worksheet
no . V d nh cc s kin Change (khi mt trong sheet b thay i), SelectionChange
(ngi dng chuyn sang vng c chn khc), Calculate (khi mt worksheet c tnh
ton li),
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
S kin ca i tng Chart: cc s kin xy ra trn mt i tng chart no . Chng
hn nh cc s kin Select (khi mt i tng Chart c chn), s kin SeriesChange
(khi c mt gi tr no trong chui s liu b thay i). gim st cc s kin ca i
tng chart nhng, cn phi thc hin thm mt s k thut khc.
S kin ca ng dng Excel (s kin mc ng dng): cc s kin xy ra bn trong chng
trnh Excel. Cc s kin ny bao gm NewWorkbook (khi mt workbook mi c to),
WorkbookBeforeClose (trc khi ng mt workbook no ), SheetChange (khi mt
no trong workbook b thay i). gim st cc s kin ca ng dng Excel, ngi
lp trnh cn phi thc hin thm mt s k thut nng cao khc.
Cc s kin trong UserForm: l cc s kin xy ra trong UserForm hoc trong mt i
tng nm trn UserForm. V d nh UserForm c s kin Initialize (xy ra trc khi
UserForm c hin th), hoc i tng CommandButton trn UserForm c s kin Click
(xy ra khi ngi dng kch chut vo nt lnh).
Cc s kin khng gn vi i tng: nhm s kin ny c hai s kin rt hu dng: s
kin OnTime v s kin OnKey. Nhng s kin ny c cch thc hot ng khng ging
nh nhng s kin khc.
C mt s thao tc trong Excel c th lm xy ra nhiu s kin khc nhau. V d nh khi ngi
dng chn mt worksheet mi vo trong workbook s lm pht sinh cc s kin mc ng dng
nh sau:
S kin WorkbookNewSheet: xy ra khi to mi worksheet.
S kin SheetDeactivate: xy ra khi worksheet hin hnh khng cn hin hnh na.
S kin SheetActivate: xy ra khi worksheet va mi c to c chuyn thnh
worksheet hin hnh.
6.1. To b x l s kin cho mt s kin
Nhng ngi mi lp trnh VBA thng khng bit ni no to b x l s kin, hoc b x
l s kin c to ra nhng li khng hot ng c. Nguyn nhn l do chng trnh con
cha cc b x l s kin khng c t ng v tr.
c th hot ng ng nh mong mun, cc b x l s kin ca tng i tng phi c
t trong m-un m lnh tng ng ca i tng .
V d sau s minh ho cch to b x l s kin cho s kin Worksheet_Change ca Sheet 1 (l
s kin pht sinh khi ngi dng thay i gi tr ca mt no trong Sheet 1).
Tobxlskin
1. Trong ca s Project ca VBAIDE, kch p chut ln i tng Sheet1 hin th ca s
m lnh cho i tng Sheet1.
2. Trong ca s m lnh va hin th, chn danh sch gc trn bn tri v chn mc
Worksheet chn danh sch gc trn bn phi v chn mc Change.

3. VBAIDE s t ng pht sinh on m lnh sau:


Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

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

Mi b x l s kin u c cc tham s ring. ngha v s lng cc tham s ph thuc vo


tng loi s kin. hiu r thm v cc tham s ca mi s kin, tham kho thm trong ti liu
tr gip ca VBA trong Excel.
CH Excel cn cho php ngi dng tt cc s kin trong ng dng, khi , cc b x l
s kin s khng c thc thi mi khi ngi dng thc hin cc thao tc tng ng na.
tt cc s kin, ch cn gn thuc tnh EnableEvents ca i tng bng FALSE
(Application.EnableEvents=FALSE). V ngc li, bt li cc s kin, ch cn
gn thuc tnh EnableEvents bng TRUE (Application.EnableEvents=TRUE)
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
6.2. S kin trong Workbook
Cc s kin mc workbook xy ra trong mt workbook no . Cc b x l s kin ca i
tng workbook c lu trong m-un m lnh ca workbook tng ng. Di y l danh
sch cc s kin trong workbook:
S kin Thao tc lm pht sinh s kin
Activate Workbook c chn lm workbook hin hnh
AddinInstall Workbook c ci t lm Add-In
AddinUninstall Workbook b g ci t, khng cn l Add-In na
BeforeClose Ngay trc khi workbook b ng li
BeforePrint Ngay trc khi workbook c in hoc xem trc khi in
BeforeSave Ngay trc khi lu workbook
Deactivate Workbook khng cn hin hnh
NewSheet Mt worksheet va c to trong workbook
Open M workbook
SheetActivate Mt sheet no c chn lm sheet hin hnh
SheetBeforeDoubleClick Ngi dng kch p chut trn sheet no . S kin ny xy ra ngay
trc khi kch p.
SheetBeforeRightClick Ngay trc khi ngi dng kch phi chut trn sheet
SheetCalculate Khi trn workshet c thc hin tnh ton no
SheetChange Khi worksheet b thay i
SheetDeactivate Khi mt worksheet no khng cn l sheet hin hnh na
SheetSelectionChange Khi ngi dng thay i vng la chn trn worksheet
WindowActivate Khi mt ca s c chn l ca s hin hnh
WindowDeactivate Khi mt ca s khng cn l ca s hin hnh
WindowResize Khi mt ca s b thay i kch thc

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

Private Sub Workbook_Open()


M lnh s c t y
End Sub

Di y l mt v d n gin ca th tc Workbook_Open. Chng trnh c s dng hm


Weekday ca VBA xc nh mt ngy trong tun. Nu l ngy th 6, mt hp thng bo s
xut hin, nhc nh ngi dng thc hin sao lu workbook hng tun. Nu khng phi l th 6,
th s khng c g xy ra c.
Private Sub Workbook_Open()
Dim strThongBao As String
If Weekday(Now) = vbFriday Then
strThongBao = "Hm nay l th Su.
strThongBao = strThongBao & "Nh phi sao lu workbook hng tun! "
MsgBox strThongBao, vbInformation
End If
End Sub

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

Private Sub Workbook_BeforeClose(Cancel As Boolean)


M lnh s c t y
End Sub

Tham s Gii thch


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

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

Trong on m trn, khi ngi dng chn Yes th s thc hin phng thc Save c trong i
tng workbook. Khi ngi dng chn No th s gn thuc tnh Saved ca i tng workbook
thnh TRUE, iu ny s lm cho Excel ngh l workbook c lu, nhng thc cht l
khng thc hin thao tc lu workbook. Khi ngi dng chn Cancel th s gn tham s Cancel
bng TRUE, khi y Excel s khng ng workbook na.
6.3. S kin trong Worksheet
S kin mc worksheet xy ra bn trong mt worksheet no . Vic x l tt cc s kin
mc worksheet s gip ng dng m rng hot ng hiu qu v chuyn nghip hn. Di y
l mt s s kin trong worksheet:
S kin Thao tc lm pht sinh s kin
Activate Worksheet c chn lm worksheet hin hnh
BeforeDoubleClick Ngi dng kch p chut trn sheet. S kin ny xy ra ngay trc khi
kch p.
BeforeRightClick Ngay trc khi ngi dng kch phi chut trn sheet
Calculate Khi trn workshet c thc hin tnh ton no
Change Khi mt no trong worksheet b thay i
Deactivate Worksheet khng cn hin hnh
FollowHyperlink Ngi dng kch chut vo mt siu lin kt trong worksheet
SelectionChange Khi ngi dng thay i vng la chn trn worksheet

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


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

Private Sub Worksheet_Change(ByVal Target As Range)


M lnh s c t y
End Sub

Tham s Gii thch


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

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


c mt i tng kiu Range c truyn thng qua tham s Target. i tng ny c th l
mt hoc mt vng d liu b thay i. V d sau s hin th mt hp thng bo th hin a
ch ca b thay i (a ch ca i tng Target):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox Vng d liu & Target.Address & thay i.
End Sub
c th hiu r hn cc loi thao tc lm pht sinh s kin Change ca workshet, nhp on
m trn vo trong m-un m lnh ca worksheet. Sau khi nhp xong on m lnh trn, quay
tr li Excel v thc hin thay i worksheet bng nhiu cch khc nhau. Mi khi s kin
Change xy ra, mt hp thng bo s c hin ln thng bo a ch ca vng d liu b tc
ng. Khi thc hin theo cch nh vy, ta c th tnh c pht hin ra nhiu iu th v v s kin
ny. Mt s thao tc lm pht sinh s kin, nhng mt s thao tc khc li khng nh th:
Thay i nh dng ca khng lm pht sinh s kin Change nh mong i, nhng nu
s dng trnh n Edit Clear Formats th li lm pht sinh s kin ny.
Thm, hiu chnh hoc xo ch thch ca cc khng lm pht sinh s kin Change.
Nhn phm DEL trn bn phm s lm pht sinh s kin Change (mc d hin ti ang l
mt trng).
Nhng b thay i khi s dng cc lnh ca Excel c th c hoc khng lm pht sinh s
kin ny. V d, chn trnh n Data Form v Data Sort khng lm pht sinh s
kin. Nhng nu chn trnh n Tools Spelling v Edit Replace th li lm pht sinh
s kin ny.
Nu trong cc chng trnh con ca VBA c lm thay i mt no th s lm pht
sinh s kin Change.
R rng, s kin Change kh phc tp v c th c tnh cht khc nhau tu theo tng phin bn
ca Excel. Tuy nhin, s kin ny li rt hu ch, c bit l nhng ng dng quan trng, i hi
cn phi c s kim tra, gim st n gi tr ca tng .
S kin Change pht sinh khi c mt no b thay i, nhng thng thng ngi lp trnh
ch cn quan tm n mt vng no trong worksheet m thi. V d sau s thc hin gim st
mt vng d liu c tn l SoLieu trong worksheet. Nu ngi dng lm thay i gi tr bt k
no trong vng ny, chng trnh s xut hin thng bo cho ngi dng:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim VRange As Range
Set VRange = Range("SoLieu")
If Not Intersect(Target, VRange) Is Nothing Then
MsgBox " thay i nm trong vng d liu: SoLieu."
End If
End Sub

V d trn s dng bin kiu Range c tn l VRange, th hin cho vng d liu cn gim st s
thay i (l vng d liu c tn l SoLieu). Th tc ny cn s dng hm Intersect ca VBA, l
hm tm giao ca hai vng d liu, kim tra xem vng d liu Target (c truyn qua tham
s ca s kin) c nm trong vng d liu VRange hay khng. Hm Intersect tr v gi tr
Nothing c ngha l hai vng d liu khng c no chung nhau. Do c s dng ton t Not
nn biu thc Not Intersect(Target, VRange) Is Nothing s tr v gi tr TRUE nu
hai vng d liu c t nht mt chung nhau. V vy, nu vng d liu b thay i c chung
no vi vng d liu tn l SoLieu th chng trnh s hin th hp thng bo. Cc trng
hp khc, th tc s t kt thc v khng c g xy ra c.
6.4. S kin trong UserForm
(Tham kho n phn ca Anh , nu khng c th ly bng cc thuc tnh di)

Activate The UserForm is activated.


AddControl A control is added at runtime.
BeforeDragOver A drag-and-drop operation is in progress while the pointer is over
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
the form.
BeforeDropOrPaste When the user is about to drop or paste data; i.e., when the user
has released the mouse button.
Click A mouse click while the pointer is over the form.
DblClick A mouse double-click while the pointer is over the form.
Deactivate The UserForm is deactivated.
Error A control detects an error and cannot return the error information
to a calling program.
Initialize The UserForm is about to be shown.
KeyDown A key is pressed.
KeyPress The user presses any ANSI key.
KeyUp A key is released.
Layout A UserForm changes size.
MouseDown A mouse button is pressed.
MouseMove The mouse is moved.
MouseUp A mouse button is released.
QueryClose Occurs before a UserForm closes.
RemoveControl A control is removed from the UserForm at runtime.
Resize The UserForm is resized.
Scroll The UserForm is scrolled.
Terminate The UserForm is terminated.
Zoom The UserForm is zoomed.

6.5. S kin khng gn vi i tng


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

expression.OnKey Key, Procedure

Tham s Gii thch


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

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


CTRL hoc SHIFT, Mi phm s c i din bng mt k t hoc chui k t, chng hn
nh a i din cho phm a, hay {ENTER} i din cho phm ENTER.
xc nh cc phm khng hin th trn mn hnh khi ngi dng nhn phm tng ng (chng
hn nh phm TAB hoc phm ENTER) cn phi s dng cc gi tr c nh ngha sn.
Di y l danh sch cc m phm c bit . Mi m phm tng ng vi mt phm trn bn
phm.
Phm M phm Phm M phm
BACKSPACE {BACKSPACE} hoc {BS} INS {INSERT}
BREAK {BREAK} MI TN TRI {LEFT}
CAPS LOCK {CAPSLOCK} NUM LOCK {NUMLOCK}
CLEAR {CLEAR} PAGE DOWN {PGDN}
DELETE hoc DEL {DELETE} hoc {DEL} PAGE UP {PGUP}
MI TN XUNG {DOWN} RETURN {RETURN}
END {END} MI TN PHI {RIGHT}
ENTER ~ (du ng) SCROLL LOCK {SCROLLLOCK}
ENTER (phm s) {ENTER} TAB {TAB}
ESC {ESCAPE} hoc {ESC} MI TN LN {UP}
F1 n F15 {F1} n {F15} SHIFT + (du cng)
HELP {HELP} CTRL ^ (du m)
HOME {HOME} ALT % (phn trm)

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


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

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

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

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


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

Mc d bng cch ny, ngi lp trnh c th gn phm tt cho mt Macro bt k, tuy nhin tt
nht l nn s dng trnh qun l Macro gn phm tt cho Macro (xem thm mc Qun l
Macro trang 13)

7. Cc thao tc c bn trong Excel


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

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


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

Hoc c th s dng on m sau:


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

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

7.1.2. Kho tng tc ngi dng


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

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


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

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

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

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


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

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


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

7.1.4. Khi ng Excel t chng trnh khc


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

Hnh: Hp thoi References trong VBAIDE ca AutoCAD.


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

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

Bt u thc hin cc thao tc trong Excel


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

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


mt Worksheet mi Lu thnh tp c tn Test.xls nm trong th mc gc ca a C:\
Thot khi chng trnh Excel.
7.2. Lm vic vi Workbook
7.2.1. To mi, m, lu v ng workbook
Tomiworkbook
to mi workbook, s dng phng thc Add c trong tp i tng Workbooks:
Dim wb As Workbook
Set wb = Application.Workbooks.Add

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

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


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

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

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


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

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


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

7.3. Lm vic vi Worksheet


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

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

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

7.3.2. S kin trong worksheet

7.4. Lm vic vi Range v Cells


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

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


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

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

7.4.3. Vng c cha d liu Thuc tnh UsedRange


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

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


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

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


ca cc ly hp ca tt c cc (xem thm mc Tham chiu n i tng Range trang
38). Sau khi kt thc vng lp, chui str s c kiu l $A$1,$D$5, nn dng lnh If cui
cng s ct k t cui cng ca chui str chuyn v dng thc a ch ng $A$1,$D$5.
Cu lnh Len(str) tr v chiu di ca chui k t str. Cn cu lnh Left(str,n) tr v n
k t nm bn tri ca chui k t str.
7.5. Lm vic vi biu
Tnh nng biu trong Excel kh n tng. Mt biu c th th hin nhiu kiu d liu khc
nhau trong Excel. Excel h tr hn 100 loi biu khc nhau v ngi dng c th iu khin
hu nh tt c cc thnh phn trong biu bi l, mi thnh phn trong biu chnh l mt
i tng vi cc phng thc v thuc tnh khc nhau. V vy, vic lp trnh vi biu l
khng d, nhng mt khi hiu r cy phn cp i tng th kt qu s n tng hn rt
nhiu.
Tu theo v tr m biu trong Excel c phn thnh 2 loi sau:
Biu nhng ChartObject: l dng biu nm bn trong mt worksheet. Trong mt
worksheet c th cha nhiu biu nhng khc nhau v cc biu ny c th c truy
xut thng qua tp i tng ChartObjects c trong i tng worksheet.
Biu c lp ChartSheet: l dng biu nm trong mt sheet ring bit, gi l
chartsheet. Mi mt chartsheet ch c th cha mt biu dng ny m thi. Biu
dng ny c th c truy xut thng qua tp i tng Charts c trong i tng
workbook.
Biu d l dng nhng hay c lp u c cng mt kiu d liu l Chart. Hn na, trong hu
ht cc bng tnh, cc biu thng c nhng trong worksheet tin cho vic trnh by.
Chnh v vy, cc v d sau c minh ho da trn cc thao tc i vi biu nhng.
7.5.1. To mi biu
Cch nhanh nht to biu bng m lnh l s dng phng thc ChartWizard ca i
tng Chart. Vi phng thc ny, ngi lp trnh c th to c biu ch trong 2 bc:
1. To mi i tng Chart, s dng phng thc Add.
2. Gi phng thc ChartWizard ca i tng Chart va c to.
Phng thc ChartWizard c rt nhiu tham s khc nhau, tt c u l tham s tu chn.

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


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

Tham s Gii thch


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

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

2001 21.0 35.5

2002 24.0 36.0

2003 25.0 37.0

2004 23.0 36.5

2005 23.5 37.0

2006 25.0 38.0

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

7.5.2. Thm mt chui s liu vo biu c


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

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


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

7.6. S dng cc hm c sn trong Excel


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

8. Giao din ngi dng


Khi xy dng cc bng tnh 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 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 cng s dng. Ngi lp trnh li thng c kinh nghim s dng my tnh
hn ngi dng, v vy mt giao din ngi dng c th l d s dng i vi ngi lp trnh
nhng li rt kh dng i vi ngi s dng.
Mt hng xy dng giao din ngi dng l da trn cc tnh nng c trong Excel nh tnh
n, thanh cng c, hay ni cch khc, ngi lp trnh ch n gin to nn mt bng tnh, v
ngi s dng c th tu thao tc trn bng tnh . iu ny s l hp l nu ngi s dng
am hiu v Excel. Tuy nhin, c kh nhiu ngi dng cha c nhiu kinh nghim s dng
Excel v nhim v ca ngi lp trnh l phi c gng to ra giao din ngi dng d s dng
hn. Excel cung cp nhiu tnh nng cho php ngi lp trnh tu bin to nn giao din ngi
dng thn thin hn:
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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 (UserForm);
Tu bin trnh n;
Tu bin thanh cng c;
Tu bin phm tt.
8.1. iu khin nhng trong Worksheet
iu khin nhng trong Worksheet, hay cn gi l iu khin ActiveX, l nhng iu khin c
th chn trc tip ln trong worksheet, lin kt trc tip vi d liu trong cc worksheet m
khng cn thm mt on m lnh no khc. ng nhin, nu cn ngi lp trnh c th thm
cc on m lnh x l cc tnh hung khc cho tng iu khin.

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


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

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


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

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


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

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


iu khin c chn.
Trn thanh cng c Control Toolbox cn c nhiu biu tng khc na, mi biu tng l mt
iu khin thng c s dng. Ngoi ra ngi lp trnh cn c th thm vo cc iu khin
ActiveX khc c trong h thng.
Chi tit v cc iu khin, xem thm phn trang (PHN CA ANH )
Di y ch trnh by mt s iu khin hay dng v mt s thuc tnh c trng trong khi s
dng kt hp vi Excel.
8.1.1. iu khin Spin Button

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


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

8.1.2. iu khin ComboBox

Combo Box, , s dng ngi dng la chn mt phn t trong danh sch x 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 danh sch cc loi mc ca b tng ngi dng la chn chng hn. Combo Box thng
c t trng ln m n lin kt.
Cc thuc tnh c bn ca Combo Box:
Thuc tnh M t
Name Kiu String. Tn ca iu khin
LinkedCell Kiu String. a ch ca lin kt trc tip vi Combo Box. Gi tr ca Combo Box
chnh l gi tr ca c lin kt.
ListFillRange Kiu String. a ch ca vng d liu cu thnh danh sch cc phn t trong
Combo Box. Mi mt hng ca vng d liu l mt phn t trong danh sch .
ColumnCount Kiu Integer. S ct s c hin th trong danh sch x xung ca Combo Box.
Mc nh ColumnCount=1.
BoundColumn Kiu Integer. S th t ct trong vng d liu, l ct m gi tr ca ct s c
gn cho thuc tnh Value ca Combo Box khi mt phn t trong Combo Box c
chn.
ColumnHeads Kiu Boolean. Nu bng FALSE, khng hin th phn tiu ca ct trong danh
sch x xung. Nu bng TRUE, hin th tiu ca ct trong danh sch x
xung, v hng d liu nm ngay pha trn ListFillRange s c ly lm tiu
ca ct.
ColumnWidths B rng ca ct, tnh bng pt. Nu c nhiu ct th b rng ca mi ct s c
cch nhau bng du chm phy (;). V d 60:80
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Style Kiu Integer. Nu bng 0, ngi dng c th nhp d liu trc tip vo Combo
Box hoc chn t danh sch. Nu bng 1, ngi dng ch c th nhp d liu
bng cch chn t danh sch.
Text Kiu String. L on vn bn/d liu c hin th trong Combox.
Value Kiu Variant. L gi tr thc t ca phn t c chn trong Combo Box. Gi tr
ca thuc tnh Value ny chnh l gi tr ca c lin kt vi Combo Box thng
qua thuc tnh LinkedCell.

ToComboBoxcnhiuct
V d sau s lm r ngha ca cc thuc tnh trn thng qua vic to mt Combo Box c nhiu
ct. Combo Box s hin th cc cp ng thit k, v khi la chn mt cp ng, gi tr vn
tc thit k tng ng s c gn cho . Trnh t thc hin nh sau:
1. To mi Combo Box trn worksheet, di chuyn n v tr thch hp.
2. Chn kiu cho Combo Box bng cch gn thuc tnh Style bng 1, ngha l ngi dng ch
c th la chn t danh sch x xung.
3. Gn gi tr cho cc thuc tnh LinkedCell bng C11 l s cha gi tr vn tc thit k
c chn. Gn gi tr ListFillRange bng F2:G7 l vng d liu cha bng cc gi tr
cp ng v vn tc thit k. Thng thng vng d liu ny s c lu tr trong mt
worksheet khc hoc mt ni m ngi dng khng nhn thy c trnh gy ra s lng
tng cho ngi dng.
4. hin th c nhiu ct, gn gi tr thuc tnh ColumnCount bng 2. Do gi tr cn lin
kt l gi tr vn tc thit k, tc l gi tr nm ct th 2 ca vng d liu, do vy cn phi
gn thuc tnh BoundColumn bng 2.
5. hin th tiu cho danh sch x xung, gn gi tr ColumnHeads bng TRUE.

Hnh: Combo Box c nhiu ct.


8.1.3. iu khin Command Button

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

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


on m lnh sau s lm hin th hp thng bo khi ngi dng kch chut vo
CommandButton1:
Private Sub CommandButton1_Click()
MsgBox "Ban vua nhan vao nut lenh nay"
End Sub

8.2. Cc hp thoi thng dng


Trong mt s thao tc thng xy ra cn thc hin thng qua giao din ngi dng cc hp
thoi, Excel xy dng sn nhng hp thoi nh vy. V th, cn nghin cu tn dng cc hp
thoi ny trc khi ngh n vic to cc hp thoi tu bin ca ring mnh.
Mt s hp thoi c bn dng chung, xem thm mc trang .. (ANH ). Di y ch trnh
by cc hp thoi c trng trong Excel.
8.2.1. Hp thoi InputBox ca Excel Hm InputBox
S dng hp thoi InputBox (thay v s dng hp thoi InputBox) c nhiu u im:
nh c kiu d liu tr v;
Ngi s dng c th la chn mt vng d liu trc tip trn worksheet bng cch s
dng chut;
Vic kim tra d liu nhp vo c thc hin t ng.
C php ca hm InputBox ny nh sau:

InputBox(prompt,title,default,left,top,helpFile,context,type)

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


ngha ca cc tham s nh sau:
CHNGIV:LPTRNHTRNMICROSOFTEXCEL

Tham s Gii thch


prompt on vn bn s hin th trong hp thoi
title Tiu ca hp thoi InputBox
default Gi tr mc nh. Nu ngi dng khng nhp g c, hm s tr v gi tr mc
nh ny.
left, top To gc trn bn tri ca hp thoi.
helpFile, context Tn tp tr gip v ch cn hin th
type M xc nh kiu tr v ca hm.

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


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

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


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

8.2.2. Hp thoi Open Hm GetOpenFilename


Trong mt s chng trnh, khi cn ngi dng nhp vo tn tp no , ngi lp trnh c th
s dng hp thoi InputBox. Tuy nhin cch ny c th pht sinh li do ngi dng nhp vo
mt tn tp khng tn ti. Mt cch tt hn lm vic ny chnh l s dng phng thc
GetOpenFilename ca i tng Application. Phng thc ny s hin th hp thoi Open
(ging nh khi chn trnh n FileOpen) nhng ch tr v tn tp c chn m khng m
mt tp no c. V sau , ngi lp trnh c th s dng tn tp ny thc hin mc tiu ca
mnh.
C php ca phng thc ny nh sau (tt c cc tham s u l tham s tu chn):

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

Tham s Gii thch


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

Tham s FileFilter quy nh cc phn t s c hin th trong danh sch x xung File 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:
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
All Files (*.*),*.*

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


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

V d sau s nhc ngi dng chn mt tp, sau s hin th tn tp trong hp thng bo.
Sub GetImportFileName()
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As String
' Gn b lc tp
Filt = "Text Files (*.txt),*.txt," & _
"Comma Separated Files (*.csv),*.csv," & _
"All Files (*.*),*.*"
' Hin th cc tp *.csv l mc nh
FilterIndex = 2
' Gn tiu cho hp thoi
Title = "Chon tep"
' Ly tn tp
FileName = Application.GetOpenFilename _
(FileFilter:=Filt, _
FilterIndex:=FilterIndex, _
Title:=Title)
' Thot nu nhn nt Cancel
If FileName = "False" Then
MsgBox "Khong tep nao duoc chon."
Exit Sub
End If
' Hin th tn tp y
MsgBox "Ban vua chon tep: " & FileName
End Sub
Hnh: Hp thoi Open
8.2.3. Hp thoi Save As Hm GetSaveAsFilename
Phng thc GetSaveAsFilename cng tng t nh phng thc GetOpenFileName. Phng
thc ny s hin th hp thoi Save As, cho php ngi dng chn hoc ch nh tp lu, sau
s tr v tn tp y nhng khng thc hin thao tc lu no c.
C php ca phng thc ny nh sau:

GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonT
ext)

Tham s Gii thch


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

V d sau s hin th hp thoi Save As ngi dng nhp vo tn tp, sau s hin th tn
tp c la chn.
Sub SaveAs()
Dim fileSaveName As String
fileSaveName = Application.GetSaveAsFilename( _
InitialFileName:="TenTep", _
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
FileFilter:="Excel Workbook (*.xls), *.xls", _
Title:="Luu tap tin")
If fileSaveName <> "False" Then
MsgBox "Save as " & fileSaveName
End If
End Sub

8.2.4. Hp thoi chn th mc i tng FileDialog


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

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

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

Cn phi lu rng, tnh nng ny khng c trnh by r rng trong cc ti liu tr gip c
Excel. Cc ti liu tr gip rt s lc, khng cp n mt s tht: cc hp thoi hin th khi
gi bng VBA khng hon ton ging nh khi gi thng qua trnh n trong Excel. Chnh v
vy, chng c cch no khc ngoi vic th nghim kim tra hot ng ca cc hp thoi.
CH Cc hp thoi hin th khi gi bng VBA khng hon ton ging nh khi gi thng
qua trnh n trong Excel.
Trong trng hp ca hp thoi Go To, khi hin th bng VBA, nt Special b m i, khng
hon ton ging nh khi chn t trnh n EditGo To.

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


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

hin th cc th khc trong hp thoi Format Cells, s dng cc hng s c nh ngha


trc nh: xlDialogFormatNumber, xlDialogBorder, xlDialogCellProtection,
xlDialogPatterns, hoc xlDialogFontProperties.

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

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


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

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


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

8.2.6. Thc thi mc trnh n Excel t VBA


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 nh khi ngi dng chn trnh n EditGo To.
Application.CommandBars(Worksheet Menu Bar). _
Controls(Edit).Controls(Go To...).Execute

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

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

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


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

object.Show modal

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

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

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


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

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


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

Khi c mt UserForm tng i phc tp, 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).
Mt khi c hin th, UserForm s c hin hu nh vy trn mn hnh cho n khi ngi
dng ng UserForm y. V vy, thng thng, ngi lp trnh s to thm mt nt lnh
(Command Button) trn UserFrom thc hin mt th tc ng UserForm. Th tc ny c th
s s dng lnh Unload d ti hon ton UserForm, hoc s dng phng thc Hide ca i
tng UserForm tm thi n UserForm.
on m sau s ng ca s UserForm1
UserForm1.Hide

Hoc c th s dng on m sau:


Unload UserForm1

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


thuc tnh ca UserFrom vn c th c truy cp bnh thng. Cn lnh Unload th s g ti
hon ton UserForm ra khi b nh, cc thuc tnh ca UserForm khng th truy cp c na.
8.3.3. Cc iu khin trn UserForm
Ngi lp trnh c th rt nhiu loi iu khin khc nhau ln UserForm. Thng tin chi tit, xem
li phn (ANH ). Di y ch trnh by thm mt iu khin ring c trong 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.

Hnh: iu khin RefEdit


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

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


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

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


cch chn vng d liu bng chut, ngi dng cn c th g v hiu chnh a ch hin th
trn iu khin RefEdit.V vy, phi lun kim tra tnh ng n ca a ch vng d liu.
on m sau minh ho cch kim tra li ny. Nu vng d liu nhp vo khng ng, mt
hp thng bo s hin ln, v cho php ngi dng nhp li:
On Error Resume Next
Set UserRange = Range(RefEdit1.Text)
If Err <> 0 Then
MsgBox Invalid range selected
RefEdit1.SetFocus
Exit Sub
End If
On Error GoTo 0
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
Ngi dng c th chn mt sheet khc trn th cha cc sheet khi ang chn vng d
liu. V vy, khng nn gi s rng vng d liu c chn s nm trn sheet hin hnh.
Tuy nhin, nu ngi dng chn mt sheet khc, a ch ca vng d liu s c t ng
thm vo mt tin t l tn ca sheet c chn. Chng hn nh: Sheet2!$A$1:$C$4
Nu ch cn ly a ch ca mt trong vng d liu m ngi dng chn, ngi lp
trnh c th chn ra mt gc trn bn tri ca vng d liu bng cch s dng on
m lnh nh sau:
Set OneCell = Range(RefEdit1.Text).Range(A1)

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


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

8.3.4. V d v mt hp thoi tu bin


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

Hnh: Thanh trnh n trong Excel.


8.4.1. Cu trc ca h thng thanh trnh n
Cu trc ca h thng thanh trnh n trong Excel c th c th hin thng qua s hnh cy
nh sau:
Menu Bar: L hng ch nm trn cng, ngay pha di thanh tiu ca ng dng
Excel. Nh cp, tu vo tng ng cnh m thanh Menu Bar c th l Worksheet
Menu Bar hoc Chart Menu Bar.
Menu: L mt thnh phn trong h thng trnh n ca Excel, khi ngi dng kch chut
vo mt Menu th mt danh sch cc MenuItem s hin ra.
Menu Item: l mt thnh phn ca Menu xut hin khi ngi dng kch chut vo menu.
Mi Menu Item s thc hin mt tc v trong chng trnh khi ngi dng kch chut ln
Menu Item .
Ngoi ra, trong h thng menu ca Excel cn c khi nim Separator Bar, l mt ng
gch ngang phn cch gia cc Menu Item dng nhm cc Menu Item c tc dng
tng t nhau.
Cc Menu c th lng vo nhau theo nhiu cp khc nhau. Mt Menu cng c th l MenuItem
nm trong mt Menu khc. Chng hn nh Menu View ca Excel c MenuItem tn l Toolbars,
v n lt mnh Toolbars cng chnh l mt Menu, c cha cc MenuItem khc nh: Standard,
Formatting,
Hnh sau s minh ho r hn v cu trc ca h thng trnh n trong Excel.

Hnh: h thng thanh trnh n


CHNGIV:LPTRNHTRNMICROSOFTEXCEL

8.4.2. To menu tu bin


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

to Menu v MenuItem, s dng phng thc Add c trong tp i tng Controls. Thc
cht, phng thc ny s thm mt iu khin vo trong tp i tng Controls ca i tng
cha, ni s cha Menu v MenuItem. C php ca phng thc Add nh sau (tt c cc tham s
u l tham s tu chn):

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

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

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


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

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


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

2. Vit m lnh cho tng MenuItem


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

M LNH CHO MENUITEM3: TINH TICH


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

M LNH CHO MENUITEM6: LUA CHON 1


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

M LNH CHO MENUITEM7: LUA CHON 2


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

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


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

' TO MENU1: VI DU MENU (CommandBarPopup).


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

' TO MENUITEM2: TINH TONG (CommandBarButton).


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

' TO MENUITEM3: TINH TICH (CommandBarButton).


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

' TO MENU4: MENU CAP 2 (CommandBarPopup).


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

' TO MENUITEM5: LUA CHON 1 (CommandBarButton).


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

' TO MENUITEM6: LUA CHON 2 (CommandBarButton).


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

Trong cc cu lnh to h thng trnh n nh trn, tham s Temporary ca phng thc Add
u c gn bng True, v vy, khi ngi dng thot khi Excel th cc h thng trnh n va
thm vo s c t ng xo i.
8.4.3. Xo menu
Khi ngi dng ch ng workbook m khng ng Excel, trnh n va c thm vo vn cn
c hin th trn h thng thanh trnh n ca Excel. V vy, c nhng lc ngi lp trnh
mun xo trnh n trn va c to nh trn. thc hin iu ny, c th s dng phng
thc Delete c trong i tng kiu CommandBarControl hoc CommandBarPopup hoc
CommandBarButton.
on m lnh sau thc hin xo trnh n Vi du Menu c to ra v d trn.
Sub XoaMenu()
Dim cb As CommandBar
Dim cbp As CommandBarPopup
Ly tham chiu n thanh trnh n
Set cb = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
Tham chiu n trnh n Vi du Menu
Set cbp = cb.Controls("Vi du Menu")
If Not IsNull(cbp) Then
cbp.Delete
End If
End Sub

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

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


n khi ng workbook. V vy, trong s kin Workbook_Open s gi n th tc thc hin vic
to trnh n, cn trong s kin Workbook_BeforeClose s gi n th tc thc hin vic xo
trnh n.
S KIN Workbook_Open
Private Sub Workbook_Open()
Gi th tc thc hin vic to trnh n
TaoMenu
End Sub

S KIN Workbook_BeforeClose
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Gi th tc thc hin vic xo trnh n
XoaMenu
End Sub
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
8.4.4. Gn phm tt cho Menu Item
Gn phm tt cho Menu Item thc cht chnh 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.

You might also like