You are on page 1of 41

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

3. CHNG III Microsoft Excel v lp trnh trn Microsoft Excel


3.1. Microsoft Excel
Microsoft Excel l mt phn mm chuyn x l bng tnh ca hng phn mm ni ting Microsoft. Excel thc s l mt cng c rt mnh m phc v cng tc tnh ton, lp bng biu Giao din ca chng trnh Excel nh sau:

Vi cc bi ton t n gin n phc tp, ta u c th s dng Excel gii quyt mt cch d dng vi rt nhiu tnh nng sn c: Kh nng t chc d liu mnh m vi h thng cc , vng d liu, cc bng tnh; Kh nng x l d liu nh truy vn, lc, tnh ton vi h thng rt phong ph cc hm c bn cng nh cc hm chc nng chuyn bit; Kh nng lp bo co vi cch t chc bng biu v h thng biu tng i hon chnh; Kh nng in n vi nhiu la chn khc nhau. Vi cch t chc ging nh bng tnh thng thng, Excel l mt phn mm bng tnh trc quan v rt d s dng. Tuy nhin, nhng chc nng phong ph cng khng th no p ng c nhu cu ht sc a dng ca thc tin. V bng cch kt hp cc tnh nng sn c ca Excel, cng vi mt t kin thc v lp trnh, ta c th gii quyt c nhng bi ton mt cch d dng.
-1-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

lp trnh trn Excel, ta c th thc hin theo nhiu cch khc nhau: Thng qua b cng c lp trnh Visual Studio Tools for Office (VSTO): theo cch ny, ngi s dng c th lp trnh to ra cc ng dng dng add-in (ng dng b sung trong Excel) bng cc ngn ng c h tr trong b phn mm Microsoft Visual Studio. Thng qua mi trng lp trnh VBA c tch hp sn trong Microsfot Excel: ngi s dng c th lp trnh m rng Excel mt cch d dng vi ngn ng lp trnh VB.

3.2. Lp trnh trn Excel bng VBA


3.2.1. Cch to v s dng Macro
Macro l tp hp cc lnh v hm c lu tr trong mt mun ca VBA nhm thc hin mt nhim v no . Mi khi ngi dng thc thi Macro th nhim v c ci t trong Macro s c thc hin. iu ny ht sc hu ch khi cn thc hin nhng thao tc lp i, lp li nhiu ln hoc khi ngi dng mun to ra mt s tnh nng mi cho ng dng nn. 3.2.1.1. To Macro to Macro, ta c th thc hin theo hai cch chnh sau: To Macro kch bn, To Macro s dng VBA. To Macro kch bn l cch n gin nht to Macro. Theo cch ny, Excel lu li tt c cc lnh trong mi bc khi ngi dng thc hin mt nhim v no . Khi ngi dng thc thi Macro kch bn, tt c cc lnh thc hin s c thc hin li ng theo trnh t nh trong qu trnh to Macro kch bn. to Macro kch bn, ta lm theo cc bc sau: 1 2 Trong trnh n Tools, chn MacroRecord New Macro Trong mc Macro name, nhp tn ca Macro

CH Tn Macro phi c bt u bng ch ci thng thng, cc k t cn li c th l kiu ch hoc kiu ch s hoc du gch di. Khng c s dng du cch t tn Macro, mun phn cch t, ta c th dng du gch di thay cho du cch (xem hnh). Khng c t tn Macro trng vi tn ca vng c nh ngha trong Workbook hin hnh

-2-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

4 5 6 7

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 khng c php l s hay cc k t c bit nh @ hoc #. Phm tt ny s lm v hiu ho cc phm tt ging nh vy c t trc trong Excel mi khi m Workbook c cha Macro. Trong mc Store Macro In, chn ni s lu tr Macro. Nu mun Macro c hiu lc mi khi s dng Excel, ta chn vo mc Personal Macro Workbook. Nu cn m t thm v Macro ny, ta s nhp thm cc thng tin vo mc Description. Chn OK. Trong qu trnh to Macro kch bn, nu mun lu a ch tng i so vi hin , chn vo biu hnh, ta lm nh sau: trn thanh cng c Stop Recording 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 . Thc hin cc thao tc m sau ny s c lp li khi Macro kch bn thc thi (y l phn ni dung chnh ca Macro kch bn). Trn thanh cng c Stop Recording, nhn chut vo biu tng Stop Recording hon thnh vic to Macro kch bn. Lc ny Macro sn sng s dng.

8 9

3.2.1.2. S dng Macro s dng Macro c to trc, ta c th thc thi theo nhiu cch khc nhau: Thc thi Macro theo cch thng thng; Thc thi bng cch dng phm tt gn cho Macro; 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. 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 cch thng thng. thc thi Macro theo cch thng thng, ta thc hin theo cc bc sau: 1 2 M Workbook c cha Macro; Trn trnh n Tools chn MacroMacros hin th hp thoi Macro

-3-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

3 4

Trong mc Macro name, nhp vo tn Macro to t trc hoc chn t danh sch s xung; Nhn chut vo nt Run bt u thc thi Macro. n phm ESC kt thc qu trnh thc thi Macro.

CH Do Macro c cha m lnh thc thi c kh nng cha cc on m nguy him lm nh hng n h thng, nn mc nh Excel lun t ch an ninh mc cao nht, v do s lm v hiu ho Macro c cha trong Workbook ca Excel. V vy, thc thi Macro cha trong Workbook, ngi s dng phi thit lp li ch an ninh cho Excel mc Trung bnh (Medium) hoc Thp (Low). Ngi s dng nn t mc Trung bnh m bo tnh an ton cho h thng. thit lp ch an ninh cho Excel, trong trnh n Tools, chn MacroSecurity; trong th Security Level, chn mc an ninh ph hp v nhn OK.

3.2.2. To Macro vi VBA


Macro kch bn l hnh thc Macro n gin nht. Thc cht, Macro kch bn chnh l Macro c vit bng VBA, tuy nhin tt c cc dng m lnh u c t ng pht sinh tng ng vi tng thao tc m ngi dng thc hin khi tin hnh ghi li Macro. iu ny to nn tnh d s dng cho ngi dng, ch cn nm mt t kin thc v Macro, ngi s dng c th to dng ngay mt Macro p ng nhu cu ca bn thn. Tuy nhin, to ra Macro c kh nng tu bin v nhiu tnh nng nng cao hn, ngi dng cn phi c kin thc v lp trnh v tn dng mi trng pht trin ng dng tch hp sn trong Microsoft Excel, chnh l VBA IDE. Mi Macro tng ng l mt chng trnh con trong VBA. to mi mt Macro s dng VBA, cn thc hin nhng bc sau: 1 Trong trnh n Tools, chn mc MacroVisual Basic Editor khi ng VBA IDE;

-4-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Trong trnh n Insert, chn mc Module to mt m-un mi, l ni s cha Macro;

Trong trnh n Insert, chn mc Procedure hin th hp thoi Add Procedure;

Trong hp thoi Add Procedure, in tn chng trnh vo mc Name, chn kiu chng trnh con l Sub v phm vi l Public

-5-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

5 6 7

Vit m lnh cho Macro trong ca s m lnh ca VBA IDE bng ngn ng Visual Basic; thc thi Macro ngay t trong ca s m lnh, n phm F5; Sau khi hon thnh qu trnh vit m lnh cho Macro, chn mc Close and Return to Microsoft Excel trong trnh n File tr v mn hnh chnh ca Excel.

CH Do Macro l mt chng trnh con dng th tc, nn Macro c th c hin th v thc thi thng qua trnh n ToolsMacroMacros th khi to Macro bc 4, trong hp thoi Add Procedure, ngi dng phi chn kiu chng trnh con l Sub v phm vi l Public.

3.2.3. To hm mi trong Excel bng VBA


3.2.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:

-6-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

1 2 3

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 ). Tn hm. n phm SHIFT+F3 hin th danh sch tt c cc hm trong Excel. 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 ca hm. Tham s truyn vo c th l mt hng s, cng thc, hoc l mt hm bt k. 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.

C rt nhiu hm c xy dng sn trong Excel v c nhm theo tng lnh vc nh: ton hc, thng k, x l chui, x l d liu thi gian Tuy nhin trong nhiu trng hp, cc hm c sn ny khng p ng c cc yu cu ca bi ton c th, v th vic xy dng hm mi, nhm p ng c yu cu tnh ton l vic rt cn thit.

-7-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

3.2.3.2. To hm mi bng VBA Xy dng hm mi trong Excel l hon thon c th v c Excel h tr ti a nh cho php s dng ton b cc hm c t trc, cho php tn dng ton b giao din ca Excel. Cng c to hm mi trong Excel l VBA v ngi dng phi tun theo mt trnh t nht nh. lm r hn vn ny, ta s tm hiu thng qua v d n gin di y, l xy dng mt hm mi tn l Dien_Tich, c nhim v tnh din tch ca mt hnh ch nht. Phn tch nhim v trn, ta nhn thy: cn phi to c mt hm mi, sao cho khi s dng trong Excel khng c s khc bit so vi cc hm c sn, ngha l s nhp vo cng thc c dng =Dien_Tich(Tham_s, Tham_s), trong Tham_s l chiu di v chiu rng ca hnh ch nht, c th l mt s, cng thc khc hoc mt tham chiu n mt khc trong bng tnh. Kiu d liu ca Tham_s l kiu s thc, v gi tr tr v ca hm cng phi c kiu d liu l s thc nhm m bo tnh tng qut ca hm. to mt hm mi, ta thc hin theo cc bc sau: 1 2 3 Khi ng VBA IDE. Trong trnh n Tools, chn mc MacroVisual Basic Editor; Trong trnh n Insert, chn mc Module to mt m-un mi, ni s cha hm do ngi dng nh ngha. 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;

Chng trnh s t ng pht sinh on m lnh nh sau: Public Function Dien_Tich() End Function Thay on m lnh trn bng on m lnh sau: Public Function Dien_Tich(Rong As Double, Cao As Double) As Double Dien_Tich = Rong*Cao End Function
-8-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

5 6

Trong trnh n File, chn mc Close and Return to Microsoft Excel quay tr v mn hnh chnh ca Excel; 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.

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).

Tt c cc hm do ngi dng nh ngha thc hin theo cc bc nh trn ch c phm vi hiu lc trong ti liu (workbook) c cha hm m thi. Do vy, khi c nhu cu to lp cc hm mi s dng cho tt c cc ti liu trong Excel th ngi dng phi to hm trong mt tp ti liu c bit c tn l Personal.xls. Tt c cc hm hoc Macro khi c to v lu trong tp Personal.xls u c th c s dng li trong tt c cc phin lm vic tip sau ca Microsoft Excel. Cch thc to Macro v hm mi trong tp Personal.xls hon ton tng t nh cch thc to Macro v hm mi nh c trnh by. iu quan trng l mc nh tp Personal.xls lun c thuc tnh n, nn ngi dng s khng th nhn thy c tp ti liu ny. hin th c tp ti liu n ny, ngi dng c th thc hin theo nhiu cch khc nhau. Trong khun kh ca ti liu ny, xin c gii thiu phng thc sau: 1 2 Trong trnh n Tools ca Microsoft Excel, chn mc MacroRecord New Macro Trong hp thoi Record Macro, ta nhp tn Macro bt k, trong mc Store macro in bt buc phi chn l Personal Macro Workbook, sau chn OK. Nhn ngay chut vo nt Stop Recording kt thc.

-9-

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

n phm ALT+F11 khi ng VBA IDE. Trong ca s Project Explorer xut hin thm mt d n c tn l Personal.xls. Nhn p chut vo nhnh Module1, khi trong ca s m lnh s xut hin dng m lnh nh sau:

Sub Ten_Macro_bat_ky() ' ' Ten_Macro_bat_ky Macro 'Macro recorded 1/8/2007 by TTH ' End Sub

4 5 6

Xo ton b on m lnh trn. Sau tin hnh to Macro hoc hm mi trong Module1 ca tp Personal.xls. Trong trnh n File ca VBA IDE, chn mc Save PERSONAL.XLS lu nhng thay i vo tp Personal.xls. Vi nhng ln to hm sau, ngi dng ch cn khi ng VBA IDE s thy tp Personal.xls c hin th sn, khng cn phi thc hin li cc bc t bc 2 n bc 3.

CH : Mc nh, tp Personal.xls c lu trong th mc sau: C:\Documents and Settings\<Tn ngi dng>\Application Data\Microsoft\Excel\XLSTART

3.2.4. H thng cc i tng trong Excel


3.2.4.1. M hnh i tng ca Microsoft Excel to ci nhn tng quan cho ngi lp trnh, Microsoft cung cp cho ngi lp trnh m hnh i tng c s dng trong Microsoft Excel. M hnh i tng y c trnh by trong ti liu hng dn ca Excel. y xin c gii thiu li m hnh i tngvi mt s i tng thng c s dng trong lp trnh m rng Excel.

- 10 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Application

Workbooks

Workbook

Worksheets Rows Worksheet Columns Range Ch gii: Tp i tng i tng Cells 3.2.4.2. Gii thiu v cc i tng trong Excel i tng l mt thc th i din cho mt thnh phn no ca ng dng, chng hn nh i tng bng tnh (Worksheet), (Cell), Mi mt i tng c h thng cc phng thc v thuc tnh. truy cp vo cc thuc tnh v phng thc ca i tng, ta s dng c php <Tn_i_tng>.<Thuc_tnh/Phng_thc>. Trong VB, ta cn phi khai bo v gn i tng trc khi s dng cc phng thc ca i tng hay thay i thuc tnh ca i tng. Ly v d gn gi tr cho A1 ca bng tnh hin hnh, ta thc hin nh sau: ThisWorkbook.ActiveSheet.Range("A1").Value = 15 Tp i tng thc cht cng l mt i tng, nhng i tng ny c th cha nhiu loi i tng tng t nhau. Mc d vy, cc i tng trong tp i tng vn c th c x l bng cc k thut nh nhau. Tp i tng cng c cc phng thc v thuc tnh. V d nh tp i tng Workbooks cha tt c cc i tng Workbook ang c m trong Excel, ng thi cng c phng thc Add thm Workbook mi. truy cp vo mt i tng trong tp i tng, ta s dng cc ch s hoc tn ca i tng cn truy cp theo c php: <tp_i_tng>(ch_s/tn_i_tng).<thuc_tnh/phng_thc>. Ly v d khi ta mun ng ti liu u tin trong tp i tng ti liu (Workbook), ta thc hin nh sau: Sub CloseFirst() Workbooks(1).Close End Sub H thng i tng ca Microsoft Excel rt phong ph, nhng trong khun kh ca chng trnh, ch gii thiu mt s i tng thng dng, bao gm:

- 11 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

a. i tng ng dng (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. 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. on m lnh sau s khi ng chng trnh Excel t chng trnh ngoi v s m mt ti liu trong Excel Set xl = CreateObject("Excel.Sheet") xl.Application.Workbooks.Open "newbook.xls" Cn bn trong Excel (trong VBA dnh cho Excel), ta b qua bc khi ng Excel v thc hin m mt ti liu nh sau : Workbooks.Open "newbook.xls" Mt s thuc tnh trong i tng Application thng c s dng nh sau:
Thuc tnh ActiveCell ActiveSheet ActiveWindow ActiveWorkbook Workbooks M t tr v i tng kiu Range th hin hin hnh ca ti liu hin hnh. Tr v i tng th hin bng tnh hin hnh ca ti liu hin hnh. Nu khng c bng tnh hin hnh, thuc tnh ny s tr v gi tr Nothing. Tr v i tng kiu Window th hin ca s hin hnh. Nu khng c ca s no m s tr v gi tr Nothing. Tr v i tng kiu Workbook, th hin ti liu trong ca s hin hnh. S tr v gi tr Nothing nu khng c ca s no c m. Tr v tp i tng Workbooks th hin tt c cc ti liu ang m. Ta c th truy cp vo mt ti liu bt k thng qua ch s hoc tn ca ti liu.

CH : Vi cc phng thc v thuc tnh tr v cc kiu i tng ph bin, chng hn nh hin hnh (thuc tnh ActiveCell), ta c th truy cp m khng cn s dng i tng Application trc. Chng hn nh, thay v vit on m Application.ActiveCell.Font.Bold=True , ta c th vit ActiveCell.Font.Bold = True

b. i tng ti liu (Workbook) i tng ti liu (Workbook) th hin mt ti liu Excel. Mi mt ti liu ang c m trong Excel tng ng vi mt i tng Workbook. i tng Workbook l mt phn t ca tp i tng Workbooks. Tp i tng Workbooks cha tt c cc ti liu hin ang c m trong Excel. truy cp vo i tng Workbook, ta c th thc hin thng qua: Thuc tnh Workbooks y chnh l thuc tnh ca i tng Application nh c cp.

- 12 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

truy cp, ta s dng Workbooks(tn/ch_s), trong <tn/ch_s> l tn hoc ch s ca mt i tng Workbook. V d sau s kch hot ti liu u tin. Workbooks(1).Activate Ch s y chnh l th t to hoc m cc ti liu. Workbooks(1) l ti liu u tin, cn Workbooks(Workbooks.Count) l ti liu cui cng c to hoc m. Ch s ny tnh n tt c cc ti liu, ngay c ti liu c n i. Thuc tnh ActiveWorkbook y cng chnh l mt thuc tnh ca i tng Application. Thuc tnh ny th hin ti liu hin hnh trong Excel. V d sau s thay i tn tc gi ca ti liu hin hnh ActiveWorkbook.Author = "TDHTKC" Thuc tnh ThisWorkbook Thuc tnh ny tr v i tng kiu Workbook, ni m dng m lnh Visual Basic c thc thi. Trong hu ht cc trng hp, thuc tnh ny v thuc tnh ActiveWorkbook l nh nhau. to mi, m, hoc ng ti liu, ta phi s dng mt s phng thc ca tp i tng Workbooks: Workbooks.Add: thm mt ti liu mi vo Excel v a vo tp i tng Workbooks. Workbooks.Open ng_dn: m mt ti liu c <ng_dn> c ch nh v a vo tp i tng Workbooks. Workbooks.Close: ng tt c cc ti liu ang m trong Excel. Workbooks(ch_s/tn).Close: ng mt ti liu c <ch_s/tn> cho trc. Mt s thuc tnh v phng thc thng c s dng ca i tng Workbook:
Phng thc Activate Close Protect Unprotect([mt_khu]) Save SaveAs M t Kch hot ti liu lm ti liu hin hnh. ng ti liu. Bt ch bo v, v do khng th chnh sa ti liu. Tt ch bo v. Khi ti liu c t mt khu, ta phi thm vo tham s <mt_khu>. Lu tt c cc thay i trong ti liu. Lu tt c cc thay i trong ti liu sang mt tp mi.

Chi tit v tham s trong cc phng thc, xin xem thm ti liu hng dn ca Microsoft Excel.
- 13 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

V d sau s to mt ti liu mi v nhc ngi dng nhp tn tp, sau s lu li ti liu: Set NewBook = Workbooks.Add Do fName = Application.GetSaveAsFilename Loop Until fName <> False NewBook.SaveAs Filename:=fName
Thuc tnh ActiveSheet Name Saved Worksheets M t Tr v bng tnh hin hnh ca ti liu. Tr v tn ca ti liu. Kim tra xem ti liu c lu hay cha. Tr v gi tr TRUE nu ti liu c lu, ngc li l FALSE. Tr v tp i tng Worksheets, cha tt c cc bng tnh trong ti liu.

V d sau s hin th thng bo nu ti liu cha c lu: If Not ActiveWorkbook.Saved Then MsgBox "Ti liu vn cha c lu." End If c. Tp i tng Sheets Tp i tng Sheets cha tt c cc i tng biu (Chart) v bng tnh (Workbook) trong ti liu. Tp i tng Sheets rt hu dng khi ta mun truy cp n i tng m khng cn phi bit r i tng l biu hay bng tnh. V d sau s in tt c cc biu v bng tnh Sheets.PrintOut Ta s dng phng thc Add to mt trang mi. V d sau s thm hai trang biu vo ti liu hin hnh v t sau trang th 2 trong ti liu Sheets.Add type:=xlChart, count:=2, after:=Sheets(2) d. i tng bng tnh (Worksheet) Mt i tng bng tnh (Worksheet) th hin mt bng tnh trong ti liu Excel. Trong mt ti liu c th c nhiu bng tnh khc nhau, tt c cc bng tnh ny u l phn t ca tp i tng Worksheets, v n lt mnh, Worksheets cng l mt thuc tnh ca i tng Workbook. i tng Worksheet c truy cp thng qua i tng Workbook, ni cha i tng Worksheet, thng qua cc thuc tnh sau Thuc tnh Worksheets truy cp, ta s dng Worksheets(tn/ch_s), trong <tn/ch_s> l tn hoc ch s ca mt i tng Worksheet. V d sau s n bng tnh u tin trong ti liu hin hnh: Worksheets(1).Visible = False

- 14 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Ch s y chnh l th t ca bng tnh trn thanh cng c cha th bng tnh. Worksheets(1) l bng tnh u tin (bng tnh bn tri nht), cn Worksheets(Worksheets.Count) l bng tnh cui cng. Ch s ny tnh n tt c cc bng tnh, ngay c cc bng tnh c n i. Thuc tnh ActiveWorksheet Khi mt bng tnh ang hin hnh, ta c th s dng thuc tnh ny tham chiu n bng tnh .V d sau s s dng phng thc Activate kch hot Sheet1 t hng trang in v tin hnh in bng tnh: Worksheets("Sheet1").Activate ActiveSheet.PageSetup.Orientation = xlLandscape ActiveSheet.PrintOut thm mt i tng Worksheet, ta phi s dng cc phng thc Add c trong tp i tng Worksheets, <Worksheets.Add>. Bng tnh mi c thm vo s l bng tnh hin hnh. Di y l mt s phng thc v thuc tnh thng c s dng ca i tng Worksheet:
Phng thc M t Activate Calculate Copy Delete Move Paste PrintOut Protect Unprotect Thuc tnh Cells Columns Index Name PageSetup Kch hot bng tnh lm bn tnh hin hnh Thc hin qu trnh tnh ton cho ton b bng tnh hoc cho mt vng c ch nh trc. Sao chp bng tnh n mt v tr khc trong ti liu. Xo bng tnh. Di chuyn bng tnh n v tr mi trong ti liu. Dn ni dung trong b nh m vo bng tnh. In ni dung ca bng tnh. Bt ch bo v bng tnh, v do ta khng th chnh sa ni dung bng tnh c na. Tt ch bo v bng tnh. M t Tr v i tng kiu Range th hin tt c cc trong bng tnh. Tr v i tng kiu Range th hin tt c cc ct trong bng tnh. Tr v ch s ca i tng Worksheet trong tp i tng Worksheets. Tn ca bng tnh. Tr v i tng PageSetup, ni cha thit lp v trang in ca bng tnh.

- 15 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Range Rows Visible

Tr v i tng kiu Range th hin mt hoc mt vng no trong bn tnh. Tr v i tng kiu Range th hin tt c cc hng trong bn tnh. Thit lp hin th/n bng tnh.

e. i tng biu (Chart v ChartObject) i tng biu th hin mt biu trong ti liu. Biu c th nm trong mt trang ti liu ring (i tng Chart) hoc c th c nhng trong mt bn tnh (i tng ChartObject). truy cp vo i tng biu , ta s dng mt s thuc tnh v phng thc c tr v i tng kiu Chart sau: Thuc tnh ChartObjects V d sau thit lp mu t cho biu nhng trong bng tnh c tn Sheet1 Worksheets("Sheet1").ChartObjects(1).Chart. _ ChartArea.Interior.Pattern = xlLightDown Tp i tng Charts V d sau s thay i mu ca d liu trong trang biu u tin Charts(1).SeriesCollection(1).Interior.Color=RGB(255,0,0) Thuc tnh ActiveChart V d sau s kch hot mt trang biu , sau thit lp tiu ca biu thng qua thuc tnh ActiveChart Charts(1).Activate With ActiveChart .HasTitle = True .ChartTitle.Text = "January Sales" End With Thuc tnh ActiveSheet V d sau s kch hot mt trang biu , sau thit lp li kiu ca biu thng qua thuc tnh ActiveSheet Charts("chart1").Activate ActiveSheet.Type = xlLine f. i tng vng d liu (Range). Thuc tnh Columns, Rows, Cells Mi bng tnh c to thnh t tp hp cc (Cells). Cc chnh l ni ngi s dng thc hin cc cng vic tnh ton, x l v trnh by d liu ca mnh. Trong qu trnh lm vic ngi dng c th lm vic vi khng ch mt , m cn c th vi tp hp cc hay chnh xc hn l lm vic vi mt vng d liu (Range). Vng d liu c th c th hin theo nhiu cch khc nhau: Mt hoc nhiu tnh (Cells); Dng d liu (Rows); Ct d liu (Columns);
- 16 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Vng d liu (Range). tham chiu n mt vng d liu trong bng tnh, ta c th s dng cc thuc tnh Cells, Columns, Rows, Range, Offset v phng thc Union c trong bng tnh: Thuc tnh Cells: tham chiu n mt trong bng tnh. Cells(ch_s_hng, ch_s_ct) V d, mun gn gi tr 5 cho B5 (hng th 5, ct th 2) ca bng tnh Sheet1, ta s dng on m lnh sau: Sheets(Sheet1).Cells(5,2).Value = 5 Thuc tnh Rows: tham chiu n cc dng trong bng tnh Rows (ch_s_hng) V d sau s i mu dng th 3 thnh mu Dim MySheet As Worksheet Set MySheet = Worksheets("sheet1") MySheet.Rows(3).Interior.Color = RGB(255, 0, 0) Thuc tnh Columns: tham chiu n cc ct trong bng tnh Columns (ch_s_ct) V d sau s i kiu phng ch ct 2 thnh kiu in m Dim MySheet As Worksheet Set MySheet = Worksheets("sheet1") MySheet.Columns(2).Font.Bold = True Thuc tnh Range: tham chiu n mt vng d liu trong bng tnh Thuc tnh ny c tnh tng qut hn so vi 3 kiu thuc tnh c cp trn. C nhiu cch khc nhau tham chiu n mt vng d liu trong bng tnh. - Nu vng d liu l mt tnh Range(Tn__d_liu) V d, mun gn gi tr 5 cho B5, ta s dng on m lnh sau Sheets(Sheet1).Range(B5).Value = 5 - Nu vng d liu nm gii hn trong hnh ch nht gia hai Range(tn__1, tn__2) hoc Range(tn__1 : tn__2) V d, khi cn tham chiu n vng A2:C5 ta c th s dng on m lnh sau Sheets(Sheet1).Range(A2, C5) hoc Sheets(Sheet1).Range(A2:C5)
- 17 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

- Nu vng d liu l mt vng c t tn Range(tn_vng_d_liu) V d nh trong bng tnh Tai_trong, c mt vng d liu do ngi dng t tn l luc_dong_dat, th c th tham chiu ti vng d liu theo c php sau Worksheets("Tai_trong").Range("luc_dong_dat") Thuc tnh Offset: tham chiu n mt vng d liu vi mt khong dch cho trc so vi vng d liu hin ti Offset(s_hng, s_ct) V d sau thc cht s lm thay i mu nn ca vng d liu C4:D4 Worksheets("Sheet1").Activate Range("A1:B2").Offset(3, 2).Interior.Color = _ RGB(200, 0, 0) Phng thc Union: dng ni cc vng d liu khc nhau, s dng khi ta mun tham chiu n nhiu vng d liu khc nhau mt lc Union(vng_d_liu_1,vng_d_liu_2,) V d sau s chn hai vng d liu A1:B2 v D4:D5 Dim r1 As Range, r2 As Range Dim myMultiAreaRange As Range Worksheets("sheet1").Activate Set r1 = Range("A1:B2") Set r2 = Range("D4:E5") Set myMultiAreaRange = Union(r1, r2) myMultiAreaRange.Select Qu trnh tnh ton, x l d liu ch yu c thc hin trn cc vng d liu. Di y l danh sch cc phng thc v thuc tnh thng dng c trong i tng kiu Range.
Phng thc Activate Clear Delete [Shift] Merge [Across] M t Kch hot mt n, ny phi nm trong mt vng la chn. la chn mt vng d liu, ta s dng phng thc Select. Xo ni dung trong vng d liu. Xo vng d liu khi bng tnh. Sau khi xo, gi tr Shift s quy nh cch thc cc khc s lp y vo cc trong vng d liu b xo Ni cc trong vng d liu. Nu bin Across l True th chng trnh ch ni cc trn cng mt hng. Nu l False th tt c cc trong vng d liu s c ni thnh mt duy nht. Mc nh, Across c gi tr False. Phng thc ny dng la chn mt vng d liu.

Select

- 18 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Sort

Phng thc ny dng sp xp d liu trong vng d liu. C rt nhiu tham s p dng cho phng thc ny, c th tham kho thm trong cc ti liu tr gip ca Excel. Hu b ni . M t Tr v hoc thit lp cng thc Range("A1").Formula = "=$A$4+$A$10" cho vng d liu. V d:

Unmerge Thuc tnh Formula FormulaArray

Tr v hoc thit lp cng thc kiu mng cho vng d liu. Nu vng d liu khng cha cng thc kiu mng, thuc tnh ny s tr v gi tr Null. V d: Range("E1:E3").FormulaArray = "=Sum(R1C1:R3C3)" Tr v gi tr True nu vng d liu l mt phn trong cng thc kiu mng. Tr v hoc thit lp tn cho vng d liu. Tr v hoc thit lp gi tr cho vng d liu.

HasArray Name Value

CH Trong Excel, ph bin c hai kiu tham chiu n a ch ca vng d liu: kiu A1 v kiu R1C1. Kiu tham chiu A1 l kiu tham chiu mc nh trong Excel. Theo cch ny, cc ct c k hiu t A n IV (gm 256 ct) v cc hng c k hiu bng s t 1 n 65536. Nu mun tham chiu n ct th 2, hng th 2, ta s dng a ch l B2. Vi kiu tham chiu R1C1, tt c ct v hng u c nh s. Theo cch ny, v tr ca mt c xc nh bng cch s dng: R-s th t hng-C-s th t ct. V d, tham chiu n ct th 2, hng th 2, ta s dng a ch l R2C2. i vi kiu tham chiu R1C1, a ch u l a ch tuyt i, nu mun s dng a ch tng i, ta s s dng cp du ngoc vung []. V d, tham chiu n mt nm cch hin ti l 2 ct v pha tri v 2 hng v pha di, ta s s dng a ch l R[2]C[-2]. Cn nu mun tham chiu n mt nm cng ct hin ti v cch hin ti 2 hng v pha trn, ta s s dng a ch l R[-2]C. Cn phi lu l vi kiu tham chiu A1, a ch ct trc a ch hng; cn i vi kiu tham chiu R1C1, a ch ct pha sau a ch hng.

3.3. Bi tp p dng
To hm tra bng mt chiu, p dng tra bng tra m un n hi yu cu:
S trc xe tnh ton (xe/ng/ln) Eyc (Mpa) 50 133 100 147 200 160 500 178 1000 192 2000 207 5000 224 7000 235

Phn tch Lp s khi i vi bi ton ny, yu cu phi to c mt hm mi phc v cho vic tra bng. Theo cch suy ngh l-gic, tra bng mt chiu, ta cn phi c: Bng cc gi tr, hay ni khc, l bng tra, y l Bng tra m un n hi yu cu; S tra, y l s trc xe tnh ton.
- 19 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

tra bng nhanh chng th d liu v s trc xe tnh ton phi c sp xp theo th t tng dn hoc gim dn. thc hin qu trnh tra bng, ta phi ln lt tm hai ct d liu lin k sao cho s cn tra nm trong khong gi tr hng s trc xe tnh ton ca hai ct lin k , ta gi l s X1 v X2. Tng ng vi hai gi tr X1 v X2, ta s c c gi tr hng Eyc tng ng l Y1 v Y2. Nh vy, gi tr cn tra, TraBang, s c xc nh da theo cng thc: TraBang = Y 1 +

(Y 2 Y 1) ( so _ tra X 1) ( X 2 X 1)

Vi cc trng hp c bit khc, cch thc x l nh sau: Nu s_tra=X1 hoc S_tra=X2 th gi tr tra bng s l Y1 hoc Y2 tng ng; Cn nu S_tra khng nm trong bng tra, ta s c nhiu cch x l khc nhau, nhng y, ta thng nht la chn l thng bo cho ngi s dng bit l s cn tra khng nm trong bng tra. chuyn i cch suy ngh theo l-gic nh trn thnh chng trnh, ta cn phi to mt hm c tn l TraBang vi cc tham s nh sau: Function TraBang(so_tra as Double,Vung_tra as Range) as Double Trong So_tra l s s dng tra bng, kiu Double; cn Vung_tra l mt vng d liu cha cc gi tr trong bng tra, kiu Range. V s khi ca hm tra bng c th c biu din nh sau:

- 20 -

T NG HO THIT K CU NG Bt u Khai bo bin C_th_tra=False I=1

Lp trnh trn ng dng nn

C_th_tra= True ng

Sai

Thng bo: khng tra c Tra_bng=Null

X1=S_tra Sai I<=(S_ct_vn g_tra)- 1 ng I=I+1 X2=S_tra Sai Sai Sai

ng

Tra_bng=Y1

S_tra [Vng_Tra(1,i), Vng_tra(1,i+1)] ng X1=Vng_tra(1,i) X2= Vng_tra(1,i+1) Y1=Vng_tra(2,i) Y2= Vng_tra(2,i+1) C_th_tra=True

ng Tra_bng=Y2

Tra_bng=Y1+(Y2-Y1)/(X2X1)*(S_tra-X1)

Kt thc

Ci t thut ton Vi thut ton nh trn, ta c th tin hnh ci t cho hm TraBang theo cc bc sau: Ln lt thc hin cc bc nh nu trong phn 3.2.3.2 To hm mi bng VBA, vi tn hm cn to l TraBang. Nhp on m lnh ca hm TraBang nh sau:
Public Function TraBang(so_tra As Double, Vung_Tra As Range) As Double Dim X1, X2, Y1, Y2 As Double Dim i As Integer Dim Co_the_tra As Boolean Co_the_tra = False Vng lp duyt qua hng u tin ca vng d liu For i = 1 To Vung_Tra.Columns.Count - 1 If ((Vung_Tra(1, i).Value<=so_tra) And _ (Vung_Tra(1, i + 1) ).Value >=so_tra)) _

- 21 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Or _ ((Vung_Tra(1, i) ).Value >=so_tra) And _ (Vung_Tra(1, i + 1) ).Value <=so_tra)) _ Then Khi tho mn iu kin th ln lt ly cc gi tr X1,X2,Y1,Y2 v thot khi vng lp X1 = Vung_Tra(1, i).Value X2 = Vung_Tra(1, i + 1).Value Y1 = Vung_Tra(2, i).Value Y2 = Vung_Tra(2, i + 1).Value Co_the_tra = True Exit For End If Next i

If Co_the_tra Then Kim tra iu kin X1=S_Tra If so_tra = X1 Then TraBang = Y1 Exit Function End If Kim tra iu kin X2=S_Tra If so_tra = X2 Then TraBang = Y2 Exit Function End If Nu khng tho cc iu kin trn th tnh gi tr tra bng theo cng thc sau: TraBang = (Y2 - Y1) / (X2 - X1) * (so_tra - X1) + Y1 Else Khi khng nm trong bng tra th thng bo MsgBox ("Gia tri can tra khong nam trong bang tra") TraBang = Null End If End Function

S dng hm mi

- 22 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Sau khi to m ngun cho hm mi, ta s dng hm mi bng cch to mt bng tra nh hnh v di, sau nhp cng thc =trabang(B9,B6:I7). Kt qu cho ra l 153.5, ng nh cch tnh ton thng thng. Ln lt thay i S trc xe tnh ton bng 100, 20, 7100 th nghim kh nng x l ca hm TraBang.

- 23 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

4. CHNG IV AutoCAD v lp trnh trn AutoCAD


4.1. AutoCAD
AutoCAD l mt chng trnh ng dng thuc h CAD (Computer Aided Design) chuyn dng trong cng tc thit k - to bn v. AutoCAD l sn phm rt ph bin do tnh d dng v kh nng p dng cho nhiu lnh vc khc nhau. AutoCAD c t chc thnh mt chng trnh hot ng c lp trn nn Windows, s liu bn v thit k c AutoCAD t chc di hai dng l n (nonvisual) v trc quan (visual). Cc thao tc lin quan n cc thnh phn trong bn v u c thc hin trc tip ngay trn mn hnh thng qua s phi hp gia cc cu lnh v thao tc vi bn phm hoc chut. Giao din ca chng trnh AutoCAD nh sau:

Mi bn v trong AutoCAD c t chc thnh 2 thnh phn chnh: ModelSpace - Khng gian m hnh: l ni to cc i tng hnh hc ca bn v. PaperSpace Khng gian in: ti y cc i tng hnh hc c th hin dng kt qu sau khi in. Mi i tng u c th c b tr vi t l, v tr, gc
- 24 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

quan st mt cch c lp vi nhng i tng khc theo tng ca ngi thit k. Kt qu hin th trn khng gian in s ging nh khi in trn giy. S lng PaperSpace l khng hn ch. Vi AutoCAD, ngi dng c th to ra cc bn v, t hnh v ca nhng tng ban u n nhng bn v chi tit vi chnh xc cao. H thng cc trnh n, thanh cng c, ca s dng lnh v c bit l kh nng tng tc vi tng chi tit ca bn v mt cch trc quan gip cho ngi thit k c th th hin tng ca mnh mt cch thoi mi, d dng v nhanh chng. V hn th na, kh nng in n mnh m vi rt nhiu la chn khc nhau gip th hin tng thnh bn v v c th in ra giy mt cch d dng. Ton b cc chi tit trong bn v u c AutoCAD qun l di dng i tng, ngha l mi chi tit u c nhng thuc tnh ring v c qun l bng c s d liu bn trong AutoCAD. iu ny rt thch hp trong mi trng thit k i hi phi cp nht, thay i nhiu, bi l ch cn thay i thuc tnh ca cc i tng l ta c th c ngay c mt bn v mi. Bn cnh , do cch t chc nh trn nn ta c th d dng can thip vo cc i tng bn v bin i chng cho ph hp vi mc ch ring. Cc i tng trong AutoCAD c chia lm hai loi, loi th nht l cc i tng n, c dng thit lp cc thuc tnh cho cc loi i tng khc, v d nh: DimStyle, FontStyle, Layer.... Loi i tng th hai l cc i tng c th nhn thy c, n chnh l cc thnh phn hin th ca bn v, v d nh: Line, Pline, Arc, Text, Dim... AutoCAD l mt chng trnh c s dng rt rng ri bi khng nhng n p ng c yu cu ca i a s ngi dng m cn p ng c nhng yu cu chuyn bit nh kh nng cho php ngi dng c th lp trnh trn n thc hin nhng yu cu chuyn bit ny ca mnh mt cch d dng. Vic m rng AutoCAD c th c thc hin theo nhng cch sau: Lnh gp (Script): tnh nng ny cho php thc hin cc lnh ca AutoCAD t mt tp vn bn (c phn m rng l *.SCR). AutoLISP v Visual LISP: AutoLISP da trn ngn ng lp trnh LISP, mt ngn ng d s dng v cng kh mnh. Vi mi trng pht trin tch hp Visual LISP c sn trong AutoCAD, ngi dng c th d dng to ra cc ng dng m rng AutoCAD. Tt c cc m lnh vit bng AutoLISP s c lu trong tp c phn m rng l *.LSP. ObjectARX (AutoCAD Runtime Extension): ObjectARX cha cc th vin lin kt ng, qua ngi dng c th tc ng trc tip ln nhn ca chng trnh AutoCAD. Chnh v vy, chng trnh vit vi ObjectARX c kh nng rt mnh, v thng c s dng vit cc ng dng ln, chng hn nh SoftDesk hay NovaTDN. Cc chng trnh s dng ObjectARX c vit bng ngn ng VC++ v c bin dch thnh tp c phn m rng l *.ARX. ActiveX Automation: cng ngh ny cho php chia s d liu ca bn v vi cc chng trnh khc. V do , ta c th pht trin ng dng bng cc ngn ng lp trnh khc nhau nh Visual Basic, Delphi hay C#, tn dng tt c cc tnh nng sn c ca AutoCAD thng qua m hnh i tng ca AutoCAD. AutoCAD VBA: l mi trng lp trnh c tch hp sn trong AutoCAD. Cc chng trnh VBA vit bng ngn ng Visual Basic, hot ng da trn giao din ActiveX Automation. S kt hp gia AutoCAD, ActiveX Automation v VBA to nn nhiu li th cho cc ng dng m rng vit bng VBA.

- 25 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Trong ti liu ny, ch trnh by v cch lp trnh trn AutoCAD bng VBA v mt s ni dung c bn nht v AutoLISP s dng kt hp vi cc chng trnh VBA to nn cc lnh mi trong AutoCAD.

4.2. Lp trnh trn AutoCAD bng VBA


Vic lp trnh bng VBA trn AutoCAD cng ging nh trn Microsoft Excel, cc m lnh u c thc hin thng qua VBA IDE. Do u xut pht t mt nh cung cp l Microsoft nn VBA IDE trong hai ng dng nn trn l ging nhau. im khc nhau c bn cn phi lu trong khi lp trnh chnh l s khc bit v m hnh i tng ca hai ng dng nn. Chnh v vy, trong phn ny, sau khi gii thiu v mt s thao tc c bn, ni dung ch yu s l gii thiu v m hnh i tng ca AutoCAD v mt s thao tc c bn trn cc i tng ca AutoCAD.

4.2.1. Qun l d n VBA


Khc vi trong Excel, trong AutoCAD, cc d n VBA c phn bit r rng thnh: D n nhng (Embedded Project): l d n VBA c nh km cng vi tp bn v v s c t ng ti vo VBA IDE mi khi m bn v c cha d n nhng. D n nhng c mt s gii hn khi lm vic, khng th ng hoc m cc bn v AutoCAD bi l mc ch ca d n nhng chnh l lm vic bn trong bn v c cha n. im thun li chnh ca d n nhng l ngi s dng khng cn phi nh ni lu tr d n, khng cn phi thc hin ti d n mi khi s dng cc chc nng c trong d n, tt c cc thao tc u c thc hin t ng khi m bn v c cha d n nhng. D n c lp (Global Project): l d n c lu tch bit trong mt tp c phn m rng l *.DVB. D n c lp c kh nng lm vic linh hot hn, c kh nng ng hoc m bn v bt k. Tuy nhin, ngi s dng cn phi nh ni lu tr v cc chc nng c trong tng d n khi cn s dng mt chc nng no th s ti d n vo VBA IDE s dng. Mc d vy, vi d n c lp, vic phn phi v chia s m lnh c thc hin d dng hn so vi loi d n nhng. D n c lp cng rt thch hp lu tr, tp hp thnh b th vin s dng trong tt c cc bn v. Vi AutoCAD, qu trnh qun l d n VBA c thc hin rt d dng thng qua ca s Qun l d n VBA VBA Manager. hin ca s VBA Manager, ta chn trnh n ToolMacroVBA Manager (hoc gi lnh VBAMAN t dng lnh ca AutoCAD)

Giao din ca ca s VBA Manager nh hnh di:


- 26 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

ngha ca tng thnh phn trong ca s VBA Manager: Cha danh sch cc bn v hin c trong AutoCAD (s dng khi ta mun nhng mt d n no vo trong mt bn v). 2 Cha danh sch cc d n VBA hin ang c ti trong VBA IDE. 3 To mt d n mi. 4 Lu d n VBA vi tn khc (ch c hiu lc vi cc d n c lp). 5 Ti mt d n c lp vo trong VBA IDE. 6 G b mt d n c lp khi VBA IDE. 7 Nhng mt d n VBA vo mt bn v nh trc. Bn v c nh trc chnh l bn v c la chng trong danh sch 1. 8 Tch d n nhng ra khi bn v (ch c hiu lc khi bn v c cha d n nhng). 9 Hin th ca s qun l Macro trong AutoCAD. 10 Hin th VBA IDE, l ni s thc hin qu trnh thit k m lnh v giao din ca chng trnh.
CH Macro v bn cht l chng trnh con dng th tc. Trong AutoCAD, ta thng ch thao tc vi cc chng trnh con dng th tc, cn chng trnh con dng hm ch s dng bn trong cc d n VBA.

4.2.2. To Macro vi VBA


Mi Macro u phi nm trong mt d n nht nh. V vy, trc khi to mi mt Macro, ta cn phi xc nh c ni s cha Macro. Nu cha c mt d n no hoc khi cn lu Macro trong mt d n khc, ta cn phi to mi Macro. Sau , vic to Macro s c thc hin mt cch d dng nh cch to mt chng trnh con trong VBA. 4.2.2.1. To mi v lu d n VBA to mi d n VBA:

- 27 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

1 2

M ca s VBA Manager. Chn nt lnh New.

Mc nh, d n mi c to s l mt d n c lp, c tn d n l ACADProject. Sau khi to mi d n, ta c th nhng d n vo mt bn v no hoc c th lu ra mt tp ring thnh d n c lp tu thuc vo nhu cu s dng. nhng d n vo mt bn v: 1 2 3 4 M ca s VBA Manager. Trong mc Drawing, chn bn v cn nhng d n vo. Trong mc Projects, chn d n cn nhng vo bn v. Chn nt lnh Embed.

lu d n VBA thnh d n c lp: 1 2 3 4 M ca s VBA Manager. Chn d n cn lu, chn Save As. Hp thoi Save As s xut hin. in tn tp v v tr lu d n. Chn Save.

4.2.2.2. To mi v hiu chnh Macro to mi Macro, ta c th trc tip vo trong VBA IDE v chn chng trnh con (dng th tc) vo d n mong mun, hoc ta c th thc hin thng qua ca s Macros. to Macro thng qua ca s Macros: 1 M ca s Macros bng cch chn t trnh n ToolsMacroMacros (hoc s dng lnh VBARUN t dng lnh AutoCAD)

- 28 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

2 3 4 5

Trong mc Macros in, chn ni s cha Macro t danh sch th xung. Trong mc Macro name, nhp tn Macro cn to. Chn Create to Macro mi. Mn hnh ca VBA IDE s c t ng hin ln, v con tr chut c t ngay v tr ci t m lnh cho Macro mi. Lc ny ta c th bt u vit m lnh cho Macro mi. Trong mn hnh ca VBA IDE chn trnh n FileClose and Return to AutoCAD tr v mn hnh ca AutoCAD.

CH Cng ging nh VBA trong Excel, chuyn i qua li gia mn hnh AutoCAD v mn hnh VBA IDE, ta s dng phm tt l ALT+F11.

son tho/hiu chnh Macro 1 2 3 M ca s Macros. Chn Macro cn hiu chnh trong danh sch cc Macro. Chn Edit bt u hiu chnh.

4.2.3. S dng Macro


s dng Macro, hay ni cch khc l thc thi cc Macro, ta cn phi ti cc d n c cha Macro vo VBA IDE. Nu Macro nm trong cc d n m, ta c th b qua bc ti d n VBA. ti cc d n VBA i vi cc d n nhng, ta ch cn m bn v c cha d n nhng l thc hin qu trnh ti d n. i vi cc d n c lp, ta cn phi ti cc d n bng cch: m ca s VBA Manager Chn Load Chn d n cn ti trong hp thoi Open VBA Project Chn Open. Vic thc thi Macro cng c th c thc hin theo nhiu cch khc nhau: trc tip t VBA IDE, thng qua ca s Macros, thng qua dng lnh, hay qua h thng trnh n. Di y l hai cch n gin nht thc thi Macro. thc thi Macro Trong VBA IDE, t con tr vo dng m lnh ca Macro trong ca s m lnh Nhn phm F5 thc thi Macro. M ca s Macros Chn Macro cn thc thi trong danh sch Chn Run.

4.2.4. To lnh mi s dng VBA kt hp vi AutoLISP


C th ni, mt trong nhng im mnh ca AutoCAD chnh l ca s dng lnh. Thng qua ca s dng lnh ny, mi thao tc i vi bn v u c th c thc hin mt cch nhanh chng vi bn phm thng qua h thng cc lnh c nh ngha sn. thc thi Macro, r rng phi thc hin qua kh nhiu bc. to s thun tin, cn thit phi nh ngha lnh mi, qua ta c th thc thi Macro ch vi mt dng lnh n gin, ging nh khi cn v ng thng, ta ch cn s dng lnh line dng lnh AutoCAD. S kt hp vi AutoLISP l mt cch lm tt v d dng thc hin mc tiu ny.

- 29 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Tuy nhin, nu ch c lu trong nhng tp d n VBA v tp AutoLISP thng thng th nhng lnh ch c hiu lc khi ngi dng ti ng thi d n VBA v tp AutoLISP trong AutoCAD. V vy, khi mun cc lnh m ngi dng t lp c hiu lc ngay khi s dng AutoCAD (ngha l ngi dng khng cn phi lm thm bt c mt thao tc no khc, ch cn khi ng AutoCAD l c th dng c ngay cc lnh ny) ta s phi lu d n VBA thnh tp c tn l ACAD.DVB v tp AutoLISP s c lu vi tn l ACAD.LSP, v c hai tp ny phi c lu vo th mc ci t ca AutoCAD (v d i vi AutoCAD 2002, nu ci t thng thng, th mc ci t ca AutoCAD trong Windows s l: C:\Program Files\AutoCAD 2002). Di y l mt v d n gin thc hin mc tiu ny: chng trnh (Macro) HelloWorld. M t ni dung chng trnh (Macro): Macro ny s hin th hp thoi yu cu ngi s dng nhp vo mt thng ip, sau thng ip ny s c v trn khng gian m hnh ca AutoCAD. thc thi Macro ny, ta ch cn g lnh Hello trong dng lnh AutoCAD. V y s l lnh thng tr trong AutoCAD. Qu trnh thc hin p ng nhu cu trn nh sau: a. To d n mi 1 2 3 4 5 6 7 8 9 Khi ng AutoCAD. M ca s VBA Manager (lnh VBAMAN). Chn New. Chn D n VBA va c to trong danh sch cc d n, sau chn Save As Trong hp thoi Save As, chn th mc ci t ca AutoCAD trong mc Save in; cn trong mc File name nhp vo ACAD.DVB. Chn Save lu d n v quay v ca s VBA Manager. Trong ca s VBA Manager, chn Macros hin th hp thoi Macros. Chn d n ACAD.DVB trong mc Macros in Trong mc Macro name, nhp vo tn Macro l HelloWorld

b. To v thc thi Macro HelloWorld

10 Chn Create. Mn hnh VBA IDE s c hin th, trong ca s m lnh, con tr s c t v tr ca Macro va c to. Ta s thy c on m lnh c to sn nh sau: Sub HelloWorld() End Sub 11 Thay on m lnh trn bng on m lnh sau: Sub HelloWorld() Dim strMsg As String strMsg = InputBox("Nhap thong diep chao mung", _ "HelloWorld") Dim objText As AcadText Dim pInsert(0 To 2) As Double pInsert(0) = 50: pInsert(1) = 100: pInsert(2) = 0 Set objText = ThisDrawing.ModelSpace.AddText _ (strMsg, pInsert, 2.5)

- 30 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

ZoomExtents End Sub 12 t con tr vo gia hai dng Sub HelloWorld() v End Sub, sau nhn phm F5 thc thi Macro. Mt hp thoi nh s hin ln yu cu ngi dng nhp vo mt thng ip Nhp vo thng ip v nhn OK Thng ip m bn va nhp s c v trn khng gian m hnh ca AutoCAD.

13 Trong mn hnh ca VBA IDE, chn trnh n File Save. Tip tc chn trnh n File Close and Return to AutoCAD tr v AutoCAD. c. To lnh mi trong AutoCAD thc thi Macro Sau khi to xong Macro, ta s tin hnh khai bo mt lnh mi trong AutoCAD thng qua AutoLISP v lnh s thc thi Macro HelloWorld va c to. 14 Khi ng chng trnh son tho vn bn, v d nh chng trnh Notepad c sn trong Windows. Trong Windows, chn trnh n Start Run. Trong hp thoi Run, nhp notepad sau nhn OK khi ng trnh son tho vn bn Notepad. 15 Trong chng trnh Notepad, nhp vo on khai bo sau: (defun C:Hello() (command "-vbarun" "HelloWorld") ) Trong Hello l lnh c khai bo ng k s dng trong AutoCAD. Cn HelloWorld l tn Macro to trong VBA. 16 Chn trnh n File Save. Trong hp thoi Save As, chn thc mc ci t ca AutoCAD trong mc Save in. Trong mc File name nhp vo ACAD.LSP. Chn Save. 17 Thot khi chng trnh AutoCAD (nu ang thao tc trn AutoCAD). Khi ng chng trnh AutoCAD. Trong dng lnh ca AutoCAD, g lnh Hello. Tht bt ng, Macro HelloWorld c thc thi. Nh vy, bng cch s dng VBA kt hp vi AutoLISP, ta c th to thm rt nhiu lnh mi trong AutoCAD mt cch d dng. c th hiu thm v AutoLISP, xin c thm ti liu hng dn c sn trong AutoCAD.

4.2.5. M hnh i tng ca AutoCAD


M hnh i tng th hin cu trc giao din AutoCAD ActiveX. M hnh ny c th hin di dng cu trc phn nhnh, trong , mi i tng l mt thnh phn trong AutoCAD. Nh c m hnh i tng ny m ngi s dng c th hnh dung mt cch d dng cu trc ca AutoCAD c th truy cp dn n i tng m mnh quan tm. c th lp trnh tt trn AutoCAD, ngi s dng trc ht phi quen thuc v thao tc thnh tho trn cc i tng ca AutoCAD v ng thi phi nm r m hnh i tng ca AutoCAD. Trong AutoCAD, c rt nhiu loi i tng khc nhau, chng hn nh: i tng ho, nh: line, arc, text,;
- 31 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Cu hnh v kiu (style settings) nh: linetype, dimension style,; Cu trc t chc nh: layer, group, block,; Hin th bn v nh: view, viewport; V ngay c bn thn bn v trong chng trnh AutoCAD cng c xem l mt i tng. 4.2.5.1. M hnh i tng M hnh i tng ca AutoCAD trong VBA c th hin di dng cu trc cy phn cp, trong i tng gc l Application, l phin lm vic hin hnh ca AutoCAD. Nh c m hnh i tng m ngi lp trnh c th bit c mt i tng c th cho php truy cp n nhng i tng no cp tip theo. Di y l m hnh i tng rt gn trong AutoCAD VBA. M hnh i tng y c th tham kho trong ti liu ActiveX and VBA Developer's Guide i km AutoCAD.
Application Preferences Documents Document ModalSpace PaperSpace PViewPort DimStyles Layers Layouts Linetypes TextStyles SelectionSets Plot Utility MenuGroups DimStyle Layer Layout Linetype TextStyle SelectionSet Point Polyline Ray Text Arc Circle Hatch Line MText

Ch gii: Tp i tng i tng

a. i tng Application i tng Application l i tng gc ca m hnh i tng trong AutoCAD VBA. T i tng Application, ta c th truy xut n bt k i tng no khc, hoc thuc tnh, phng thc gn cho mt i tng. V l i tng gc trong AutoCAD VBA nn ta c th tham chiu trc tip n cc phng thc v thuc tnh ca i tng Application m khng cn phi c tin t Application trc.
- 32 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

b. i tng Document i tng Document, thc cht l mt bn v AutoCAD, thuc tp i tng Documents cho php truy cp vo tt c cc i tng ho v hu ht cc i tng phi ha ca AutoCAD. Cc i tng ha (ng thng, hnh trn, cung, ) c truy cp thng qua tp ModelSpace v PaperSpace, cn cc i tng phi ha (layer, linetype, text style, ) c truy cp thng qua tp i tng c tn tng t nh tn i tng nhng c thm ch s sau cng, chng hn nh Layers, Linetypes, TextStyles. i tng Document cn cho php truy cp n i tng Plot (l i tng cha cc phng thc v thuc tnh ci t cc thng tin v in n cho mt Layout nht nh) v Utility (l i tng cha cc phng thc tin ch trong bn v nh nhp, chuyn i s liu,). Trong VBA c th s dng i tng ThisDrawing truy cp vo bn v hin hnh. i vi cc d n c lp, i tng ThisDrawing tng ng vi bn v hin hnh. i vi cc d n nhng, i tng ThisDrawing tng ng vi bn v cha d n nhng. c. i tng ho v Phi ho Cc i tng ho, cn gi l thc th, l nhng i tng hu hnh cu thnh bn v (ng thng, hnh trn,). to nhng i tng ny, ta s dng phng thc Add<Tn thc th> tng ng. hiu chnh hoc truy vn cc i tng, ta s dng cc phng thc v thuc tnh ca bn thn tng i tng. Mi i tng ho u c cc thuc tnh cho php ng dng c th thc hin hu ht cc lnh hiu chnh i tng trong AutoCAD nh Copy, Erase, Move, Mirror Nhng i tng ny cn c phng thc xc lp v gi li cc d liu m rng (xdata), la chn v cp nht. Cc i tng ho u c cc thuc tnh in hnh nh Layer, Linetype, Color, v Handle cng nh nhng thuc tnh ring bit, ph thuc vo loi i tng, chng hn nh Center, Radius, v Area. Cc i tng phi ho l nhng i tng khng th nhn thy c (i tng thng tin) chng hn nh Layer, Linetype, DimStyle, SelectionSets to nhng i tng ny, s dng phng thc Add ca tp i tng cha. Cn chnh sa v truy vn cc i tng th s dng cc phng thc v thuc tnh ring ca tng i tng. Mi i tng phi ho u c cc phng thc v thuc tnh c bit tng ng vi tng mc ch; tt c u c cc phng thc thit lp v gi li d liu m rng (xdata), v xo bn thn i tng. d. Tp la chn (Tp i tng SelectionSet) Tp la chn, mt phn t ca tp i tng SelectionSets, l tp hp ca cc i tng c ngi dng chn trong bn v AutoCAD. Tp la chn c th cha rt nhiu loi i tng khc nhau nhng li c x l nh mt i tng n nht. Ngoi ra, ta cng c th truy xut n tng i tng c trong tp la chn. Mt trong nhng thao tc thng c s dng trong tp la chn l thao tc lc i tng c th tm c cc i tng thc s cn thao tc trong tt c cc i tng m ngi dng la chn. Qu trnh lc c th c thng qua vng lp duyt tng i tng hoc thng qua c cu lc c nh ngha trc. tm hiu r hn v vn ny, c th tham kho trong ti liu ActiveX and VBA Developers Guide v AutoCAD DXF Reference.

- 33 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

4.2.5.2. Cc thao tc c bn a. Khai bo v truy xut i tng Mc d c rt nhiu kiu i tng khc nhau, nhng ta cng c th d dng bit c tn kiu i tng bng cch thm Acad vo trc tn ca i tng c trong cy phn cp th thin m hnh i tng ca AutoCAD. V d khi mun khai bo mt i tng c kiu l ng thng (trong m hnh i tng c tn l Line), ta s thc hin nh sau: Dim objLine As AcadLine truy xut vo i tng cng nh cc phng thc v thuc tnh c trong i tng, ta cn phi cn c vo m hnh i tng. truy cp vo i tng bn trong, ta cn phi truy cp thng qua cc i tng lp cha. Trong i tng gc l Application, v ta khng cn phi th hin r trong tham chiu n i tng. V d, truy xut n i tng Utility ca bn v hin hnh, ta s dng on m lnh sau: Application.ActiveDocument.Utility Cn i vi cc i tng nm trong mt tp i tng, ta c th truy xut thng qua ch s hoc tn ca i tng trong tp i tng. V d, truy xut vo lp c tn l Cot_Thep ca bn v hin hnh, ta s dng on m sau: ThisDrawing.Layers(Cot_thep) hoc ThisDrawing.Layers.Item(Cot_thep) truy xut n cc phng thc v thuc tnh c trong i tng, ta s dng c php sau: <Ten_doi_tuong>.<Thuoc_tinh> <Ten_doi_tuong>.<Phuong_thuc> V d khi cn thay i mu ca lp ct thp thnh mu , ta s dng on m lnh sau: ThisDrawing.Layers.Item(Cot_thep).Color = acRed b. Lm vic vi bn v Cc thao tc lin quan n bn v c thc hin thng qua i tng Document trong tp i tng Documents v thng quan bn thn tp i tng Documents. To mi bn v: s dng phng thc Add ca tp i tng Documents Sub Tao_moi() Dim objDwg As AcadDocument Set objDwg = Application.Documents.Add End Sub M bn v c: s dng phng thc Open ca tp i tng Documents. Sub Mo_ban_ve() Application.Documents.Open _ "C:\Program Files\Autocad 2002\sample\campus.dwg" End Sub Hoc kim tra s tn ti ca bn v trc khi thc s m bn v, ta c th s dng on m lnh sau: Sub Mo_ban_ve () Dim dwgName As String
- 34 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

dwgName="C:\Program Files\Autocad 2002\sample\campus.dwg" If Dir(dwgName) <> "" Then Application.Documents.Open dwgName Else MsgBox "Tep " & dwgName & " khong ton tai." End If End Sub Lu bn v: s dng phng thc Save hoc SaveAs ca i tng Document. Sub Luu_ban_ve() ' Lu bn v hin hnh theo tn ang s dng ThisDrawing.Save ' Lu bn v hin hnh theo tn mi ThisDrawing.SaveAs "MyDrawing.dwg" End Sub ng bn v: s dng phng thc Close ca i tng Document ng mt bn v, hoc s dng phng thc Close ca tp i tng Documents ng tt c cc bn v ang c m trong AutoCAD. Sub Dong_ban_ve() 'ng bn v hin hnh v khng lu bn v ThisDrawing.Close SaveChanges:=False 'ng bn v hin hnh v lu bn v. 'Nu bn v cha c lu trc th s c lu 'vi tn c ch nh ThisDrawing.Close SaveChanges:=True, _ FileName:="C:\MyDrawing.DWG" 'ng tt c cc bn v ang c m Application.Documents.Close End Sub c. Lm vic vi cc i tng To mi i tng Theo m hnh i tng ca AtuoCAD, cc i tng ho u thuc trong ModelSpace v PaperSpace, cn cc i tng phi ho th nm ch yu trong i tng Document. to mi mt i tng i tng ho, trc tra cn phi khai bo bin i tng, sau s dng phng thc Add<tn_i_tng> to i tng mi v cu lnh set gn i tng va c to trong bn v cho bin i tng m ta khai bo. i vi i tng phi ho, thng thng, to mt i tng mi, ta ch cn s dng phng thc Add c trong tp i tng cha i tng phi ho . V d sau s minh ho cch to mt ng thng mi (i tng ho) v mt lp mi (i tng phi ho) 'To mi mt ng thng v i mu thnh mu Dim P1(0 To 2) As Double Dim P2(0 To 2) As Double Dim objLine As AcadLine P1(0) = 0: P1(1) = 0: P1(2) = 0 P2(0) = 100: P2(1) = 100: P2(2) = 0 Set objLine = ThisDrawing.ModelSpace.AddLine(P1, P2)
- 35 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

objLine.Color = acRed 'To mi lp v i tn lp thnh Be_tong Dim objLayer As AcadLayer Set objLayer = ThisDrawing.Layers.Add("Cot_thep") objLayer.Name = "Be_tong" Hiu chnh i tng Vic hiu chnh i tng c th c thc hin mt cch d dng thng qua h thng cc phng thc v thuc tnh m i tng cung cp. i vi cc i tng ho (hay cn gi l cc thc th - AcadEntity), mi i tng u c nhng phng thc v thuc tnh ring. Tuy nhin, do c xy dng xut pht t mt i tng nn chng cng c nhng thuc tnh v phng thc chung. Di y s lit k cc phng thc v thuc tnh thng s dng vi cc i tng ho
Phng thc Gii thch

Move(P1,P2)
Th tc tnh tin i tng ho theo vc t P1-P2

Copy()
Hm sao chp i tng, tr v i tng ging nh i tng gc

Mirror(P1,P2)
Hm ly i xng trc i tng, tr v i tng c ly i xng vi i tng ban u qua ng thng P1-P2

Rotate(P, A)
Th tc quay i tng i tng quanh im P vi gc quay A

ScaleEntity(P, TL)
Th tc co dn i tng u nhau theo cc phng X, Y v Z vi im c s l P l t l co dn l TL

ArrayPolar(N, A, P)
Hm nhn bn dng cc, tr v mng cha N i tng sau khi c nhn bn lp y gc A c tm l im P

ArrayRectangular(Y, X, Z, dY, dX, dZ)


Hm nhn bn dng ch nht, tr v YxXxZ i tng sau khi sao chp v b tr theo Y hng, X ct, Z tng vi cc khong cch theo hng, ct, tng tng ng l dY, dX, dZ

GetBoundingBox MinPoint, MaxPoint


Th tc ly hnh ch nht bao, MinPoint l im gc di tri cn im MaxPoint l im gc trn phi ca hnh ch nht bao

IntersectWith(T, Opt)

- 36 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Hm ly giao im, tr v mng cha cc im giao gia i tng ang xt v i tng T, ta c th thit lp thm v ch xt giao ct trong bin Opt

Update
Th tc cp nht, cp nht cc i tng ho trn bn v. Th tc ny thng c gi sau khi ta thay i mt s thuc tnh ca i tng ho

Thuc tnh

Gii thch Gn/tr v nh mu ca i tng ho Gn/tr v tn lp cha i tng ho Gn/tr v kiu ng ca i tng ho

Color Layer Linetype

LinetypeScale Gn/tr v t l kiu ng ca i tng ho Lineweight Visible


Gn/tr v b dy nt ca i tng ho Quy nh s hin th/n ca i tng ho, gi tr kiu boolean

i vi cc i tng phi ho, mi i tng u c nhng phng thc v thuc tnh ring ca tng loi i tng. Chnh v vy, trong ti liu ny ch gii thiu mt s phng thc v thuc tnh ca i tng Layer, mt i tng c s dng rt nhiu trong khi lp trnh trn AutoCAD.
Phng thc Gii thch Xo lp. Phng thc ny cng c hiu lc trong hu ht cc i tng trong AutoCAD

Delete

Thuc tnh

Gii thch Gn/tr v mu ca lp Bt/tt ch lm ng lp, c gi tr kiu boolean Bt/tt hin th lp, c gi tr kiu boolean Gn/tr v kiu ng ca lp

Color Freeze1 LayerOn Linetype

Phn bit gia cc ch Lm ng (Freeze) Hin th (LayerOn) Kho (Lock) lp: Vi ch lm ng, khi bt ch lm ng, cc i tng thuc lp s khng c hin th trong bn v v cng s khng c in ra, v ng thi qua trnh ti to bn v (lnh regen trong AutoCAD) s khng c tc dng vi lp c lm ng; v do s gim ti kh nng x l ca my tnh. Vi ch hin th, khi tt lp, cc i tng trong lp s khng c hin th trn mn hnh cng nh khi in ra, tuy vy, cc i tng vn c ti to khi s dng lnh regen. Vi ch kho, khi lp b kho, cc i tng trong lp s vn c hin th trn mn hnh v vn c in ra, nhng ngi s khng th hiu chnh cc i tng . - 37 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

LineWeight Gn/tr v b dy nt ca lp Lock Name


Bt/tt ch kho lp, gi tr kiu Boolean Gn/tr v tn ca lp

d. Thao tc trn tp la chn SelectionSet Trong qu trnh thao tc vi bn v, i lc ngi dng cn phi nhm cc i tng li sau thc hin mt thao tc no trn nhm i tng , chng hn nh khi cn i mu cc ng thng do ngi dng chn chng hn, lc , ta s x dng n tp la chn SelectionSet. s dng tp la chn, cn phi thc hin qua hai bc: to mt i tng SelectionSet v thm vo tp i tng SelectionSets; Thm cc i tng vo tp la chn. To tp la chn mi to mt tp la chn mi, ta s dng phng thc Add c trong tp i tng SelectionSets, vi ch mt tham s cn truyn vo l tn ca tp la chn. To tp la chn mi Dim sset As AcadSelectionSet Set sset = ThisDrawing.SelectionSets.Add("NewSelectionSet") Nu c mt tp la chn trng tn, AutoCAD s bo li. Chnh v vy, trong khi lp trnh, ta nn xo tp la chn i nu ta khng dng n tp la chn na. Xo tp la chn ThisDrawing.SelectionSets.Item("NewSelectionSet").Delete Thm i tng vo tp la chn Ta c th thm cc i tng vo trong tp la chn hin hnh bng cch s dng mt trong nhng phng thc sau:
Phng thc AddItems ITEMS Select

Gii thch Thm cc i tng c trong mng i tng ITEMS vo tp la chn La chn cc i tng v thm vo trong tp la chn. Ta c th chn tt c cc i tng, cc i tng bn trong v ct ngang qua mt hnh ch nht, cc i tng bn trong v ct ngang qua hnh a gic, i tng va mi to, i tng trong tp la chn va mi to, i tng bn trong mt ca s, i tng bn trong hnh a gic. Chn cc i tng i qua mt im v thm vo tp la chn Chn cc i tng bn trong mt a gic v thm vo tp la chn Nhc ngi dng chn i tng trn mn hnh v thm vo tp la chn

SelectAtPoint SelectByPolygon SelectOnScreen

V d sau s minh ho cch thc thm i tng vo tp la chn Sub Ch4_AddToASelectionSet() To tp i tng mi Dim sset As AcadSelectionSet
- 38 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

Set sset = ThisDrawing.SelectionSets.Add("SS1") Nhc ngi dng chn i tng thm vo tp la chn kt thc vic chn i tng, nhn phm ENTER. sset.SelectOnScreen Duyt qua tp la chn v gn mu i tng l mu xanh Dim entry As AcadEntity For Each entry In sset entry.Color = acBlue entry.Update Next entry End Sub Loi b i tng ra khi tp la chn Sau khi to tp la chn, ta c th x l tt c cc i tng hoc ch la chn x l mt s i tng trong tt c cc i tng c la chn. loi b i tng khi tp la chn, ta s dng mt trong nhng phng thc sau:
Phng thc Gii thch ITEMS. Cc i tng c g b s khng nm trong tp la chn, nhng vn tn ti bnh thng trong bn v.

RemoveItems ITEMS Phng thc ny s g b cc i tng c trong mng i tng

Clear

Phng thc ny s g b tt c cc i tng trong tp la chn. Tp la chn vn tn ti nhng khng cha i tng no c. Cc i tng c g b vn tn ti bnh thng trong bn v. Phng thc ny s xo tt c cc i tng c trong tp la chn. Tp la chn vn tn ti nhng khng cha i tng no c. Cc i tng c trong tp la chn s b xo v khng cn tn ti trong bn v. Phng thc ny s xo tp la chn. Tp i tng s khng cn tn ti na. Cc i tng c trong tp la chn vn tn ti bnh thng trong bn v.

Erase

Delete

S dng b lc trong tp la chn i lc, trong qu trnh chn i tng, ta ch cn quan tm n mt s i tng no , chng hn nh ch chn cc i tng c mu . Khi , ta c th s dng b lc cho tp la chn, v nh th, ch c cc i tng tho mn cc yu cu ch ra trong b lc th mi c thm vo tp la chn. s dng c b lc, ta cn phi xc nh c kiu b lc v d liu tng ng vi kiu b lc. Danh sch ca cc loi b lc c th tham kho trong ti liu AutoCAD DXF Reference trong ti liu tr gip ca AutoCAD. V d sau minh ha nhiu b lc khc nhau. Ch thm nhng i tng kiu Text vo tp la chn: FilterType = 0 FilterData = "TEXT" sset.SelectOnScreen FilterType, FilterData Ch thm nhng i tng thuc lp FLOOR9 vo tp la chn: FilterType = 8

- 39 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

FilterData = "FLOOR9" sset.SelectOnScreen FilterType, FilterData Ch thm nhng i tng c mu vo tp la chn: Filter Type = 62 Filter Data = 5 sset.SelectOnScreen FilterType, FilterData e. Nhp d liu t ngi dng Trong qu trnh lp trnh, vic to ra s tng tc vi ngi s dng trong chng trnh l iu khng th thiu. Ngoi cch nhp d liu thng qua h thng cc ca s (Form), ta cn c th to ra tng tc vi ngi dng thng qua cc phng thc c trong i tng Utility. Cc phng thc ny s hin th mt dng nhc trn dng lnh ca AutoCAD v yu cu ngi s dng nhp vo nhiu kiu d liu khc nhau (tu thuc vo tng loi phng thc) nh chn mt im trn mn hnh, chn i tng, nhp vo mt s nguyn, Di y l mt s phng thc thng c s dng ca i tng Utility:
Phng thc Gii thch

GetInteger([dng_nhc])
AutoCAD s dng li, hin th dng_nhc v ch ngi dng nhp vo mt s nguyn. Phng thc ny s tr v s nguyn m ngi dng nhp vo.

GetString([dng_nhc])
AutoCAD s dng li, hin th dng_nhc v ch ngi dng nhp vo mt chui. Phng thc ny s tr v chui m ngi dng nhp vo.

GetPoint([im_c_s] [, dng_nhc])
AutoCAD s dng li, hin th dng_nhc v ch ngi dng chn mt im trn mn hnh. Khi mun chn mt im tng i vi mt im no , ta s truyn to im thng qua tham s im_c_s. Phng thc ny s tr v to im m ngi dng nhp vo.

GetDistance([im_c_s] [, dng_nhc])
AutoCAD s dng li, hin th dng_nhc v ch ngi dng nhp vo khong cch. Khong cch nhp vo c th l mt s nguyn, hoc ngi dng chn hai im, hoc ch nh trc mt im (thng qua tham s im_c_s) v ngi dng chn mt im trn mn hnh. Phng thc ny s tr v khong cch gia hai im.

GetAngle([im_c_s] [, dng_nhc])
AutoCAD s dng li, hin th dng_nhc v ch ngi dng nhp vo gc. Gc nhp vo c th l mt s ch gc (n v l ), hoc ngi dng chn hai im, hoc ch nh trc mt im (thng qua tham s im_c_s) v ngi dng chn mt im. Gi tr tr v c n v l Radian ch gc gia tia ni hai im chn v trc Ox (trong mt phng Oxy).

V d sau minh ho cch nhp to im, s dng phng thc GetPoint: Sub V_d_GetPoint() ' V d sau tr v im do ngi dng nhp vo Dim returnPnt As Variant
- 40 -

T NG HO THIT K CU NG

Lp trnh trn ng dng nn

' Khng s dng im c s returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ") MsgBox "The WCS of the point is: " & returnPnt(0) & ", " _ & returnPnt(1) & ", " & returnPnt(2) & vbCrLf & _ "(Enter the next value without prompting.)" ' S dng im c s Dim basePnt(0 To 2) As Double basePnt(0) = 2#: basePnt(1) = 2#: basePnt(2) = 0# returnPnt = ThisDrawing.Utility.GetPoint(basePnt, _ "Enter a point: ") MsgBox "The WCS of the point is: " & returnPnt(0) & ", _ " & returnPnt(1) & ", " & returnPnt(2) ' To mt ng thng t im c s v im m ngi dng ' nhp vo sau cng Dim lineObj As AcadLine Set lineObj = ThisDrawing.ModelSpace.AddLine _ (basePnt, returnPnt) ZoomAll End Sub f. Mt s thao tc khc Gn v ly bin h thng Gn bin h thng: Document.SetVariable Ly bin h thng: Document.GetVariable V d sau s ly v gn bin h thng MIRRTEXT, l bin quy nh cch thc ly i xng mt i tng vn bn. 'Ly gi tr bin h thng v hin th thng bo MsgBox ThisDrawing.GetVariable("MIRRTEXT") 'Gn bin h thng bng 1 ThisDrawing.SetVariable "MIRRTEXT", 0 S dng cc lnh sn c ca AutoCAD Khi cn thc hin mt s lnh thng qua ca s dng lnh ca AutoCAD, ta c th s dng phng thc SendCommand c trong i tng Document. V d sau s v mt ng thng trong AutoCAD thng qua dng lnh 'V ng thng t im (0,0) n (100,100) ThisDrawing.SendCommand "line 0,0 100,100" & vbCr & vbCr Mt s lnh khc Thu phng ton b i tng: ZoomExtent Thu phng ton b bn v: ZoomAll Cp nht ton b bn v: Update Thot khi AutoCAD: Quit

4.3. Bi tp p dng

- 41 -

You might also like