You are on page 1of 32

CHNG I.

Bin v kiu d liu ca VBA

Ngn ng VBA cung cp mt tp hp y cc kiu d liu thng thng, cng thm kiu d liu thng minh gi l Variant, t n thch ng lu gi bt k kiu d liu no.

Cc kiu d liu VB
VB v VBA h tr cc kiu d liu sau: Boolean C th cha cc tr logic True or False. Cc t kha True v False l cc hng nh ngha sn trong VBA.
1. 2. 3. 4. 5. 6. 7. 8. 9. var1 = True var2 = False If myBool = False Then myVar = 4 myBool = True Else myVar = 5 myBool = False End If

isual Basic Data Types Kch thc: 2 byte Tr: True hoc False Tr mc nh: False Byte Kiu ph v s nh nht trong VBA. Kch thc: 1 byte Tr: 0 n 255 Tr mc nh: 0 Currency Dng s c bit dng lu tr cc gi tr tin t. Kch thc: 8 byte Tr: 922,337,203,685,477.5808 n 922,337,203,685,477.5807 Tr mc nh: 0 Date Dng s c bit dng biu din ngy v gi Kch thc: Eight bytes Tr: 1 thng ging 100 n 31 thng mi hai 9999 Tr mc nh: 00:00:00

Lng Trn Hy Hin

VBA

Thp phn Kiu ph cha cc s thp Kch thc: 14 bytes Tr: - Khng c phn thp phn: +/ 79,228,162,514,264,337,593,543,950,335 - Cho ti 28 v tr thp phn: +/ 7.9228162514264337593543950335 Tr mc nh: 0 Double S thc du chm ng. Kch thc: 8 byte Tr: - Tr m: 1.79769313486232E308 to 4.94065645841247E-324 - Tr dng: 1.79769313486232E308 to 4.94065645841247E-324 Tr mc nh: 0 Integer S nguyn c du. Mt bit biu din du (m hoc dng). Gn tr ngoi vng gi tr s sinh li runtime. Kch thc: 2 byte Tr: 32,768 n 32,767 Tr mc nh: 0 Long S nguyn c du. Mt bit biu din du (m hoc dng). Kch thc: 4 byte Tr: 2,147,483,648 n 2,147,486,647 Tr mc nh: 0 Object Cha tham chiu n i tng (i.e., a ch). i tng c th l OLE automation hay ActiveX component, hoc i tng lp bn trong ng dng. Kch thc: 4 byte Tr: tham chiu n i tng ty . Tr mc nh: Nothing Single S thc du chm ng. Kch thc: 4 byte Tr: - Tr m: 3.402823E38 to 1.401298E-45 - Tr dng: 1.401298E-45 to 3.402823E38 Tr mc nh: 0

Lng Trn Hy Hin

VBA

String (chiu di c nh) c dng trong VB khi b nh v dung lng a l mi quan tm hng u, nhng ni chung t c dng. Khai bo:
Dim|Private|Public varname As String * stringlength

Kch thc: Chiu di ca chui Tr: 1 n 65,400 k t Tr mc nh: S khong trng bng vi chiu di chui. String (chiu di thay i) Kiu d liu chui t co dn c th cha k t cn thit, cho n khong 2 t. Khai bo:
Dim variablename As String

VBA c nhiu hm thao tc trn chui. Danh sch cc hm ny cn ko di hn trong VB khi nhiu hm c gii thiu trong VBScript ngy nay cng c chp nhn trong VB. Kch thc: 10 + chiu di chui Tr: 0 n 2 t k t Tr mc nh: chui rng ("") Kiu ngi dng Kiu ngi dng cho php chng ta to kiu d liu n bng cch kt hp cc kiu d liu bn trong VB, mng, i tng, hay cc kiu ngi dng khc. Khai bo:
Type udtCustomer Name As String Code As Long Orders(20) As udtOrders RenewalDate As Date End Type

Kiu ngi dng l cu trc d liu quan trng trong VB, ch yu c dng khi giao tip vi Windows API. Kch thc: Tng kch thc cc thnh phn bn trong. Tr: Ty theo tr cc thnh phn bn trong Tr mc nh: Gi tr mc nh ca cc thnh phn bn trong Variant (k t) Kiu ph rt ging kiu chui c chiu di rhay i. Cc hm v chui ca VB u chp nhp chui variant, nhiu hm c hai phin bn tr v chui hay chui variant. Th d hm Left$ v Left. Kch thc: 22 bytes + chiu di chui 3

Lng Trn Hy Hin

VBA

Tr: Ging chui c chiu dai thay i Tr mc nh: Empty Variant (s) B nh c cp pht ng ty theo gi tr s. Variant cng bao gm kiu ph Decimal. Kch thc: 16 bytes Tr: Same as Double Tr mc nh: Empty

Chuyn i kiu
VBA cung cp 2 tp hp hm chuyn i. Tp hp u, bao gm Int v Str, c t cc phin bn trc ca VB v tn ti ch tng thch ngc. Cc hm thuc tp hp th hai bt u vi ch C l nhng hm chuyn i mi hn. M$ khuyn chng ta dng tp hp hm th hai. C php ca tp hp hm th hai v c bn th ging nhau. Th d:
Cbool(tn_bi n)

Cc hm chuyn i c VBA h tr l: CBool Chuyn 0 thnh false, cc tr khc thnh true CByte Chuyn i tn_bi n thnh kiu Byte. tn_bi n c th cha d liu s bt k hay d liu chui c th chuyn i thnh s, trong khong 0 n 255. Nu tn_bi n ngoi khong , VBA bo li Overflow. Nu tn_bi n l du chm ng, n c lm trn thnh s nguyn gn nht trc khi chuyn i kiu. CDec Chuyn i tn_bi n thnh kiu ph Decimal. Hm ny chp nhn d liu s hay chui c th chuyn thnh s, trong gii hn ca kiu Decimal. y l hm cung cp phng thc duy nht to kiu ph Decimal. CDate Chuyn i tn_bi n thnh kiu Date. CDate chp nhn s v chui biu din ngy v chuyn i thnh dng c m t bi thng tin a phng trn my tnh. Th d my tnh c ci t dng ngy ca M mm/dd/yy, nu ta nhp ngy dng Anh dd/mm/yy v dng hm Cdate th ngy c s chuyn i sang dng M. CCur Chuyn i tn_bi n thnh kiu Currency. CCur chp nhn d liu s hay chui bt k biu din gi tr tin t. Hm ny nhn dng thp phn hay du phn cch hng ngn theo thng tin a phng ca my tnh. Ch dng cho VBA.

Lng Trn Hy Hin

VBA

CDbl Chuyn i tn_bi n thnh kiu double. Chp nhn d liu s bt k nm trong gii hn ca kiu Double hoc bt k d liu chui c th chuyn i thnh s trong gii hn ca kiu Double. CInt Chuyn i tn_bi n thnh kiu Integer. CLng Chuyn i tn_bi n thnh kiu Long. CSng Chuyn i tn_bi n thnh kiu Single. CStr Chuyn i tn_bi n thnh kiu String. CStr chp nhn kiu d liu bt k. CVar Chuyn i tn_bi n thnh kiu Variant. CVar chp nhn kiu d liu bt k.

Chuyn i kiu n trong VB


Ch rng VB c nhiu cch chuyn i kiu t ng. Th d thuc tnh Text ca text box r rng c kiu d liu chui v thuc tnh prompt ca hp thng bo cng vy. Nh th on m sau c l s gy li:
Private Sub Command1_Click() 1. Dim iValue As Integer 2. iValue = txtTextBox.Text 3. MsgBox Prompt:=iValue End Sub

Tuy nhin VB cho php gn biu din chui ca s cho kiu d liu Integer, ri gn s ny cho thuc tnh chui prompt ca hp thoi. Chuyn i kiu din ra t ng. Variant VBA cha kiu d liu c bit, Variant. Bn trong, kiu Variant rt phc tp nhng cng cc k tin dng. Variant l kiu d liu mc nh ca VBA. Th d sau xem myVar l Variant:
Dim myVar

Kiu d liu Variant cho php chng ta dng mt bin vi bt k kiu d liu ni ti no ca VBA, kiu d liu gn nht vi gi tr c gn s t ng lm vic. minh ha, chng ta kho st hai phin bn ca cng mt hm:
1. Private Function GoodStuff(vAnything, vSomething, vSomethingElse) 2. If vAnything > 1 And vSomething > "" Then 3. GoodStuff = vAnything * vSomethingElse

Lng Trn Hy Hin

VBA

4. Else 5. GoodStuff = vAnything + 10 6. End If 7. End Function 8. Private Function GoodStuff(iAnything As Integer, sSomething As_ String, iSomethingElse As Integer) As Integer 9. If iAnything > 1 And sSomething > "" Then 10. GoodStuff = iAnything * iSomethingElse 11. Else 12. GoodStuff = iAnything + 10 13. End If 14. End Function

Cc kiu ph variant c bit Thm vo cc kiu d liu ni ti nh k trn, variant cng h tr cc kiu d liu c bit: Empty Kiu ph Empty c t ng gn cho bin Variant va khai bo, trc khi ta gn tr cho n. Th d:
Dim var1, var2 var2 = 0

Kiu ph ca var1 l Empty, trong khi var2 ch Empty trong khong thi gian ngn gia vic thc thi mnh Dim ca dng th nht v pht biu gn dng th hai. Thm na, kiu ph ca bin l Empty nu bin c gn mt cch tng minh bng tr Empty.
Dim var1 var1 = Empty

Null Null l kiu ph c bit ch rng bin khng cha tr hp l. Thng thng bin c gn tr Null khi c mt li xy ra. Bin phi c gn tr Null mt cch tng minh.
var1 = Null

Tr Null cng l kt qu ca php ton trong mt trong nhng gi tr ca biu thc l Null.
dim myVarOne, myVarTwo, myVarThree C 3 bi n l EMPTY myVarOne = 9 myVarTwo=NULL Cho bi n ny l NULL myVarThree = myVarOne + myVarTwo K t qu l NULL

Error Kiu ph Error c dng lu tr m li. Cc m li c VBA sinh t ng, c dng trong cc on chng trnh kim sot li. Xc nh kiu ph variant Cng rt tt khi kiu d liu variant qun l tt c d liu chng ta nhp, nhng chnh xc mt bin ang c kiu d liu no? VBA cung cp hai hm: VarType, tr li mt s ni ln kiu d liu; v TypeName, tr li chui tn kiu.

Lng Trn Hy Hin

VBA

VarType C php ca VarType l:


VarType(tn_bi n)

Bng sau y lit k cc tr c VarType tr v v cc hng VBA tng ng: Value 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 36 8192 Data Subtype Empty Null Integer Long Integer Single Double Currency Date String OLE Automation Object Error Boolean Array of Variant Data access object Decimal Byte User-defined Type Array VBA Constant vbEmpty vbNull vbInteger vbLong vbSingle vbDouble vbCurrency vbDate vbString vbObject vbError vbBoolean vbVariant vbDataObject vbDecimal vbByte vbUserDefinedType vbArray

Tuy nhin, hm VarType khng bao gi tr v 8192 nh trong bng, iu ny ch ni ln s tn ti ca mng. Khi truyn cho mt mng, VarType tr v 8192 cng vi gi tr ca kiu phn t mng. Th d, khi truyn mng cc chui cho VarType, tr tr v l 8200 (8192 + 8). TypeName Hm TypeName tr li tn kiu ph thay v s. C php ca TypeName l:
result = TypeName(variable)

Ging nh hm VarType, TypeName l ch c, dng xc nh kiu ph ca bin nhng khng th dng t kiu cho bin. lm iu ny, chng ta phi dng hm chuyn i kiu. Return Value <object type> Boolean Byte Currency Date Decimal Double Empty Error Integer Lng Trn Hy Hin Data Subtype Actual type name of an object Boolean value: True or False Byte value Currency value Date or time value Decimal (single-precision) value Double-precision floating-point value Uninitialized Error Integer value VBA 7

Long Nothing Null Object Single String Variant() Unknown

Long integer value Object variable that doesnt yet refer to an object instance No valid data Generic object Single-precision floating-point value Character string value Variant array Unknown object type

Nu chng ta truyn mt mng ca mt kiu d liu c th cho hm TypeName, chui tr v l chui ca kiu d liu cng vi () m ch mng. Th d vi bion l mng cc chui, tr tr v l String(). on m tr nn d c v d bo tr, c th dng cc hm trn nh sau:
If TypeName(x) = "Double" Then

D liu Variant v d liu kiu khc Variant c v l cu tr li cho tt c yu cu v kiu d liu, nhng cng c gi phi tr. Variant cn hn l mt kiu d liu, t n l mt ng dng. N phi qua nhiu x l xc nh c kiu d liu ca mt gi tr tru tng. Mt biu thc ch c tr variant x l chm hn 33% so vi cng biu thc dng kiu d liu ni ti. Hm v variant v hm v cc kiu khc Ngn ng VBA bao gm mt s hm x l chui vi hai phin bn, mt tr v variant v mt tr v chui. Loi hm th hai ly tn loi hm th nht cng thm k t $ ch chui (th d, Left v Left$). Kho st phin bn variant
1. 2. 3. 4. Dim sString Dim sPartString sString = "ABCDEFGH" sPartString = Mid(sString, 1, 2)

v phin bn chui
1. 2. 3. 4. Dim sString As String Dim sPartString As String sString = "ABCDEFGH" sPartString = Mid$(sString, 1, 2)

Ta nhn thy phin bn variant chm hn 50%. Hin nhin y l s khc bit c ngha, gi chng ta dng phin bn c kiu bt c khi no c th.

Khai bo bin v hng


Nh bit, VBA h tr kiu d liu mc nh, v vy khng ging nh nhiu ngn ng khc, VBA cho php khai bo bin n. Ngay khi chng ta dng tn bin hay tn hng trong m lnh, VBA lm tt c vic cn thit cp pht b nh, v bin xem nh c khai bo. Tuy nhin, kinh nghim lp trnh cho thy nn khai bo bin v hng tng minh bng cch dng pht biu Dim, Private, hay Public statements. 8

Lng Trn Hy Hin

VBA

C php:
Dim VariableName As datatype Private VariableName As datatype Public VariableName As datatype

Nu c nhiu bin cn khai bo, c th vit cng dng phn cch bi du phy:
Dim iRefNo As Integer, iAnyVar As Integer

Bng cch khai bo r bin theo cch ny, chng ta c th gim s li trong chng trnh do g sai tn bin. Option Explicit Dng pht biu Option Explicit l mt kinh nghim hay. N buc chng ta khai bo r bin v hng. Chng ta c th VB t ng thm n vo cc modun mi to bng cch nh du option Require Variable Declaration trong tab Editor ca hp thoi Options. Khi Option Explicit c dng, VB sinh li compile-time khi n gp mt bin cha c khai bo.. D liu rng Mt thnh phn quan trong ca ngn ng lp trnh l kh nng pht hin v qul d liu rng. Chng ta mun ni n d liu cha c. VBA pht trin mt s cch cho php chng ta gn tr empty hay null cho bin. Hiu c s khc bit gia chng l quan trng v mi th u c cch dng ring v khng th thay th cho nhau. vbNull Dng vi hm VarType xc nh bin cha Null. Th d:
varValue = Null If VarType(varValue) = vbNull Then

Ch l khng th dng hng vbNull gn tr Null. vbNullChar Dng gn hay test k t null chr(0). Ni cch khc vbNullChar tng ng chr(0).
sMyString & vbNullChar

vbNullString Gn hoc test chui chiu di 0 (chui rng).


strVar1 = vbNullString

tng ng vi:
strVar1 = ""

T kha Null Gn tr Null cho bin variant. C th test tr null ca bin bng hm IsNull. Ch rng on m sau
varValue = Null if varValue = Null

tr v False, v Null l False v v vy bt k biu thc no cha Null cng tr v False. on m sau ch ra khi no dng v khi no khng dng t klha Null Lng Trn Hy Hin VBA 9

1. 2. 3. 4. 5. 6. 7. 8.

Dim i As Variant i = Null If i = Null Then MsgBox "It's null" 'Sai End If If IsNull(i) Then MsgBox "It's null" 'ng End If

Ch l t kha Null khng th dng gn cho bin kiu bnh thng. vbEmpty Xc nh bin variant c khi to hay cha. Th d:
If IsEmpty(varValue) Then

Ging vi:
If varValue = vbEmpty then

Tuy nhin khng th dng vbEmpty gn tr empty cho bin variant. Nothing keyword Ch dng vi bin i tng xc nh bin tham chiu n mt i tng.
If objVar Is Not Nothing Then

Hoc hy tham chiu n i tng:


Set objvar = Nothing

Array Variables
To mt mng c gi l dimensioning mt mng (ngha xc nh kch thc ca n). Cc phn t d liu bn trong c gi l phn t v s dng truy cp phn t c gi l ch s. Cc ch s nh nht v ln nht c gi l cn. Trong VBA, c bn kiu mng: mng c nh hay mng ng, mng mt chiu hay nhiu chiu. Mng c nh Hu nh chng ta lun bit c bao nhiu phn t cn c lu trong mng, v vy c th nh ra kch thc thch hp khi khai bo mng.
Dim myArray(5) As Integer

Dng trn khai bo mng tn l myArray vi 6 phn t bt u t v tr 0. Chng ta c th to mng cng vi cc phn t ca n bng hm Array:
myArray = Array(12,3,13,64,245,75)

Mng ng Trong trg hp khng bit trc s phn t cn lu trong mng, chng ta dng mng ng. Mng ng cho php chng ta m rng s phn t mng khi chng trnh ang hot ng bng pht biu ReDim. Mng ng c khai bo bng cch b qua s phn t mng:
Dim iDynamicArray() As Integer

Lng Trn Hy Hin

VBA

10

Khi cn nh li kch thc mng, dng t kha ReDim:


ReDim iDynamicArray(10)

Chng ta cng c th khai bo mng ng cng vi s phn t khi to bng cch dng ReDim:
ReDim anyDynamicArray(4) As Integer

Khng c hn ch v s ln nh li kch thc mng ng, nhng mi ln nh vy d liu lu trong mng b mt. Nu cn gi li d liu c, dng t kha Preserve:
ReDim Preserve myDynamicArray(10)

Trn thc t, ReDim to mng mi, Preserve sao chp d liu t mng c sang mng mi. iu quan trng cn nh l khi gim kch thc mng, ta s mt d liu thuc cc phn t b xa. Trong khi c th nh li kch thc mng bng cch iu chnh cn trn, chng ta khng th iu chnh cn di. Redim mt mng lun lm chm tc thc thi, v vy chng ta dng mng c nh mi khi c th. Mt khi dng mng ng, chng ta nn iu chnh kch thc mng mi ln nhiu phn t thay v mt.
If lngCurPtr > UBound(varArray) Then ReDim Preserve varArray(UBound(varArray) + 10) End If 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Option Explicit 'require variable declaration ReDim sMyArray(0) As String 'create a 1-element dynamic array Dim iIndex As Integer 'variable to track array index iIndex = 0 'assign the first index number Sub cmdButton1_OnClick 'Store the user input in the array sMyArray(intIndex) = txtText1.Text 'increment the array counter by one iIndex = iIndex + 1 'increase the size of the array ReDim Preserve sMyArray(iIndex) txtText1.Text = "" 'Empty the text box again End Sub

Xc nh cn ca mng Cc hm Ubound v LBound c th tm cn trn v di ca mt mng. C php:


x = UBound(arrayname)

UBound tr li ch s cao nht ca mng. S phn t tht s ca mng ph thuc vo im bt u ca mng. Nu dng cn di mc nh ca mng l 0, Ubound nh hn s phn t 1.
iArraySize = UBound(array) + 1

Tuy nhin, cng thc chnh xc l:


iArraySize = UBound(array) LBound(array) + 1

Hm UBound thng dng vi mng ng:


1. Option Explicit 2. Private sValues() As String

es &
3. Private Sub Form_Load()

Lng Trn Hy Hin

VBA

11

4. ReDim sValues(0) 5. End Sub 6. Private Sub Command1_Click() 7. sValues(UBound(sValues)) = txtTextBox.Text 8. ReDim Preserve sValues(UBound(sValues) + 1) 9. End Sub

Ch l dng hm UBound trn mt mng cha khi to s gy li Out of Range. t cn di Chng ta c th thay i cn di mc nh trn tng modun bng pht biu Option Base phn khai bo ca modun. Th d:
Option Base 1

Sinh ra cc mng c phn t u 1. Pht biu Option Base phi dng trong modun trc bt k khai bo bin no. Mt cch khc l t c cn trn v di trong khai bo bin:
Dim arrayname(lowerboundary To upperboundary) As datatype

Mng nhiu chiu Trong mng mt chiu, d liu lu tr bn trong khng c cu trc; n c truy cp lin tip, c mt mu d liu cho mi phn t. Khi chng ta cn lu tr nhiu hn mt mu d liu cho mt phn t, chng ta dng hoc l mng nhiu chiu hoc l d liu kiu ngi dng nh ngha. Mng nhiu chiu cho php chng ta c mt mng ring cho mi phn t ca mng. Cu trc ca mng nhiu chiu ging nh bng CSDL. Dng ca bng tng trng cho chiu th nht, ct ca bng tng trng cho chiu th hai. Mng nhiu chiu c ti a 60 chiu, mc d chng ta him khi dng nhiu hn hai hay ba chiu. nh ngha mng nhiu chiu, dng c php sau:
Dim arrayname(upperboundDimension1, _ upperboundDimension2, ....) As Datatype

Cng nh vi mng mt chiu, chng ta c th ch nh cn di trong nh ngha mng:


Private myArray(1 To 20, 0 To 50) As String

Mng ng nhiu chiu Ging nh mng mt chiu, mng nhiu chiu c th l ng v qui lut nh li kch thc cng tng t. Cc qui tc dng cho mng ng nhiu chiu l: C th ReDim thay i c v s chiu ln kch thc mi chiu.
1. 2. 3. 4. 5. 6. 7. Private Private ReDim End Sub Private ReDim End Sub myArray() As Integer Sub cmdButtonOne_OnClick myArray(10,5) Sub cmdButtonTwo_OnClick myArray(4,10,2)

Lng Trn Hy Hin

VBA

12

Nu dng t kha Preserve, ch c th iu chnh kch thc ca chiu sau cng ca mng v khng th thay i s chiu:
... ReDim myArray(10,5,2) ... ReDim Preserve myArray(10,5,4) ...

Trong trng hp mng nhiu, hm UBound cn thm tham s ch nh chiu: largestElement = UBound(arrayname, dimensionNo) Tng t vi hm LBound: smallestElement = LBound(arrayname, dimensionNo)

Kiu ngi dng nh ngha


Mt hn ch chnh ca mng nhiu chiu l tt c cc chiu ca mng phi c cng kiu d liu. Kiu ngi dng nh ngha (UDT), kt hp nhiu kiu d liu vo mt kiu d liu mi, vt qua hn ch ny. on m sau nh ngha mt UDT n gin:
1. Private Type custRecord 2. custAccNo As Long 3. custName As String 4. RenewalDate As Date 5. End Type 6. Private custArray(10) As custRecord

Dng cui cng to mt mng cc b ca UDT. Ta cng c th dng mt UDT khc trong mt UDT:
1. 2. 3. 4. Private Type custOrders OrderNo As Long OrderDate As Long End Type

5. Private Type custRecord 6. custAccNo As Long 7. custName As String 8. RenewalDate As Date 9. orders(10) As custOrders 10. End Type 11. Private custArray(10) As custRecord

Sau y l th d v truy cp d liu trong UDT:


Text1.Text = custArray(iCust).custName Text2.Text = custArray(iCust).orders(iOrder).OrderNo

Phm vi (tm) v i sng ca bin


i khi chng ta cn mt bin c thy trong tt c th tc trong khi bin khc ch c gi tr trong mt th tc no . Kh nng c nhn thy ca bin gi l phm vi (tm). Gn lin vi tm l i sng ca bin, hay l chu k ca vic thc thi chng trnh khi bin tn ti v c gi tr s dng. Chnh xc ni chng ta khai bo mt bin hay hng trong chng trnh xc nh tm v thi gian sng ca bin. Bin khai bo trong phn khai bo ca modun bng cc s dng t kha Private c th c truy cp bi tt c th tc trong modun. Lng Trn Hy Hin VBA 13

Bin khai bo trong phn khai bo ca modun bng cc s dng t kha Public c th c truy cp trong ton project. Bin khai bo trong phn khai bo ca modun lp bng cc s dng t kha Public c th c truy cp trong ton project mt khi i tng ca lp c to. Bin khai bo bng cch dng pht biu Dim trong th tc hay hm ch c th truy cp t bn trong th tc hay hm . Bin trong phm vi th tc Bin khai bo trong th tc ch c th dng trong th tc. Ta c th dng cng tn bin trong cc th tc khc nhau. Bin tm mc th tc kt thc khi pht biu End Sub hay End Function c thi hnh. C mt loi bin mc th tc c bit l bin static, mc d khai bo trong th tc v ch c tham chiu trong th tc nhng c thi gian sng mc modun. Gi tr ca bin vn c lu gi qua cc ln gi th tc. Khai bo bng t kha Static:
Static lngExecuted As Long

Cng c th khai bo mt th tc l Static, khi tt c bin trong th tc u l Static.


Static Procedure MyProcedure() Dim iCtr As Integer

Trong th tc, ch c th dng Dim hay Static khai bo bin, khng th khai bo bin hay hng bng Public, Private, hay Friend. Bin trong phm vi modun Bin c phm vi modun c th c truy cp bi bt c hm thay th tc no trong modun. Bin v hng mc modun tn ti trong b nh sut thi gian tn ti ca modun. to bin hay hng mc modun, dng pht biu Dim hay Private trong phn khai bo ca modun. Friend Scope T kha Friend ch c th dng cho khai bo bin hay th tc bn trong modun i tng nh mt lp hay mt modun form. Friend cho php cc modun i tng khc trong cng mt project truy cp bin v phng thc m khng cn phi khai bo nh Public. Public Scope Dng bn ngoi th tc thay cho pht biu Dim, Public cho php bin c nhn thy bi tt c th tc trong tt c modun ca project. Nu c dng trong Class module, phm vi ca n vt ra ngoi bin gii ca project hin hnh. Vic to t ng giao tip COM cho mt th tc hay thuc tnh public bt k c ngha l n c th c gi t cc thnh phn software khc nh l mt phng thc hay thuc tnh ca lp trong n c nh ngha.

Bin i tng v s lin kt


Khai bo bin i tng Bin i tng c khai bo kh ging vi cc bin kiu khc. Sau y l ba cch khai bo: Lng Trn Hy Hin VBA 14

1. Dim myObject As LibName.ClassName 2. Dim myObject As New LibName.ClassName 3. Dim myObject As Object

Trong cc cch trn, pht biu Private hay Public c th thay cho pht biu Dim, phm vi ca bin cng ging nh cc kiu bin khc. Trong khai bo u tin, bin i tng c tham chiu n class type library, nhng khng c instance no ca lp c gn cho bin. Lc ny, myObject c t Nothing. tham chiu lp theo cch ny, ta phi dng hp thoi References. gn tham chiu n mt th hin ca lp, phi dng pht biu Set trc tn bin:
Set myObject = LibName.ClassName

Cch ny to ra mt tham chiu lin kt sm ti i tng. Trong pht biu th hai, tham chiu n mt th hin mi ca lp c gn cho bin i tng. Mt ln na, ta phi dng n hp References. Phng php th hai cng to m tham chiu lin kt sm n i tng, tuy nhin i tng cha tht s c tao ra cho n khi bin i tng c dng. Trong pht biu th ba, bin i tng c khai bo thuc kiu i tng tng qut. Cch ny thng dng khi chng ta khng bit trc kiu i tng chng ta s to. Lc ny, bin i tng cng c gi tr Nothing. gn mt tham chiu i tng cho n, chng ta phi dng hoc hm CreateObject hoc GetObject. Bin i tng khai bo theo cch ny c gi l lin kt mun. Lin kt sm v lin kt mun Lin kt mun km hiu qu hn lin kt sm, nhng khng phi lun lun nh vy. C mt s yu t cn xem xt khi chn phng thc lin kt ca i tng. Th nht, i tng m ta mun lin kt thc thi trong cng tin trnh ca client hay chy trong tin trnh ring ca n? N s chy trn cng mt my hay t server xa? Ni chung lin kt mun hiu qu hn mt t vi nhng out-of-process ActiveX EXEs, v lin kt sm hiu qu hn nhiu vi nhng in-process DLLs. Yu t th hai nh hng ln hiu sut ca lin kt sm hay mun l h iu hnh. S khc bit v hiu sut thy r trn Windows 95, trong khi t khc bit trn Windows NT. i tng Collection i tng collection l phin bn hng i tng ca mng VB, c th cha bt k kiu d liu no. Collection h tr bn phng thc sau: Add Thm mt phn t vo collection. Cng vi d liu, chng ta c th cho mt kha c th truy cp phn t t collection. Count Tr li s phn t trong collection. Item Ly ra mt phn t t collection hoc bng ch s hoc bng kha ca n. Remove Xa phn t khi collection hoc bng ch s hoc bng kha ca n.

Lng Trn Hy Hin

VBA

15

Dim colStates As New Collection colStates.Add "New York", "NY" colStates.Add "Michigan", "MI"

Ging nh mng, cc phn t ca collection c th c duyt qua bng vng lp For Each...Next, v ging nh mng, chng c th c truy cp bng ch s, mc du cn di ca i tng collection lun l 1 v khng th t li qua code. Khc bit so vi mng l collection d truy cp v bo dng: Phn t mi c th chn vo trc hay sau phn t c trn c s ch s hay kha. Phn t c th c ly ra bng ch s hay kha. Phn t c th c xa da trn ch s hay kha. Tuy nhin xa nhiu phn t da trn ch s phi theo th t ngc v collection nh ch s li sau mi ln xa.

Truyn tham bin


VB cho php truyn bin gia cc th tc v component theo hai cch. Bn trong nh ngha hm hay th tc, chng ta dng hoc ByRef hoc ByVal cho mi bin trong danh sch tham i. ByRef y l phng thc mc nh truyn bin gia cc th tc trong VB, ngha l nu khng ch nh r ByVal hay ByRef, VB xem nh ByRef. ByRef ngha l bin thuyn qua tham chiu, ni cch khc ch c tham chiu n bin gc c truyn cho th tc c gi ch khng phi l bn sao ca bin. Hu qu l bin c th b thay i t bn trong th tc c gi.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Private Sub Command1_Click() Dim blnCancel As Boolean Dim lReturn As Long lReturn = GetValue(blnCancel) If blnCancel Then Exit Sub Else MsgBox lReturn End If End Sub Private Function GetValue(ByRef Cancel As Boolean) As Long Dim sResponse As String Dim iResponse As Integer Cancel = False sResponse = InputBox(Prompt:="Enter a value", _ Title:="Input Required", Default:=0) 'an inputbox returns a zero length string if _ the Cancel button was clicked If sResponse = "" Then Cancel = True Else If IsNumeric(sResponse) Then GetValue = CLng(sResponse) End If End If End Function

ByVal Dng t kha ByVal truyn bin bng tr, th tc c gi nhn bn sao ca bin. S thay i ca bi bn trong th tc khng nh hng n bin gc. 16

Lng Trn Hy Hin

VBA

ByRef v ByVal Khi truyn bin gia cc th tc trong cng project hay gia cc phng thc ca ActiveX component, ByRef nhanh hn ByVal nhiu. Tuy nhin khi truyn bin cho cc phng thc trong out-of-process server, ByVal nhanh hn v cc th tc trong cc process khc nhau khng th chia s b nh. Tham bin ty chn T kha Optional c th dng trong danh sch tham bin khi khai bo mt th tc ch rng tham bin c th khng cn c truyn. Mt hn ch l tt c tham i i sau tham i option u tin cng phi l option. kim tra xem tham bin option kiu variant c c truyn cho th tc hay khng, dng hm IsMissing. Cc kiu d liu khc s c tr mc nh khi n khng c truyn nh tham bin. Tuy nhin iu ny c th gy nhm ln. Tham bin option kiu s nguyn khng c truyn th trong th tc n s c tr 0, ging nh khi n c truyn bng tr 0! ParamArray T kha ParamArray (vit tt ca Parameter Array) cho php chng ta chp nhn mt s ty tham bin. ParamArray phi l tham bin cui cng ttrong danh sch v khng c dng trong cng danh sch tham bin option. ParamArray l mng variant ty chn. Ngha l mng c th rng hoc cha mt s ty cc phn t kiu variant.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Private Sub cmdCallDoStuff_Click() Dim blnOK As Boolean blnOK = DoStuff("Wednesday", 1234, _ CDate("04/12/1999"), 123.444) End Sub Private Sub cmdCallDoOtherStuff_Click() Dim blnOK As Boolean Dim oTest As testEXE.txtClass Set oTest = New testEXE.txtClass blnOK = DoStuff(123, 9999999.99, "Hello World", oTest) Set oTest = Nothing End Sub Private Function DoStuff(ParamArray anyArgs()) As Boolean Dim i As Integer For i = 0 To UBound(anyArgs) MsgBox anyArgs(i) & vbCrLf & TypeName(anyArgs(i)) Next i End Function

Hng ni ti Cng vi vic cho php nh ngha hng bng t kha Const, VBA c mt s hng c nh ngha sn. Th d, thay v vit
If myObject.ForeColor = &hFFFF Then

Ta c th vit:
If myObject.ForeColor = vbYellow Then

C th tm thng tin v hng nh ngha sn trong VB object browser.

Lng Trn Hy Hin

VBA

17

CHNG II.
Cu trc Pht biu GoTo Cu trc If Then Select Case Vng lp For Next Vng lp Do While Vng lp Do Until

Cc Pht biu v hm chun trong VBA


Mc ch Nhy n mt pht biu c th Thc hin mt iu g nu iu g ng Thc hin mt vi iu, tu thuc vo mt vi gi tr Thc hin mt s pht biu vi s ln c th. Thc hin iu g cho trong khi iu kin no vn ng. Thc hin iu g cho ti khi iu kin no ng

I. CC PHT BIU IU KHIN


a. Cu trc chn la IF: IF < Biu thc Logic iu kin> THEN Khi iu kin ng Ni dng cc cu lnh cn thc hin ELSE Khi iu kin sai Ni dng cc cu lnh cn thc hin END IF Trong cu lnh khng nht thit phi s dng ELSE, c th b qua n ty vo mc ch Mt s v d:
Sub Hello() If ThoiGian<0.5 Then MsgBox "Cho bu i sng" End Sub

Sub Hello() If ThoiGian < 0.5 Then MsgBox "Cho bu i sng" If ThoiGian >= 0.5 Then MsgBox "Cho bu i chi u" End Sub

Cc bn cng c th kt hp v d trn nh sau:


Sub Hello() If ThoiGian<12 Then MsgBox "Cho bu i sng" Else _ MsgBox Cho bu i chi u End Sub

Bn ch l trong v d trn pht biu If-Then-Else trn cng mt dng. Cc bn cng c th vit li nh sau:
Sub Hello() If ThoiGian<12 Then MsgBox "Cho bu i sng" Cc b n c th c nhi u cu l nh Else MsgBox Cho bu i chi u Cc b n c th c nhi u cu l nh End If End Sub

y y

b. Cu trc SELECT CASE : SELECT CASE <Bin hay mt biu thc> CASE <gi tr nht ca bin hay ca 1 biu thc>

Lng Trn Hy Hin

VBA

18

CASE <gi tr hai ca bin hay ca 1 biu thc> CASE <gi tr n ca bin hay ca 1 biu thc> CASE ELSE Khi tt c cc gi tr trn u khng ng Ni dung cc lnh cn thc hin END SELECT Tng t nh IF trong cu lnh khng nht thit phi s dng CASE ELSE, c th b qua n ty vo mc ch. V d dng cu trc Select-Case
Sub ShowDiscount3() Dim Quantity As Integer Dim Discount As Double Quantity = InputBox("Enter Quantity: ") Select Case Quantity Case 0 to 24 Discount=0.1 Case 25 To 49 Discount=0.15 Case 50 To 74 Discount=0.2 Case Is >=75 Discount=0.25 End Select MsgBox "Discount: " & Discount End Sub

Trong v d trn chng ta s xt bin Quantity. Trong trng hp c gi tr t 0 n 24 th ta cho Discount=0.1, t 25 n 49 ta cho gi tr Discount =0.15, t 50 n 74 ta cho gi tr Discount=0.2, nu trn hay bng 75 ta cho gi tr Discount=0.25.

II. CC CU TRC LP :
a. Cu trc DO WHILE ... LOOP : DO WHILE <Biu thc iu kin> Cc cu lnh mun thc thi biu thc iu kin cn ng LOOP Quay v DO WHILE kim tra biu thc iu kin Khi VB thc hin vng lp ny, u tin s kim tra biu thc iu kin. Nu Sai, n s dng li vng lp ngay v thc hin cu lnh k tip cn nu ng th thc hin cc lnh bn trong. Vy cu trc DO WHILE LOOP thc hin cc cu lnh bn trong n khi iu kin ng. b. Cu trc DO LOOP WHILE : DO Cc cu lnh thc thi LOOP WHILE <Biu thc iu kin> Quay v DO nu iu kin ng Khi VB thc hin vng lp ny, u tin s thc hin khi lnh bn trong n ngai. Sau khi thc hin n s kim tra iu kin. Nu ng s quay li cn sai th dng vng lp. Xt hai v d sau:
Sub DoWhileDemo()

Lng Trn Hy Hin

VBA

19

Do While ActiveCell.Value <> Empty ActiveCell.Value = ActiveCell.Value * 2 ActiveCell.Offset(1, 0).Select Loop End Sub Sub DoLoopWhileDemo() Do ActiveCell.Value = ActiveCell.Value * 2 ActiveCell.Offset(1, 0).Select Loop While ActiveCell.Value <> Empty End Sub

Do-While loop bao gi cng thc hin kim tra iu kin trc khi thc hin cc pht biu bn trong vng lp. Do-Loop While ngc li thc hin kim tra iu kin sau khi thc hin cc pht biu bn trong vng lp. c. Cu trc DO LOOP UNTIL : DO Cc cu lnh thc thi LOOP UNTIL <Biu thc iu kin> Quay v DO nu iu kin sai Ging nh DO LOOP WHILE nhng n s thot khi vng lp khi iu kin ng Vng lp Do-Until c cu trc gn ging vi cu trc Do-While. Nhng Do-Until loop, s thc hin cho ti khi iu kin ng. Cc bn hy xem hai v d sau y, cc bn c nhn xt g?
Sub DoUntilDemo() Do Until IsEmpty(ActiveCell.Value) ActiveCell.Value = ActiveCell.Value * 2 ActiveCell.Offset(1, 0).Select Loop End Sub Sub DoLoopUntilDemo() Do ActiveCell.Value = ActiveCell.Value * 2 ActiveCell.Offset(1, 0).Select Loop Until IsEmpty(ActiveCell.Value) End Sub

d. Cu trc FOR NEXT FOR <Bin = Gi tr u> TO <Gi tr cui> [STEP khong tng] Phn cc lnh thc thi khi bin cha t gi tr cui NEXT Bin (Phn Step c th c hoc khng, VB ngm hiu l +1) Cu trc ny lp vi s ln bit trc, lp t Gi tr u n gi tr cui (gi tr u c th ln hn gi tr cui nu step <0) V d v vng lp For-next:
Sub FillRange() Dim Count As Integer For Count = 1 To 100 ActiveCell.Offset(Count - 1, 0) = Rnd 'Rnd hm tr v m t s ng u nhin c a single Next Count End Sub

Lng Trn Hy Hin

VBA

20

Trong v d trn vng lp s c thc hin t Count=1 n Count=100. Vng lp s in mt gi tr ngu nhin (hm Rnd) vo cc so vi hin ti bng cch dng phng thc Offset. Trong v d ny bc (step) vi gi tr mc nh l 1. Tc l count bt u bng 1 v sau gi tr count s l 2,3,4,5... cho ti khi 100.
Sub FillRange() Dim Count As Integer For Count = 1 To 100 Step 2 ActiveCell.Offset(Count - 1, 0) = Rnd 'Rnd hm tr v m t s ng u nhin c a single Next Count End Sub

Cng tng t nh v d FillRange u nhng c a bc thc hin vo. Tc l vng lp bt u bng 1, cc gi tr sau ln lt l 3,5,7,... v gi tr cui cng l 99. Gi tr bc (step) nh ngha bin m s c tng nh th no. Vy v d v bad loop trn bn c th sa li nh sau:
Sub BadLoop() Dim StartVal As Integer Dim NumToFill As Long Dim CellCount As Long StartVal = CInt(InputBox("Xin nh p vo gi tr b t u: ")) NumToFill = CInt(InputBox("i n bao nhiu ? ")) ActiveCell = StartVal For CellCount = 1 To NumToFill ActiveCell.Offset(CellCount-1, 0) = StartVal + CellCount - 1 Next CellCount End Sub

Ch , vng lp Next-For c th lng vo nhau. Cc bn hy xem v d sau


Sub FillRange2() Dim Col As Integer Dim Row As Long For Col = 1 To 5 For Row = 1 To 12 Cells(Row, Col) = Rnd Next Row Next Col End Sub

E. Cu trc FOR EACH Cu trc vng lp nh sau:


For Each element In collection [statements] (cc pht bi u) [Exit For] (thot kh i vng l p For) [statements] (cc pht bi u) Next [element]

Xem v d sau:
Sub DeleteRow1() Dim WkSht As Worksheet For Each WkSht In ActiveWorkbook.Worksheets WkSht.Rows(1).Delete Next WkSht End Sub

Trong v d ny bin WkSht l bin i tng i din cho mi worksheet trong ActiveWorkbook. V d sau s qut qua tt c cc Cell trong mt Range.

Lng Trn Hy Hin

VBA

21

Sub ChangeSign() Dim Cell As Range For Each Cell In Range("A1:E50") If isnumberic(Cell.Value) Then Cell.Value = Cell.Value * (-1) End If Next Cell End Sub

CHNG III.

MT S LNH THNG DNG

1 .EXIT FOR Cu lnh : EXIT FOR Lng vo trong vng lp For khi mun dng li vng lp bt c lc no. 2 .EXIT DO Cu lnh : EXIT DO Lng vo trong vng lp c cu trc DO khi mun dng li vng lp bt c lc no. 3 .EXIT SUB Cu lnh : EXIT SUB Thot khi th tc m bt c lc no m khng cn thc hin cc lnh bnh trong n. 4 .END Chm dt chng trnh ngay, tt c cc ca s chng trnh u ng li khi bn thc hin thao tc ny. 5. Beep Pht ra ting ku Beep 6. Lnh Date : Cho php bn t li ngy h thng, hay ly ngy h thng C php : DATE = <ngy bn t> VD: Date = #June 12, 2000# 7. TIME Cho php t li gi h thng, hay ly gi h thng C php : TIME = <Gi bn t> VD: Time = # 5 : 12 : 45 PM # 8.LOAD Np 1 form (dng n m 1 Form) C php : LOAD <Tn Form> lm xut hin hoc n i s dng phng thc SHOW, v d form1.Show hay form.Hide 9. Lnh ChDrive Dng i a lm vic C php : ChDrive <Tn a :> 10. MkDir Dng to mt th mc mi trn a Lng Trn Hy Hin VBA 22

C Php : MkDir <ng dn> V d : MkDir D:\ChuyendeVBA 11. Lnh ChDir Lnh ny dng thay i th mc lm vic ti a ang lm vic C php : ChDir <ng dn th mc> 12. Lnh RmDir : Dng xa 1 th mc rng. C php : RmDir <ng dn th mc> 13. Lnh KILL Xa 1 hay nhiu tp tin trn a C php : KILL <ng dn n tp tin> V d : Kill D:\baitapVBA.txt Kill D:\*.txt 14. Lnh NAME : Dng i tn tp tin C php : NAME <ng dn tp tin cn i tn> AS <ng dn v tn tp mi> V d : NAME C:\BTAP.txt AS C:\BAITAPVBA.txt 15. Lnh AppActive Dng kch hot mt ca s ca mt chng trinhg ang chy trn Windows C php : AppActive title [Wait] Wait : Nu l False th chng trnh s kch hot ngay khi thc hin lnh gi ny (VB ngm hiu l False). V d : AppActive Microsoft Word 16. CurDir (Drive) ' tr v mt chui vi tn y ca a hin hnh nu tham s Drive trng ( ) VD: CurDir ( ) ---> tn a hin hnh CurDir ( "D") ---> tn y "D:\" CurDir ("X") ---> s bo li nu h thng khng c ti th X ny 17. Dir (PathName, Attributes) ' tm kim tp tin vi ng dn t ti tham s 1. Tham s 2(Attributs) ty chn chuyn bit thuc tnh tm kim. Mc nh l vbNormal VD: tmp = Dir ("C:\boot.ini") ---> tmp = "" tmp = Dir ("C:\boot.ini", vbHidden) ---> tmp = "boot.ini" 18. FileCopy (Source as String, Destination as String) ' sao chp tp tin t ng dn ngun (Source) n ng dn khc (Destination) VD: Filecopy "C:\Config.sys", "D:\Config.sys" 19. Filelen (PathNam As String) As Long ' tr v kch thc ca tp tin

Lng Trn Hy Hin

VBA

23

20. FileDateTime (PathName as string) ' tr v ngy thng v thi gian tp tin c to ra hoc c chnh sa ln gn nht. VD: Msgbox FileDateTime ("C:\Config.sys") 21. GetAttr (PathName as String) as Integer ' tr v mt s nguyn l tr thuc tnh ca File Cc hng thuc tnh gm: vbNormal = 0 vbReadOnly = 1 vbHiden = 2 vbSystem = 4 vbVolume = 8 vbDirectory = 16 vbArchive = 32 VD: GetAttr "C:\boot.ini" = 35 (file Boot.ini mang cc thuc tnh sau: ReadOnly(1) + Hiden(2) + Archive(32)) 22. SetAttr (PathName as String, Attributes as vbFileAttribute) ' Xc lp thng tin thuc tnh ca File. S dng cc hng thuc tnh hoc cc gi tr bng trn cho tham s Attributes VD: SetAttr "C:\Boot.ini, 0" ---> xc lp file boot.ini ch mang mt thuc tnh l Normal SetAttr "C:\Boot.ini,3" ---> xc lp boot.ini mang thuc tnh ch c v n. 23. FreeFile ' tr v mt s integer l ch s (ID) HDH theo di v qun l cc file ang m (Open). Dng mt bin nguyn lu gi tr ny dng cho cc cuc gi lnh Open (file). Khi ta khng cn quan tm n cc ch s(ID) ny na. FreeFile s theo di v cung cp cho ta cc ch s(ID) cha dng. VD: Dim Filenum# FileNum = FreeFile Open [PathName] For Output As #Filenum 24. Open [PathName as String] For [Mode] As [ID File] ' Mi khi thy lnh Open, VB s sn sng cho cc thao tc c v ghi ln File c cung cp tham s [PathName]. C nm ch m tp tin c t tham s [Mode], v [ID File] d nhin l ch s ca tp tin ang m. Cc dng thc c bn ca lnh Open: Open [Pathname] For Input As Filenum ' m File v ch c c thng tin, khng ghi ln c. Open [PathName] For Output As Filenum ' m File xut thng tin. Khi c m theo dng ny mi thng tin c trn File s b mt. Open [PathName] For Append As Filenum ' m File c v ghi tip ln c. Open [PathName] For Random As Filenum ' m v truy cp ngu nhin cc bn ghi v cc trng trn File (phi bit c cu trc ca cc bn ghi) Open [PathName] For Binary As Filenum ' c ghi theo Byte. y l dng tng qut v linh hot nht.

Lng Trn Hy Hin

VBA

24

25. Input [Number, #Filenum] ' c ni dung File vi s lng xc nh tham s Number VD: Str = Input (10, #Filenum) ' c 10 k t vo bin Str. Dng khc ca Input: Input [#Filenum, Str] ' y bin Str thng dng Variant Line Input [#FileNum, Str] ' c thng tin theo tng dng vo bin Str. Thng kt hp vi hm EOF ly ht thng tin 26. EOF (Filenum) ' tr v v tr chm dt ca File khi ang m VD: Do While Not EOF (Filenum) ' lp nu khng phi end of file Line Input #Filenum, Str ' c tng dng vo bin Str Loop 27. LOF (Filenum) ' tr v kch thc ca File khi ang m. VD: Str = Input (LOF(Filenum), #Filenum) ' s ly ht ni dung ca File (khng nn s dng vi File c kch thc vi Mb s b li "out of memory") 28. Write [#Filenum, Expression] ' ghi ln File VD: Write #FileNum, "12345" ---> "12345" Write #Filenum, 12345 --->12345 29. Print [#Filenum, Expression] ' lm vic chnh xc nh khi Print ln Form VD: Print #Filenum, 123; 456 ---> 123 456 30. Get [#Filenum, position, ByteArray] ' ly thng tin t tp tin c m theo Binary ti v tr xc nh bi Position v lu vo ByteArray. S byte ly ra ty thuc vo kch thc ca mng ByteArray. Mi khi ly ra 1 byte con tr tp tin t ng chuyn ti v tr byte k tip. VD: Dim Str as String * 4 Get #Filenum, 3, Str ---> ly 4 byte bt u t byte th 3 lu vo Str. (nu c cu lnh Get tip theo m tham s Position b trng, th v tr bt u ly ra s l byte th 8) 31. Loc (#Filenum) ' Tr v v tr byte c/ghi hin ti trong tp tin ang m. 32. Seek [#Filenum, Position] ' dch chuyn con tr tp tin n v tr qui nh bi tham s Position VD: Seek #Filenum, 3 Get #Filenum, , Str ---> v tr ly ra s bt u ti byte th 3 33. Seek (#Filenum) ' tr v v tr hin ti ca con tr tp tin 34. Put [#Filenum, Position, ByteArray] ' t ni dung ca mng ByteArray vo v tr

Lng Trn Hy Hin

VBA

25

byte th[Position]. Lnh Put se ghi ln mi th v ch dng cho truy cp Random v Binary VD: Put #filenum, , Str ---> s ghi 4 byte bt u v tr byte th 1 35. Reset ' ng tt c cc tp tin c m bng lnh Open 1. Option Explicit 2. Private Sub Form_Load() 3. Dim FileNumber 4. For FileNumber = 1 To 5 5. Open "TEST" & FileNumber For Output As #FileNumber ' M file 6. Write #FileNumber, "Hello World" ' Ghi d li u vo file. Next FileNumber 7. 8. Reset ' ng file v c p nh t d li u vo file 9. End Sub 36. Close (#Filenum) ' ng tp tin c m bng lnh Open. 37. Lock [#Filenum, Expression] ' kho tp tin khng cho ngi khc truy cp khi App ca bn ang m. Tham s th hai chuyn bit v tr kho. Nu b qua tham s ty chn ny, lnh Lock s kho ton b tp tin. i vi cc tp tin m theo truy cp tun t lnh Lock s kho ton b tp tin bt k khong do tham s 2 qui nh. VD: Lock #Filenum, 1 To 100 ---> s kho 100 byte t byte th 1 38. Unlock [#Filenum, Expression] ' m kho tp tin, tham s s dng nh Lock. Ch : cn bo m loi b tt c cc kho vi cu lnh Unlock tng ng trc khi ng tp tin hoc thot khi chng trnh(cc i s phi tng hp chnh xc). Nu khng tp tin c th b ri lon. 39. Open: iu khin s chia s tp tin vo thi gian bn m tp tin. C th dng cu lnh tng qut nht ca lnh Open C php: Open PathName [For mode] [Access access] [Lock] As #Filenum [Len=reclength] ' trong : PathName l chui cha ng dn n tp tin Mode l t kho chuyn bit ch tp tin nh Input, Append, Random... Access l t kho chuyn bit cc thao tc c php trn tp tin m. C ba thao tc: Read, Write, ReadWrite VD:Open PathName For Binary Access Read As #Filenum --> cho php bn c nhng khng cho php thc hin cc thay i i vi tp tin. Lock l t kho chuyn bit cc thao tc c php trn tp tin m i vi cc qu trnh khc. Khc vi Access : iu khin cch thc chng trnh bn lm vic vi tp tin. Vi t kho Lock c bn kh nng:

Lng Trn Hy Hin

VBA

26

1- [Shared] cc qu trnh khc c th c v vit vo tp tin mc d chng trnh ca bn ang lm vic vi tp tin . 2- [LockRead] chng trnh khc khng th m c tp tin, trong khi chng trnh ca bn ang lm vic vi tp tin . 3- [LockWrite] khng th m vit ln tp tin trong khi chng trnh bn ang lm vic vi tp tin . 4- [LockReadWrite] chng trnh khc khng th lm vic vi tp tin trong khi chng trnh bn ang lm vic vi tp tin . VD: Open PathName For binary Access Lock Read #Filenum ---> s ngn chn cc chng trnh khc s dng tp tin khi bn ang lm vic vi tp tin . Reclength y l s nguyn t 1 n 32767. i cc tp tin m ch Random s ny a ra chiu di bn ghi. i vi cc tp tin chui th t, gi tr ny l s lng cc k t c m trong h iu hnh.

CHNG IV.

MT S HM THNG DNG

Tt c cc hm u c dng : Tn hm (cc i s) 1. Hm Abs (Number) Tr v mt gi tr l gi tr tuyt i ca Number 2. Hm Sin (Number as Double) Tr v mt s thc l Sin ca mt gc (tnh bng n v Radian) 3. Hm Cos (Number as Double) Tr v mt s thc l Cos ca mt gc (tnh bng n v Radian) 4. Hm Tan (Number as Double) Tr v mt s thc l Tan ca mt gc (tnh bng n v Radian) 5. Hm Atn (Number as Double) Tr v mt s thc l ArcTan ca mt gc (tnh bng n v Radian) 6. Hm Int (Number) : Tr v phn nguyn ca Number nu n l s dng, cn nu s m th c gi tr nh hn phn nguyn 1 n v 7. Hm Fix (Number) Tr v phn nguyn ca Number nu n l s dng, cn nu s m th c gi tr ln hn phn nguyn 1 n v 8. Hm Sgn (Number) Tr v mt s nguyn Nu Number > 0 s tr v 1 Nu Number < 0 s tr v -1 Nu Number = 0 s tr v 0 9. Hm Sqr (Number)

Lng Trn Hy Hin

VBA

27

Tr v cn bc hai ca Number 10. Hm Exp (x) a ra e ly tha x, e l c s Logarit t nhin. Hm tr v mt s thc 11. Hm Log (x) a ra Logarit t nhin ca x 12. Hm Round (Expression [s]) Hm ny s lm trn s [,s] : s lm trn qua chm thp phn. VD : Round(9.7) = 10 Round (9.785 , 2) = 9.79 13. Rnd (Number) To 1 s ngu nhin l 1 s thc t 0 n Number, vi Number l 1 s nguyn. 14. Hm Now : Hm ny tr v ngy thng nm v thi gian hin hnh. 15. Hm Day (NgayThangNam) Tr v ngy trong NgayThangNam m bn ghi. Ta thng s dng Day(Now) ly ngy h thng 16. Hm Month (NgayThangNam) Tr v Thng trong NgayThangNam m bn ghi. Ta thng s dng Month(Now) ly thng h thng 17. Hm Year (NgayThangNam) Tr v Nm trong NgayThangNam m bn ghi. Ta thng s dng Year(Now) ly nm h thng 18. Hm Weekday (NgayThangNam) Tr v ngy th my trong tun ng vi NgayThangNam m bn nhp vo Ta c th s dng Weekday(Now) ly th ca ngy hin ti 19. Hm Hour (ThoiGian) Tr v gi ng vi ThoiGian m bn nhp vo Ta c th s dng Hour(Now) ly gi ca h thng hin ti 20. Hm Minute (ThoiGian) Tr v pht ng vi ThoiGian m bn nhp vo Ta c th s dng Minute(Now) ly pht ca h thng hin ti 21. Hm Second (ThoiGian) Tr v giy ng vi ThoiGian m bn nhp vo Ta c th s dng Second(Now) ly giy ca h thng hin ti 22. Hm Replace(chuoi, chuoicantim, chuoithaythe, Vitrithaythe, solanthaythe) Hm ny s tr v mt chui mi theo ngha nh trn. V d: 28

Lng Trn Hy Hin

VBA

Replace(2322 , 2 , 5 , 1 , 2) = 5352 Replace(2322 , 2 , 5 , 2 , 2) = 355 23. Hm Val(String) Hm ny c tc dng i 1 chui thnh 1 s, nu chui ny c k t u l k t th s tr v 0. 24. Hm Str (Number) Ngc li Hm Val, hm ny c tc dng i 1 s thnh 1 chui. 25 Hm QBColor (color) S cho bn mu ca mt i tng no , th hin t 0 n 15. V d : QBColor (0) s cho mu en, QBColor (4) s cho mu , 26. Hm RGB (Red, Green, Blue) Chn mt mu theo mt t l no ngoi cc mu t 0 15. N s l s kt hp ca 3 mu. 27. Hm Asc (String) S tr v mt con s, con s ny l m ASCII ca k t String, nu l mt chui gm nhiu k t th k t s ly k t u tin. 27b. AscW (string) ' Chuyn k t thnh m Ascii (h tr Unicode) VD: AscW() = 7879 = H1EC7 28. Hm Chr(CharCode) Hm tr v mt k t tng ng vi mt m ASCII no . ChrCode l m ASCII ca k t m bn cn bit 28b.ChrW(charcode) ' Chuyn m Ascii thnh k t (H tr Unicode) VD: ChrW(&H1EC7) = 29. Hm Len (String) Tr v d di ca chui String, k c khong trng 30. Hm Ltrim (String) Hm tr v chui mi sau khi ct b cc khong trng bn tri chui String 31. Hm Rtrim (String) Hm tr v chui mi sau khi ct b cc khong trng bn phi chui String 32. Hm Trim (String) Hm tr v chui mi sau khi ct b cc khong trng bn tri v bn phi chui String 33. Hm Left (String,n) Tr v mt chui k t (k c khong trng) c ct t bn tri ca chui String, s k t ct ly l n. 34. Hm Right (String,n) Tr v mt chui k t (k c khong trng) c ct t bn phi ca chui String, s k t ct ly l n.

Lng Trn Hy Hin

VBA

29

35. Hm MID (String, Start, [Length]) Tr v mt chui, chui ny c ly t chui String v bt u t Start v ly Length k t. Nu Length b trng hoc ln hn di String th coi nh ly t v tr Start cho n hn. 36. Hm Space (Number) Hm tr v mt chui gm Number khong trng 37. Hm String (Number, Character) Tr v mt chui gm Number k t ging nhau v ging Character 38. Hm InStr (Start, String1, String2, Compare) Hm ny dng tm mt chui con c nm trong chui m hay khng, nu tm thy th s cho bit nm v tr th my ca chui m. Start : Tm bt u t v tr Start trong chui m, nu khng ghi th tm v tr u tin String1: Chui m String2 : Chui con Compare : c cc gi tr 0, 1, 2 + 0 : so snh chnh xc tng k t, y l gi tr mc nhin + 1 : So snh khng phn bit ch hoa v ch thng + 2 : ch dng trong khi lp trnh cho MS Access * Khi dng n i s Compare th i s Start khng c b trng 39. Hm Ucase (String) Tr v my chui k t vit hoa ca chui String 40. Hm Lcase (String) Tr v mt chui k t vit thng ca chui String 41. Hm Format (Value, format) Hm ny dng nh dng theo ca bn Value : Gi tr cn nh dng Format : Cc k hiu nh dng. 0 nu c gi tr th th hin gi tr , nu khng c th ghi s 0. Nu s 0 t hn th gi tr vn c ghi y # : Th hin cc gi tr tng ng, nu k t s v tr khng c th b qua, nu # t hn th gi tr vn c ghi y . $ : Du $ bn c th dng chung vi s 0 hay # . : Du ngn cch phn thp phn , : Du ngn cch phn nghn % : Khi c k hiu phn trm ny trong i s Format, con s s t thm % vo sau dd/mm/yyyy : nh dng Ngy Thng Nm, vi i s Value = Now hh:mm:ss AM/PM : nh dng Gi pht giy theo dng, vi i s Value = Now hh:mm:ss AM/PM dd/mm/yyyy : nh dng Gi pht giy va nh dng ngy thng nm theo dng, vi i s Value = Now hh:mm : nh dng ch c gi v pht vi Value=Now. 30

Lng Trn Hy Hin

VBA

V d : Format(12345.5 , 0000000.00) = 012345.50 Format(12345.5, ######.##) = 12345.5 Format(12345.5, $###.##) = $12345.5 Format(0.34, ###%) = 34% 42. Hm IIF(<iu kin>, Truepart, Falsepart) Hm ny s tr v gi tr true nu iu kin ng v cho False khi iu kin sai. Hm ny l cch vit ngn hn ca IFEND IF V d txt1.text = IFF(x<500,Lng bn cn thp,Bn c lng cao) 43. InStr (start, string1, string2, compare) ' tr v v tr bt u ca mt chui con cn tm trong mt chui m. tham s 1(start) xc nh v tr bt u tm, tham s 2(string1) l chui m, tham s 3(string2) l chui cn tm, tham s 4(compare) mc nh l so snh nhy k t. Khi b qua tham s th nht th v tr bt u tm mc nh l 1 VD: pos = InStr ("caulacboVB", "VB") ---> pos = 9 44. InStrRev (StringCheck as string, StringMatch as string, Start as Long, Compare) ' chc nng nh InStr nhng InStrRev hot ng ngc li t cui chui v c php khc hn. C hai hm u l hm tm kim nhy k t nn cn ch ch thng v ch HOA. InStrRev thng kt hp vi Mid tch mt tn File khi ng dn v tn m rng. VD: PathFile = "C:\temp\001.tmp" Pos = InStrRev (pathFile, "\") PathFile = Mid (PathFile, Pos + 1) Pos = InStrRev (PathFile, ".") PathFile = Mid (PathFile, 1, Pos - 1) --->PathFile = "001" 45. StrComp (String1, String2, Compare) ' dng so snh 2 chui. Tr tr v: (String1 < String2) = -1; (String1 = String2) = 0; (String1 > String2) = 1 46. Like ' so snh 2 chui cho php s dng bit ng ( nh dng k t i din trong Dos) tr tr v = True nu tng hp VD: "abcd" Like "*bcd" = True "abcd" Like "a?cd" = True "a1cd" Like "a#cd" = True Ch hm Like mc nh cng l hm nhy k t, theo thit lp Option Compare form hoc module 47. Join (SourceArray, Delimiter) ' to chui mi t mt mng chui (SourceArray) vi cc phn t c phn nh bi tham s Delimiter VD: Arr (0) = "a" Arr (1) = "b" Arr (2)= "c" Print Join (Arr, " ") = "a b c" 48. Split (Expression as String, Delimiter, Count, Compare) ' to mng chui t mt 31

Lng Trn Hy Hin

VBA

chui (Expression). t tham s Delimiter chuyn bit ch ngt, nu b wa tham s ny mc nh Split s tch ti cc khong trng ca chui. Tham s Count qui nh s ln tch. Ba tham s cui l ty chn VD: Dim str as string, Arr as Variant str = "Chuyen de VBA" Arr = Split (str) ' dng For duyt mng Arr s cho ra : Arr ( 0 ) = "Chuyen"; Arr ( 1 ) = "de"; Arr ( 2 ) = "VBA" Arr = Split (str, "e") ---> Arr (0) = "Chuy"; Arr (1) = "n d"; Arr (2) = "VBA" Arr = Split (str, " ", 2) ---> Arr (0) = "Chuyen"; Arr(1) = "de VBA" 49. Filter (sourcearray, match [, include [, compare]]) ' Lc mng sourcesrray vi gi tr lc l match ; include: Lc o (True hoc False) ; compare: ch r kiu d liu so snh trong qu trnh lc. Dng cho tham s compare vbUseCompareOption = 1 : Ch ty chn, VB s t ng la lai d liu thch hp vbBinaryCompare = 0 : So snh nh phn vbTextCompare = 1 : So snh chui vbDatabaseCompare = 2 : So snh d liu VD: Dim selNames() As String Dim Names(1 To 5) As String Names(1) = "A" Names(2) = "B" Names(3) = "C" Names(4) = "D" Names(5) = "E" selNames = Filter(Names, "A") ' Returns "A" selNames = Filter(Names, "B", False) 'Returns "A" , "C", "D", "E" 50. StrReverse(expression as String) ' o chui expression VD: StrReverse("1234567") ' Returns "7654321"

Lng Trn Hy Hin

VBA

32

You might also like