Professional Documents
Culture Documents
Chan thanh cam on Tac gia cua bai viet ! Trong sut thi gian ghi, macro c lu li vi tn xc nh trong module, module c to ra trong qu trnh ghi v l mt phn ca Workbook. Marco c ghi li c th c lu trong This Workbook (Workbook hin hnh), New Workbook (Workbook mi) hoc trong Personal Macro Workbook (nhng macro s hu ring). Nhng lnh (code) c lu trong Personal.xls, nhng macro s hu ring u s dng c khi bn m Excel ra. Cc macro trong cc Workbook khc nhau c th s dng bt c lc no khi cc Workbook ang m (k c s dng chng t Workbook khc). iu kin c th tin hnh ghi macro: 1. Bng tnh Excel hin hnh (Activate Excel). 2. S dng Workbook mi.
Hnh 3: Qu trnh ghi 3. Chuyn sang Shortcut key: trng (s thc hin sau). 4. Trong Store macro in: mc nh l This Workbook. 5. Trong Description: bn g ni dung sau Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! Enter address starting in cell B3 6. Bm OK. 7. Thanh Stop Recording s xut hin. Bn c th di chuyn n n v tr khc nu thy cn thit. 8. Trong thanh Stop Recording, n vo nt Relative Reference cho m i (khng tc dng- hnh 3). 9. Trong Sheet1, bm vo B3 v g tn bn. di g tn lp, tip theo l tn trng. 10. Cho ton b cc ch m v nghing. 11. Bm vo B6. 12. Trong Stop Recording, bm vo nt Stop Recording. Nh vy, macro c tn Address_abs c ghi li. Nhng m bn s dng trong qu trnh ghi c th hin di dng a ch tuyt i. V vy, nhng trong Worksheet s thc hin khi bn cho chy macro, tn, lp v tn trng s c to ra ng v tr trong Worksheet. Ghi ch: Bn c th la chn tham chiu tng i trong sut qu trnh ghi macro. Vn ny s c cp mc 2.3.
2.2. Chy macro khi s dng bng iu khin macro (Macro dialog box)
TOP Bn cho chy macro trn t Sheet2 nh sau: 1. Chn sang Sheet2 v bm vo no ngoi B3. 2. Trong menu Tools/Macro, chn Macros (hnh 1). 3. Bm vo macro c tn Address_abs trong danh sch macro (hnh 4). 4. Bm vo nt Run. Sau bn s thy ni dung Sheet2 ging nh Sheet1.
Hnh 4: Chy macro Sheet2 Ghi ch: Nu bn mun hu qu trnh chy macro trc khi kt thc, n vo nt Esc.
Chan thanh cam on Tac gia cua bai viet ! 3. Trong menu Tools/Macro, chn Record New Macros (hnh 1). 4. Trong Macro name: g Address_Ref t tn macro (hnh 2). 5. Trong Shortcut key: G ch A, nh vy phm tt s l Ctrl+Shift+A (Nu phm tt b trng vi phm c sn th Excel t ng b sung thm phm Shift nh trng hp ny). 6. Trong Store macro in: mc nh l This Workbook. 7. Trong Description: bn g ni dung sau Enter address starting in activate cell position 8. Bm OK. 9. Thanh Stop Recording s xut hin. Bn c th di chuyn n n v tr khc nu thy cn thit. 10. Trong thanh Stop Recording, n vo nt Relative Reference cho m i (khng tc dng). Microsoft Excel s tip tc ghi macro vi quan h tng i cho n khi no thot khi Microsoft Excel hoc bn n li vo nt Relative Reference. 11. G tn bn, lp, tn trng v a ch trong cc B11, B12, B13 v B14. Ni dung th hin nh sau: Nguyen Van Hung Lop DCCT-DKT K48 Truong DH Mo Dia chat xa Dong Ngac, Tu Liem, Ha Noi 12. Cho ton b cc ch m. 13. Bm vo B15. 14. Trong Stop Recording, bm vo nt Stop Recording. Ghi ch: Nu bn mun macro chn c bit, u tin chn u (active cell), sau chn c quan h vi u, bn c th la chn hn hp a ch tuyt i v tng i trong qu trnh ghi macro. s dng tham chiu tng i trong sut qu trnh ghi macro, nt Relative Reference lun sng (c tc dng). s dng tham chiu tuyt i trong sut qu trnh ghi macro, nt Relative Reference lun ti (khng tc dng).
Chan thanh cam on Tac gia cua bai viet ! Ngoi ra, c th chy macro t nt lnh (button) trong cc cc thanh cng c t to (custom toolbar). V d nh c th n nh macro Address_abs trong nt hnh mt ci (Smiley Face) nh sau: 1. Di chuyn chut n mt im no trong cc thanh toolbar. 2. n phi chut, trong thc n tt chn Customize. 3. Trong bng Customize, chn tab Toolbars (hnh 6). 4. Chn nt New. 5. Sau bng New Toolbar xut hin v bn g tn vo (Macro1) ri OK. 6. Trong bng Customize, chn tab Commands (hnh 7). 7. Trong hp Categories, chn AutoShapes. 8. Trong Commands, cun xung cho n khi bn chn c hnh ng (Smiley Face). 9. Ti hnh Smiley Face, gi tri v ko chut vo trong thanh cng c Macro1 (hnh 8). Bn c th chn thm cc biu tng khc nu cn. 10. Bm phi chut vo nt Smiley Face, thc n tt s hin ra. Bn c th sa hay xo hnh v thay bng cc hnh khc. 11. Chn Assign Macro trong thc n tt, chn macro Address_abs v n OK. 12. ng bng Customize vo.
Hnh 8: To cc nt lnh trong thanh Macro1 v gn Assign Macro vo. Ghi ch: Thanh cng c t to thuc s hu ca workbook m n c to ra. Bn hy th s dng nt lnh va to ra thc hin cng vic nh sau: Code: 1. Xo sch ni dung ca Sheet2. 2. Bm chut vo nt Smiley Face trong thanh cng c Macro1. Kt qu s th hin trn Sheet2.
Hnh 10: To menu Maro2 trong menu ca Excel K t v (&) trc M s gch chn ch M trong menu Macro2 (tr thnh Macro2), chnh l phm tt chy macro Macro2 (ch cn n Alt+M). Tip theo ta tin hnh to menu con trong Macro2: 1. Trong Categories (trong trng hp bng Customize vn ang m), chn Macros. 2. Ti Commands, chn Custom Menu Item (hnh 11), gi tri v ko chut n phn trng di Macro2 (vng c khoanh ). 3. Bm phi chut vo Custom Menu Item trong menu m Macro2. Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! 4. Ti thc n tt, i tn trong Name thnh &Work Address (hnh 12). 5. Sau vo Assign Macro chn macro chy. 6. Cui cng l ng bng Customize.
Hnh 12: i tn menu con v gn Assign Macro cho n. Menu mi to c lu gi trong workbook . K c bn ng workbook nhng khi bn bm vo menu th workbook cha menu t ng m ra v thc hin lnh lun.
4. Sa macro
TOP Khi bn ghi macro u tin, Excel to ra molule trong workbook . Module cha cc lnh (code) c vit trong VBA. Cc bc thc hin nhn thy module: [code/1. T menu Tools/Macro chn Macros. 2. Chn macro Address_abs v bm vo nt Edit.[/code] Ca s Microsoft Visual Basic hin ra nh hnh 13. Bn c th thy r c cc dng code tng macro khi cun xung.
Chan thanh cam on Tac gia cua bai viet ! Code: the Excel application (l ng dng trong Excel- i tng ln nht- hnh 14) a workbook (chnh l file excel) a worksheet (l cc sheet trong workbook) a range (l vng) a chart (l biu )
Hnh 14: Cc i tng trong Excel Bn c th coi nhng i tng trn nh l danh t (v d: ci bnh l danh t). Trong macro bn lp, m Range(B3) chnh l i tng. i tng ny c th cha cc i tng khc trong n. i tng Application bc cao nht (i tng m), bao gm ton b i tng trong Excel. Nhng thay i xy ra trong i tng Application nh hng n ton b ni dung trong n. i tng Application c cha i tng cng ln nh Workbooks. V d nh sau: Application.Workbooks cp (refer) n tt c workbook ang m trong Excel. Workbooks.Item(1) cp n workbook u tin v thng c gi tt l Workbooks(1). Workbooks(Seles.xls) s cp n workbook tn . Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! Trong workbook thng cha cc worksheet, trong mi worksheet cha nhiu (cell). Bn c th cp n B3 nh sau Workbooks(Seles.xls).Worksheets(Sheet1 ).Range(B3) Trong lc workbook ang lm vic th n c gi l active workbook (workbook hin hnh), worksheet no ang hin th th c gi l active worksheet. Nu bn c vi worksheet ang hin th, worksheet no ang c tr (cursor) trong n th c gi l avtive. Nu bn c vi workbook ang hin th, workbook no ang cha active worksheet trong n th c gi l avtive workbook. Nu bn khng mun thc hin ring trn workbook hay worksheet no, VBA s thc hin trn active workbook hay active worksheet (mc nh). Cn nu bn thc hin theo mun, th cn thc hin nh trn (Range(B3)). Cn Sheets la chn ton b sheet trong workbook, k c chart sheets (biu ) v worksheets. Sheet(Year2006) s tham chiu n sheet c tn l Year2006. Chart(1) s tham chiu n chart sheet theo th t tab.
Chan thanh cam on Tac gia cua bai viet ! Trong v d di y, bin s Number1 v Number2 c a ra gi tr ban u v s dng chng trong tnh ton (v chng l s). Number1 = 3 Number2 = 9 Mynumber = Number*Number2 5.4.1. Kiu d liu trong VBA TOP Mi ng dng thng x l nhiu d liu, ta dng khi nim bin lu tr d liu trong b nh my tnh, mi bin lu tr 1 d liu ca chng trnh. Mc d VBA khng i hi, nhng ta nn nh ngha r rng tng bin trc khi truy xut n code ca chng trnh c trong sng, d hiu, d bo tr v pht trin. Nu bn cn nhng s liu c c trng ring (nh s nguyn, thp phn, chui, mng,...) s dng trong macro, bn c th khai bo bin . Cng nh quy nh t tn ca macro, cch t tn cho bin nh sau: Tn bin c th di n 255 k t. K t u tin phi l mt k t ch (letter), cc k t tip theo c th l cc k t ch (letter), k s (digit), du gch di (_). Tn bin khng c cha cc k t c bit nh cc k t : ^, &, ),(,%, $, #, @, !, ~, +, -, *, VBA khng phn bit ch HOA hay ch thng trong tn bin. Nn chn tn bin ngn gn nhng th hin r ngha. Khi vit tn bin ta nn vit hoa ch u tin ca mt t c ngha. Khng c dng tn bin trng vi cc t kho nh : Print, Sub, End(t kha l nhng t m ngn ng VBA dng cho nhng thnh phn xc nh ca ngn ng). 5.4.2. Khai bo kiu d liu TOP Cch khai bo bin s: Dim variable_name As data_type C cc kiu d liu (data_type) c trnh by nh sau:
Khai bo bin s l th tc tc ng n quy trnh x l v khng b thay i bi th tc khc. Nhng bin s m vt qu vng ca loi d liu quy nh (trong bng trn) th bin s b li Overflow (trn b nh). V d v s dng Dim trong khai bo bin s: Sub Kieudulieu() Dim Tuoi As Integer Tui l s nguyn Dim Caodo As Single Cao l s Dim Ten As String Tn ngi l chui Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! Tuoi = 22 Khai bo tng gi tr Tuoi, Caodo, Ten Caodo = 6.75 Ten = "Nguyen Van Hung" MsgBox "Ho va ten: " & Ten & vbTab & vbTab & "Tuoi la " & Tuoi MsgBox "Cao do ho khoan la + " & Caodo & " (m)" End Sub Kt qu th hin hnh v di y:
Hnh v 15: Kt qu th hin kiu d liu Vi nhng gi tr khng thay i th nn thit lp nh nhng hng s (constant). iu ngn cn chng b bin i do nhm ln. V d: Const Pi = 3.14159 Dientich = Pi*2 Nu bn mun th tc (Sub) khc truy cp nhng bin s , hy khai bo chng dng u tin ca Module, trn c cu lnh Sub (hnh 16). Trng hp ny hay s dng khi bn c mt bin s dng chung cho chng trnh. Ngoi ra, bn c th yu cu phi khai bo ton b bin s bng cch s dng Option Explicit. Nu c bin no cha c khai bo, VBA s bo li ngay (hnh 16)
Hnh v 16: Khai bo Option Explicit v bin dng chung trn cng Trong v d tip theo, bin s khai bo gi tr ban u (bng 0) v sau khi s dng phng php m cc trong vng B1:B10 tho mn iu kin gi tr (value) trong nh hn 40. Bin s D s b thay i. Sub VD_Bienso() Dim Marks As Range Dim C, D As Integer Set Marks = Range(B1:B10) D=0 Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! For Each C in Marks If C.value < 40 then D=D+1 End If Next C MsgBox Gia tri moi cua bien so D la & D End Sub
Chan thanh cam on Tac gia cua bai viet ! V d: Hnh 17 l kt qu ca Sub di y Option Base 1 Sub assignArray() Dim Arr(4) As String Arr(1) = "Thang 1" Arr(2) = "Thang 2" Arr(3) = "Thang 3" Arr(4) = "Thang 4" MsgBox Arr(1) & Chr(13) & Arr(2) & vbNewLine & Arr(3) & vbCrLf & Arr(4) End Sub
Hnh 17: Cc phn t trong mng Hm Msgbox s cho hin hp thng bo nh bn cnh, cc bn s hc mc 11.1. Ngoi ra cc bn cn thy hm Chr(13), vbNewLine, vbCrLf c cng tc dng l ngt dng trong hp thoi (ging nh phm Enter ngt dng trong Word).
Chan thanh cam on Tac gia cua bai viet ! Sub ChangeFont1() Selection.Font.Name = Times New Roman Selection.Font.FontStyle = Bold Italic Selection.Font.Size = 12 Selection.Font.Underline = xlUnderlineStyleSingle Selection.Font.ColorIndex = 5 End Sub Trong th tc trn, bn thy on Selection.Font. c lp li nhiu ln v bn c th vit li khi s dng With - End With. Di y l th tc sa li: Code: Sub ChangeFont2() With Selection.Font .Name = Times New Roman .FontStyle = Bold Italic .Size = 12 .Underline = xlUnderlineStyleSingle .ColorIndex = 5 End With End Sub Bn s thy khi s dng With- End With, vic qun l cc i tng v thuc tnh ca chng d dng hn.
Hnh 21: Chn ch c th bng search hoc trong Table of contents Sau ca s hin ra gia cha danh mc cc nhm - lp (classes) khc nhau ca i tng. Nhm (class) chnh l phn m t cc dng ca i tng (v d nh particular chart thuc v nhm Chart) . Nhm thuc d n (project) hay th vin (library). Code: Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! 3. Bm vo hnh tam gic i xung bn cnh <All Libraries> v chn Excel (hnh 19). Khi cc nhm thuc Excel s xut hin. 4. Trong vng Classes, ban cun xung v chn Range. 5. Trong Members of Range bn bm vo ClearContents. 6. Ch dn bn cnh ClearContents m c k hiu mu xanh cho bit i tng l phng php (method). 7. Nu mun bit thm thng tin v ClearContents, bn bm vo nt Help (hnh du ? mu vng). 8. xem v d, bn n vo Example mu xanh (hnh 20). 9. ng ca s hng dn s dng ClearContents v tip tc cun tm cc thnh phn khc trong Members of Range. 10. Ch dn m c biu tng khc bn cnh (hnh bn tay ch) cho bit hm l thuc tnh (property). 11. ng ca s Visual Basic Object Browser vo.
6.4. Cc file v d
TOP Excel a ra mt s file v d c tn l Samples.xls. Hu ht i vi mi phin bn Excel khc nhau th ng dn n file ny cng khc nhau. Trong Excel 2003, bn c th tm thy file ny ti ng dn sau: Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! C:\Program Files\Microsoft Office\Office10\Samples.xls ??? Samples.xls cp nhiu ng dng ca Excel. Mi sheet hng dn mt phn cng vic. Ni dung c lin quan n VBA l Chart Labeling, Repeating Tasks, Arrays, API examples, Events, Automation, ADO,... Hnh nh v file Samples. xls trong Excel 2000.
Hnh 28: Ca s Auto List Members Auto List Members: Khi c chn, VBA s t ng cho hin danh sch cc thuc tnh v phng thc ca mt iu khin hay mt lp, khi ta g vo tn ca iu khin (hnh 28). Auto Quick Info: Tng t nh trn, nhng n hin th c php ca 1 hm hay th tc, tham s u tin c in m.
Hnh 29: Ca s Auto Quick Info Auto Data Tip: Hin th danh sch cc d liu khi khai bo bin.
Hnh 30: Ca s Auto Data Tip Trong ca s Editor Format c cc la chn chnh sau: Code Color: Bn c th la chn mu ch, mu nn ca tng loi code, mc nh l Auto. Font: Chn loi font ch tu thch, mc nh l font Courier New. Size: Chn kch c font ch, ph hp vi ngi mt km . Ngoi ra cn mt s la chn khc, cc bn t tm hiu. Ghi ch: VBA c rt nhiu i tng, phng thc v thuc tnh. Bn khng th no bit c ht hoc s b qun. VBA cung cp cho bn nhng tnh nng gi nh trn gip cc bn c th khai thc tt hn VBA.
Chan thanh cam on Tac gia cua bai viet ! Hnh 32: D n Su_dung_VBA trong <All Librairies> v bo v code trong Protection C nhng d n (project) ca bn lp ra m khng mun ngi khc xem code, bn c th kho li. thc hin cng vic ny, trong tab Protection bn la chn nh sau: Lock project: Kho code trong module, khng cho nhn thy v khng cho sa cha. Bn phi chn mc Lock project for viewing. Password to view project properties: Bn phi g ni dung m kho trong hp Password, ni dung m kho bin thnh du sao *. Sau , bn phi xc nhn ni dung m kho trong Confirm password bng cch g li ni dung m kho va vo. Nu bn g khng ng ni dung, VBA s bo li v bn phi g li cho ng. S k t ti a l 24 k t, c th l s, ch v cc k t c bit. Sau , mi khi m file trn, c th xem c code, bn vo menu Tools/Macro, chn Visual Basic Editer (hoc n Alt + F11). Ca s Microsoft Visual Basic hin ra, tuy nhin ton b ni dung code u khng hin ra (hnh v 33). xem c ni dung code, bn nhy kp vo Su_dung_VBA Project, ca s Su_dung_VBA Password hin ra. Bn phi khai bo ng Password th ni dung code mi hin ra.
Hnh 33: Hp thoi hi m kho khi bn m Project b kho. Ghi ch: Lu khi s dng m kho, nu bn qun th s khng th m c project. V vy, bn phi nh ni dung m kho v nn chn ni dung no d nh. Nu mun i m kho th bn vo ca s Password thay i.
Chan thanh cam on Tac gia cua bai viet ! My nm gn y, do virus macro pht trin nn Microsoft b sung thm ch an ton trong cc ng dng. Chc nng Security iu khin s lm vic ca macro, tc l c th cho hot ng hoc khng. 1. Bn vo menu Tools/Macro v chn Security (hnh 34), ca s Security hin ra. 2. Trong Security, ti tab Security Level c 4 trng hp chn nh sau: - Very High: t ch an ton rt cao, cc macro khng th chy c, ch tr macro ca Office. - High: Ch nhng macro c xc nhn mi c th chy, cc macro khc cng b v hiu ha. c macro c xc nhn, bn phi ng k trong menu Tools\Option\Securitry\More Macro\Trusted Publisher. - Medium: t ch an ton trung bnh. Khi chn trng hp ny, nu bn m file c cha macro th n s cnh bo nh hnh 35. Bn c th la chn Enable Macros cho macro hot ng hoc Disable Macros macro khng hot ng. Trong trng hp file ca bn khng s dng macro (th tc hay hm t to) m khi m Excel cnh bo nh hnh 31 th file ca bn b nhim virus macro. - Low: Khng t ch an ton, tc l Excel khng cnh bo bt c vn g c. 3. Nh vy, khi bn s dng VBA th nn t Security Level mc Medium hoc Low. Khi cc th tc, hoc hm mi hot ng c.
Chan thanh cam on Tac gia cua bai viet ! Hnh 35: Cnh bo macro cha trong file
8. Vit macro
TOP Khi bn tin hnh ghi (record) macro, Excel s t ng to module v b sung n vo trong workbook v vit li nhng hnh ng bn ghi thuc v module . Khi bn mun vit m (code) trong workbook, bn c th b sung module trong workbook . S ghp ni cho pht trin macro c gi l Visual Basic Integrated Development Evironment (IDE). Macro c trong module c hin ra trong IDE thay th cho bng tnh trong workbook (nh Excel i trc 97).
Trc tin chuyn sang workbook mi (nhng cho php workbook c vn m) nh sau: 1. Tip theo bm chut vo nt New trong thanh cng c (toolbar), hoc vo menu File ri chn New. 2. Bm chut phi ti tn ca Sheet1 v chn Rename trong menu tt. 3. G ni dung Text ri n Enter. Vit macro: 1. T menu Tools/Macros bn chn Visual Basic Editor. 2. Trong ca s Microsoft Visual Basic bn vo menu Insert v chn Module (hnh 36). 3. Nu cn, bn c th thay i tn ca module theo mun. Trong ca s Properties, bn cnh (Name) bn chn Module1 v sa thnh Chuongtrinh. 4. Bm vo vng trng ca ca s Chuongtrinh (phn code). 5. G Sub MyFirst ri bm Enter. Khi Excel s t ng in () v End Sub, th hin nh hnh 36. 6. G cc lnh tng bc mt theo s m t di. Bn c th c c nhng gip trong Sub Address_abs() ti mc 4 v hnh 13. Trc , macro ca bn cha cc lnh n gin. - Bc 1: Chn sheet c tn Text (dng Sheets(Text).Select) - Bc 2: G on I can write macros! trong B2 trong sheet . - Bc 3: Bi m ch. Cui cng, bn kim tra (test) li macro Text: Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! 1. Quay tr v sheet Text. 2. T menu Tools/Macros chn Macros. 3. Trong ca s Macros, bn chn macro c tn l MyFirst v chn Run. Mi vic s tt p, on ch m I can write macros! s c nhp vo B2. Khi code b li th s c bng thng bo li, v d nh hnh 37.
Hnh 38: Sa li gp phi khi vit code Khi gp li, bn tin hnh theo cc bc sau y: 1. Bm vo nt Debug v tm kim li sa li. Li ca cu lnh u tin s c bi nn mu vng (hnh 38). 2. Sa nhng cu lnh sai trong phn c bi vng . 3. Mi tn vng l s cho bit rng macro ang ch dng (break mode). 4. Ngoi ra bn c th bm vo Run, sau chn Reset xc lp li (hnh 38) hoc chn Design Mode xc lp ch thit k. Cn nu mun macro chy tip th chn Continue (hoc n phm F5). 5. Quay tr v sheet Text v xem macro lm vic c chnh xc khng. Bai viet duoc tong hop tu Internet
8.2. Sa cha li
TOP Khi bn g mt dng code trong macro v g Enter, Excel s kim tra dng . Nu n tm c s hng m hiu c, v d nh range, th s tr thnh Range (ch r t ng chuyn thnh ch hoa R u). Nu code thiu hoc tm ra li, Excel s bin ni dung thnh mu v hin ra bng thng bo li (hnh 39). C nhiu loi li khc nhau, tu vo li c th m c tng kiu ni dung bng thng bo.
Hnh 39: Bo li code Nu bn mun bit thm thng tin v li th bm vo nt Help. sa cha li , bn bm OK v sa ni dung dng c mu cho ng. C nhng trng hp gp phi nhng li m khng c thng bo cho n khi Visual Basic bin dch n trc khi chy. Trng hp m bn gp l li Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! compile-time. Visual Basic s cho bit v tr ca li v s gi cho bn thng bo v li . Cn cc li khc ch xut hin khi macro chy tht s. c gi l li run-time. sa cha li ny th bn bm vo Goto ri sa on code . Mt s li gp phi khng hn l li, n ch xut hin khi macro chy. V d nh chia mt s cho khng (zero) c th xy ra ngoi mun. Da vo hon cnh m bn c th s dng cu lnh On Error by li (xem mc 13).
Chan thanh cam on Tac gia cua bai viet ! V d 1: Range(A1:A3).Select th vng A1:A3 s c chn (bi en) V d 2: Vi workbook c tn Popupmenu, trong worksheet Sheet1, bn gn ni dung Bo mon DCCT vo B3. Sau cho ni dung ch m, nghing, mu v nn mu vng. Code: Sub Thunghiem() Workbook(Popupmenu).Sheets(Sheet1).Range("B3").Select ActiveCell.FormulaR1C1 = "Bo mon DCCT" Selection.Font.Bold = True Selection.Font.Italic = True Selection.Font.ColorIndex = 3 With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("B4").Select End Sub Hng dn chn vng tt: Bn c th dng ngoc vung [ ] chn vng thay v (). So snh vi v d nh sau: [A1:A3].Select l cch chn vng ging nh Range(A1:A3).Select
Chan thanh cam on Tac gia cua bai viet ! Cells(4,1) tr v A4 Cells() tr v ton b trong sheet V d 2: Worksheets(Sheet2).Cells(3,2).Value = 2000 tr v s 2000 trong B3 ti Sheet2, trong workbook hin hnh. Ghi ch: Thuc tnh Cells c ng dng nhiu khi vit cc vng lp gia cc .
Chan thanh cam on Tac gia cua bai viet ! Worksheets("Sheet1").Activate Set Vung = Application.Union(Range("Range1"), Range("Range2")) Vung.Formula = "=RAND()"
Hnh 40: To tn ca vng 9.4.2. Tn c to ra trong macro TOP Tn vng c th c n nh khi s dng macro lp, v d di y: Workbooks(Congty.xls).Names.Add Name:=Congty, _ RefersTo:==Danhsach!D1:D10 Range(Congty).Font.Italic = True Kt qu l cc trong vng D1:D10 s b nghing.
Chan thanh cam on Tac gia cua bai viet ! Trng hp ny hay c s dng tham chiu n nhiu vng trong macro, c th xo sch ni dung trong cc . Worksheets(Bang).Range(A1:C3,H4:L8,P14:Z3 4).ClearContents s xo sch ni dung nhng ch nh trong worksheet Bang. Cn i vi nhng tn vng bn t (nh trn), c th thc hin nh sau: Range(Danhsach1, Danhsach2, Danhsach3).ClearContents Ghi ch: Trong macro, cc vng c th c xc nh, t tn v c phi hp khi s dng phng thc Union. Xem mc 9.3.
Chan thanh cam on Tac gia cua bai viet ! Range("E9").Activate ActiveCell.Offset(-1, -2).Font.Italic = True End Sub Kt qu th hin hnh 41.
Hnh 41: S dng Offset tham chiu n cc Ghi ch: Khi gi tr no_rows_down hoc no_cols_to_right c gi tr m th s c hng ngc li.
Chan thanh cam on Tac gia cua bai viet ! R[m]C[n] s tham chiu n (truy cp n) c m dng pha di v n ct pha bn phi so vi hot ng (hin hnh). Gi tr m,n c th l s m, khi hng s ngc li, ln trn v sang bn tri. V d 1: Nhp vo cng thc Sum(B2:B4) trong B5. B5 c a ch hng 5 v ct B v c gi tr l tng cc ca 3 hng trc , gm dng th 2 n dng th t nhng cng ct. T xy dng macro nh sau: Range(B5).Select ActiveCell.FormulaR1C1 = =Sum(R[-3]C:R[-1]C) V d 2: Nhp vo cng thc = F2-F4 trong D5. Ni dung R1C1 trong FormulaR1C1 c th khng cn dng n v nu bn mun, 2 dng trn c th ghp thnh 1 nh sau: Range(B5).Formula = =R[-3]C[2]-R[-1]C[2] V d 3: Thay i cng thc thnh gi tr kt qu. G6 c cng thc l =G5*G4. V d G5 c gi tr l 2, G4 c gi tr l 3, nh vy gi tr nhn c ca G6 l 6. Ta s thay ni dung hm thnh gi tr l 6. Range(G6).Select ActiveCell.FormulaR1C1 = =R[-1]C:R[-2]C Selection.Copy Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Dng lnh cui cng l lnh hu b ch trng thi Cut/Copy (ng gch nhp nhy bao quanh chn).
10.1. Cu lnh IF
TOP y l kiu n gin nht, mu ca cu lnh IF nh sau: If <iu kin> Then <dng lnh 1> [Else <dng lnh 2>] Trong ch dn trn, cc thng s trong [ ] l tu chn, c th b qua nu thy khng cn thit. Nu <iu kin> c toi nguyn (ng - True) th <dng lnh 1> c thc hin, cn nu khng c toi nguyn (sai - False) th <dng lnh 2> c thc hin. Thng thng, bn hay s dng cu lnh If ... then ... Else m khng cn phi gii hn s dng lnh. Mu nh sau: If <iu kin1> Then <Khi lnh 1 thc hin> [ElseIf <iu kin2> <Khi lnh 2 thc hin>] [ElseIf <iu kin3> <Khi lnh 3 thc hin>] [Else <Khi lnh 4 thc hin>] End If Trong mu tng qut trn, t kho ElseIf v Else l tu chn (nh biu th trong du ngoc vung). u tin VB kim tra iu kin th nht, nu sai th s chuyn sang iu kin th 2,... cho n khi iu kin ng. VB thi hnh khi lnh tng ng v sau , thi hnh dng chng trnh ngay sau End If. V d: Macro di y tm kim gi tr ti A1 (l im trung bnh mn hc). Nu 10 > A1 8.0 : Hc lc gii; Nu 8 > A1 6.5 : Hc lc kh; Nu 6.5 > A1 5.0 : Hc lc trung bnh; Nu 5 > A1 0 : Hc lc km. Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! B2 th hin kt qu hc lc. Sub Hocluc() Sheets(Sheet1).Select Range(A1).Select If ActiveCell >= 8 Then Range(B2).Value = Hc lc gii ElseIf ActiveCell >= 6.5 Then Range(B2).Value = Hc lc kh ElseIf ActiveCell >= 5 Then Range(B2).Value = Hc lc trung bnh Else Range(B2).Value = Hc lc km End If End Sub Ghi ch: Bn c th b qua dng Range(A1).Select v thay bng If Range(A1).Value >= 8 Then. Ngoi ra, bn cng c th s dng If kt thc macro, cu lnh nh sau c th s dng kt thc macro. If ActiveCell = Then End Sub (nu hin hnh m trng th s kt thc Sub, khng cn phi c End If) V d: Gi s bn tm kim gi tr ca mt v bn mun kt qu nh sau Dng macro khi trng. Nhp gi tr Tt vo ngay bn phi nu c gi tr ln hn 40. Nhp gi tr Km vo ngay bn phi nu c gi tr nh hn 40. Sub user_If() If ActiveCell.Value = "" Then Exit Sub If ActiveCell.Value >= 40 Then ActiveCell.Offset(0, 1).Value = "Tt" Else Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! ActiveCell.Offset(0, 1).Value = "Xu" End If End Sub
Select Case <biu thc kim tra> [Case <biu thc 1> <khi lnh 1>] [Case <biu thc 2> <khi lnh 2>] [Case <biu thc 3> <khi lnh 3>] .... [Case Else <biu thc n> <khi lnh n>] End Select Mi danh sch biu thc c 1 hay nhiu gi tr. Cc gi tr cch nhau bng du phy (,). Cn gi tr bin i trong vng th bn s dng t kho To. Mi khi lnh c th cha 0 hay nhiu dng lnh. Nu biu thc no tho mn iu kin th khi lnh tng ng s thc hin. Case Else khng nht thit phi c, dng trong trng hp cn li ca cc Case trc. V d: B2 cha gi tr st ca t, C2 s th hin trng thi ca n. Sub Trangthai() Sheets(Sheet1).Select Doset = Cells(2,2).Value Select Case Doset Case 1, 1 to 10 Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! Cells(2,3).Value= Chy Case 0.75 to 1 Cells(2,3).Value= Do chy Case 0.5 to 0.75 Cells(2,3).Value= Do mm Case 0.25 to 0.5 Cells(2,3).Value= Do cng Case 0 to 0.25 Cells(2,3).Value= Na cng Case < 0 Cells(2,3).Value= Cng End Select End Sub
Chan thanh cam on Tac gia cua bai viet ! Cu lnh nh sau: If <iu kin 1> Or <iu kin 2> Then <khi lnh 1> Else <khi lnh 2> End If <khi lnh 1> thc hin khi mt trong hai iu kin 1 v 2 ng. C 2 iu kin sai th <khi lnh 2> s thc hin. 10.3.3. S dng nhiu And v Or Cu lnh nh di y: If <iu kin 1> And <iu kin 2> And <iu kin 3> Then <khi lnh 1> Else <khi lnh 2> End If <khi lnh 1> ch thc hin khi c ba iu kin u ng. Ch 1 trong 3 iu kin sai th <khi lnh 2> s thc hin. Tng t i vi Or. V d: Bn c th xc nh tn t da vo h s rng t nhin, ch s do, st. Sub Ten_dat() Dim Hsr, Chisodeo, Doset As Single Hsr = InputBox("Vao gia tri he so rong:") Chisodeo = InputBox("Vao gia tri chi so deo:") Doset = InputBox("Vao gia tri do set:") If Hsr > 1.5 And Chisodeo >= 17 And Doset > 1 Then MsgBox "Day la dat BUN SET!" ElseIf Hsr > 1.0 And Chisodeo >= 7 And Doset > 1 Then MsgBox "Day la dat BUN SET PHA!" ElseIf Hsr > 0.9 And Chisodeo >= 1 And Doset > 1 Then Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! MsgBox "Day la dat BUN CAT PHA!" Else MsgBox "Chua ro ten dat!!!!" End If End Sub
Ghi ch: Ti mi kiu thng ip, m thanh bo khi hin th thng ip i km theo s khc nhau. 11.1.4. Xy dng tham s cho MsgBox TOP s dng tu bin hp thng bo, bn phi bit phi hp cc thng s v nt lnh. Vic s dng hp MsgBox c ngha rt quan trng trong vic iu khin chng trnh. hiu chi tit, cc bn xem v d di y. Sub Nhangui() Dim Truonghop As Integer Truonghop = MsgBox("Ban co muon thoat khoi chuong trinh khong", vbYesNoCancel + vbQuestion + vbDefaultButton1,Chuong trinh tinh lun) If Truonghop = vbYes Then MsgBox "Ban vua chon nut Yes.", vbInformation ElseIf Truonghop = vbNo Then MsgBox "Ban vua chon nut No.", vbCritical ElseIf Truonghop = vbCancel Then MsgBox "Ban vua bam nut Cancel.", vbExclamation Bai viet duoc tong hop tu Internet
Chan thanh cam on Tac gia cua bai viet ! End If End Sub Hnh v di th hin kt qu chy Sub trn v hp thng bo khi bn chn nt No. Trong Sub trn, bn c th thay ElseIf Truonghop = vbNo Then bng ElseIf Truonghop = 7 Then
Chan thanh cam on Tac gia cua bai viet ! Nhm th hin hp thoi ngi s dng nhp d liu vo. Khi s dng phng thc ny, mt hp thoi s cho hin ra bn vo d liu, ch cho ngi dng nhp d liu vo hoc l bm vo nt OK hoc Cancel, gi tr nhn c c coi l chui (string). y l mt cch vo gi tr n l hoc a ch ca cc trong qu trnh chy macro. Bn khng th gn c lnh khi chn nt OK hay Cancel nh trong MsgBox. chnh l hn ch ca hm ny nn t c ng dng khi u vo nhiu s liu. Phng thc InputBox dng tng qut expression.InputBox (prompt [, title] [, default], [, left], [, top] [helpfile, context] [, type]) Expression: mt biu thc tr v i tng Application. Trong : prompt l ni dung li nhc ca hp vo d liu. title l tu chn ni dung ch trn u hp vo d liu. left l tu chn khong cch t gc bn tri hp thoi n gc bn tri mn hnh (mc nh l hp thoi nm gia mn hnh). n v tnh l l im (point), mt im bng 1/72 inch hay khong 1/28 cm. Chc nng ny t s dng. top l tu chn khong cch t nh hp thoi n nh mn hnh (mc nh l hp thoi nm gia mn hnh). n v tnh l l im. helpfile l tu chn v iu khin file tr gip no s dng. context l tu chn v l s th t tnh hung trong helpfile. Nu helpfile c th mc context cng phi c. type l tu chn bin s u vo. Trong trng hp b qua, gi tr u vo coi nh l chui.
V d: Sub VD_Input() Dim Dangmang Dim Cot, Hang As Integer Set Mang = Application.InputBox("Vao mang:", "Linh tinh", Type:=8) Cot = Dangmang.Columns.Count Tnh s ct chn Hng = Dangmang.Rows.Count Tnh s hng chn MsgBox "So cot la: " & Cot MsgBox "So hang la: " & Hang MsgBox "Dia chi o dau la: " & Dangmang.Cells(1, 1).Address MsgBox "Dia chi o cuoi la: " & Dangmang.Cells(Cot, Hang).Address Address l thng tin a ch End Sub Kt qu vo d liu l mng di y. Ngoi ra bn cn thu c mt s thng tin v mng nh s hng, s ct, a ch ,...
Chan thanh cam on Tac gia cua bai viet ! Do <khi lnh> Loop V d: Sub VD_Do() m = 4 m nhn gi tr ban u l 4 Do bt u vng lp m = m + 1 t gi tr m tng (+ 1) MsgBox m hp thng bo gi tr m If m > 10 Then Exit Do nu m > 10 th s thot khi Do Loop Tip tc lp End Sub
Sub VD_Do_LoopW() i=1 Do Cells(i,3) = i i=i+1 Msgbox i Loop While i <= 10 End Sub
Chan thanh cam on Tac gia cua bai viet ! Do Until <iu kin> <khi lnh> Loop V d: Sub VD_DoU_Loop() i=1 Do Until i = 10 Cells(i,5) = i i=i+1 MsgBox i Loop End Sub Tng t i vi Do ... Loop Until.
Chan thanh cam on Tac gia cua bai viet ! Next End Sub V d 2: Dng Step Sub VD_ForNext_Step() For i = 1 To 7 Step 2 Cells(12, i) = i MsgBox i Next End Sub Trong v d ny, gi tr i tng tng bc 1, 3, 5, 7.
Chan thanh cam on Tac gia cua bai viet ! Next j Next i End Sub Kt qu th hin hnh v di y:
Hnh 44: Sn phm to ra khi dng vng lp lng. 11.2. Phng thc InputBox (Inputbox Method) Nhm th hin hp thoi ngi s dng nhp d liu vo. Khi s dng phng thc ny, mt hp thoi s cho hin ra bn vo d liu, ch cho ngi dng nhp d liu vo hoc l bm vo nt OK hoc Cancel, gi tr nhn c c coi l chui (string). y l mt cch vo gi tr n l hoc a ch ca cc trong qu trnh chy macro. Bn khng th gn c lnh khi chn nt OK hay Cancel nh trong MsgBox. chnh l hn ch ca hm ny nn t c ng dng khi u vo nhiu s liu. Phng thc InputBox dng tng qut Expression: mt biu thc tr v i tng Application. Trong :
V d: Kt qu vo d liu l mng di y. Ngoi ra bn cn thu c mt s thng tin v mng nh s hng, s ct, a ch ,...
Hnh 43: V d v s dng InputBox Mc trn c 1 s nhm ln gia phng thc InputBox v hm InputBox trong phn i s. Cc bn ch phn bit nh. TOP HET