Professional Documents
Culture Documents
VBA Excel PDF
VBA Excel PDF
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.
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 .
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.
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.
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
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
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.
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)
ActiveCell
Thuc tnh ActiveCell th hin cho hin thnh trong bng tnh Excel. Kiu d liu ca
ActiveCell l kiu Range. Ngi dng c th truy cp n a ch ca hin hnh bng cch truy
cp thm vo mt cp na trong cy phn cp i tng, l thuc tnh Address:
MsgBox Application.ActiveCell.Address
Thuc tnh ny rt c ch khi 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
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
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"
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
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
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])
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)
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
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
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
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
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
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
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
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.
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"
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.
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
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
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:
SkinBeforeClose
S kin BeforeClose xy ra trc khi mt workbook chun b ng. S kin ny thng c
dng kt hp vi s kin Open. Ly v d nh, c th s dng s kin Open to trnh n tu
bin cho workbook, sau s dng s kin BeforeClose xo trnh n trc khi workbook
c ng. V nh vy, theo cch ny, workbook lun c mt trnh n tu bin m khng lm
nh hng n chng trnh Excel ni chung.
Khun mu ca b x l s kin BeforeClose nh sau:
V d sau s minh ho cch thao tc vi s kin BeforeClose. V d ny s kim tra xem khi s
kin BeforeClose xy ra, workbook c lu hay cha. Nu cha lu s hin th mt hp
thoi yu cu ngi dng la chn cc phng n: lu khng lu quay tr li workbook
(khng ng workbook na bng cch gn tham s Cancel = TRUE):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg As String
Dim Ans As Integer
If Not (Me.Saved) Then
Msg = "Bn c mun lu workbook: "
Msg = Msg & Me.Name & "khng ?"
Ans = MsgBox(Msg, vbQuestion + vbYesNoCancel)
Select Case Ans
Case vbYes
Me.Save
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If
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
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)
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
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)
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.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
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 ======
Mworkbook
m mt workbook c, s dng phng thc Open c trong tp i tng Workbooks:
Dim wb As Workbook
Set wb = Application.Workbooks.Open("C:\MyBook.xls")
Phng thc SaveAs thch hp khi lu workbook ln u tin, hoc khi mun lu workbook
thnh mt workbook c tn khc. Cn phng thc Save s lu workbook v gi nguyn tn
hin ti ca workbook.
ngworkbook
ng workbook, s dng phng thc Close c trong i tng workbook. Phng thc ny
khng t ng lu workbook, nhng khi c s thay i no cha lu, Excel s hin th hp
thoi SaveChanges trc khi ng workbook. Ngi lp trnh c th tt hp thoi ny bng cch
truyn thm tham s vo cho phng thc thc Close:
ThisWorkbook.Close True
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"
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.
V d sau to mt biu trong mt chartsheet nm sau worksheet hin hnh, sau s dng
phng thc ChartWizard to biu da trn vng d liu c tn l SoLieu. Ni dung ca
vng d liu nh sau:
Mt Hng A Mt hng B
2000 20.0 35.0
Sub ChartWizard()
Dim ws As Worksheet, chrt As Chart
Set ws = ActiveSheet
' To mi chartsheet, nm sau worksheet hin hnh.
Set chrt = Charts.Add(, ws)
' t tn cho chartsheet.
chrt.Name = "Bieu Do Gia"
' To biu s dng phng thc ChartWizard.
chrt.ChartWizard ws.[SoLieu], xlLine, , xlColumns, 1, 1, True, _
"Bieu Do Gia Hang Nam", "Nam", "Gia"
End Sub
CHNGIV:LPTRNHTRNMICROSOFTEXCEL
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.
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.
InputBox(prompt,title,default,left,top,helpFile,context,type)
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)
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 (*.*),*.*
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)
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
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.
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.
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).
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
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):
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.
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
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.