You are on page 1of 32

Lng Trn Hy Hin VBA

1
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. var1 = True
2. var2 = False
3. If myBool = False Then
4. myVar = 4
5. myBool = True
6. Else
7. myVar = 5
8. myBool = False
9. 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
2
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
3
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
Lng Trn Hy Hin VBA
4
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_bin)

Cc hm chuyn i c VBA h tr l:
CBool
Chuyn 0 thnh false, cc tr khc thnh true
CByte
Chuyn i tn_bin thnh kiu Byte. tn_bin 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_bin ngoi
khong , VBA bo li Overflow. Nu tn_bin l du chm ng, n c lm trn
thnh s nguyn gn nht trc khi chuyn i kiu.
CDec
Chuyn i tn_bin 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_bin 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_bin 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
5
CDbl
Chuyn i tn_bin 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_bin thnh kiu Integer.
CLng
Chuyn i tn_bin thnh kiu Long.
CSng
Chuyn i tn_bin thnh kiu Single.
CStr
Chuyn i tn_bin thnh kiu String. CStr chp nhn kiu d liu bt k.
CVar
Chuyn i tn_bin 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
6
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 bin l EMPTY
myVarOne = 9
myVarTwo=NULL Cho bin ny l NULL
myVarThree = myVarOne + myVarTwo Kt 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
7
VarType
C php ca VarType l:
VarType(tn_bin)
Bng sau y lit k cc tr c VarType tr v v cc hng VBA tng ng:

Value Data Subtype VBA Constant
0 Empty vbEmpty
1 Null vbNull
2 Integer vbInteger
3 Long Integer vbLong
4 Single vbSingle
5 Double vbDouble
6 Currency vbCurrency
7 Date vbDate
8 String vbString
9 OLE Automation Object vbObject
10 Error vbError
11 Boolean vbBoolean
12 Array of Variant vbVariant
13 Data access object vbDataObject
14 Decimal vbDecimal
17 Byte vbByte
36 User-defined Type vbUserDefinedType
8192 Array 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 Data Subtype
<object type> Actual type name of an object
Boolean Boolean value: True or False
Byte Byte value
Currency Currency value
Date Date or time value
Decimal Decimal (single-precision) value
Double Double-precision floating-point value
Empty Uninitialized
Error Error
Integer Integer value
Lng Trn Hy Hin VBA
8
Long Long integer value
Nothing Object variable that doesnt yet refer to an object instance
Null No valid data
Object Generic object
Single Single-precision floating-point value
String Character string value
Variant() Variant array
Unknown 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. Dim sString
2. Dim sPartString
3. sString = "ABCDEFGH"
4. sPartString = Mid(sString, 1, 2)

v phin bn chui

1. Dim sString As String
2. Dim sPartString As String
3. sString = "ABCDEFGH"
4. 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.
Lng Trn Hy Hin VBA
9
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
10
1. Dim i As Variant
2. i = Null
3. If i = Null Then
4. MsgBox "It's null" 'Sai
5. End If
6. If IsNull(i) Then
7. MsgBox "It's null" 'ng
8. 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
11
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. Option Explicit 'require variable declaration
2. ReDim sMyArray(0) As String 'create a 1-element dynamic array
3. Dim iIndex As Integer 'variable to track array index
4. iIndex = 0 'assign the first index number
5. Sub cmdButton1_OnClick
6. 'Store the user input in the array
7. sMyArray(intIndex) = txtText1.Text
8. 'increment the array counter by one
9. iIndex = iIndex + 1
10. 'increase the size of the array
11. ReDim Preserve sMyArray(iIndex)
12. txtText1.Text = "" 'Empty the text box again
13. 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
12
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. Private myArray() As Integer
2. Private Sub cmdButtonOne_OnClick
3. ReDim myArray(10,5)
4. End Sub
5. Private Sub cmdButtonTwo_OnClick
6. ReDim myArray(4,10,2)
7. End Sub
Lng Trn Hy Hin VBA
13
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. Private Type custOrders
2. OrderNo As Long
3. OrderDate As Long
4. 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
14
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
15
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
16
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. Private Sub Command1_Click()
2. Dim blnCancel As Boolean
3. Dim lReturn As Long
4. lReturn = GetValue(blnCancel)
5. If blnCancel Then
6. Exit Sub
7. Else
8. MsgBox lReturn
9. End If
10. End Sub
11. Private Function GetValue(ByRef Cancel As Boolean) As Long
12. Dim sResponse As String
13. Dim iResponse As Integer
14. Cancel = False
15. sResponse = InputBox(Prompt:="Enter a value", _
16. Title:="Input Required", Default:=0)
17. 'an inputbox returns a zero length string if _
18. the Cancel button was clicked
19. If sResponse = "" Then
20. Cancel = True
21. Else
22. If IsNumeric(sResponse) Then
23. GetValue = CLng(sResponse)
24. End If
25. End If
26. 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.
Lng Trn Hy Hin VBA
17
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. Private Sub cmdCallDoStuff_Click()
2. Dim blnOK As Boolean
3. blnOK = DoStuff("Wednesday", 1234, _
4. CDate("04/12/1999"), 123.444)
5. End Sub
6. Private Sub cmdCallDoOtherStuff_Click()
7. Dim blnOK As Boolean
8. Dim oTest As testEXE.txtClass
9. Set oTest = New testEXE.txtClass
10. blnOK = DoStuff(123, 9999999.99, "Hello World", oTest)
11. Set oTest = Nothing
12. End Sub
13. Private Function DoStuff(ParamArray anyArgs()) As Boolean
14. Dim i As Integer
15. For i = 0 To UBound(anyArgs)
16. MsgBox anyArgs(i) & vbCrLf & TypeName(anyArgs(i))
17. Next i
18. 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
18
CHNG II. Cc Pht biu v hm chun trong VBA
Cu trc Mc ch
Pht biu GoTo Nhy n mt pht biu c th
Cu trc If Then Thc hin mt iu g nu iu g ng
Select Case Thc hin mt vi iu, tu thuc vo mt vi gi tr
Vng lp For Next Thc hin mt s pht biu vi s ln c th.
Vng lp Do While Thc hin iu g cho trong khi iu kin no vn ng.
Vng lp Do Until 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 bui sng"
End Sub


Sub Hello()
If ThoiGian < 0.5 Then MsgBox "Cho bui sng"
If ThoiGian >= 0.5 Then MsgBox "Cho bui chiu"
End Sub
Cc bn cng c th kt hp v d trn nh sau:
Sub Hello()
If ThoiGian<12 Then MsgBox "Cho bui sng" Else _
MsgBox Cho bui chiu
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 bui sng"
Cc bn c th c nhiu cu lnh y
Else
MsgBox Cho bui chiu
Cc bn c th c nhiu cu lnh y
End If
End Sub


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
19
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
20
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 mt s ngu nhin ca single
Next Count
End Sub
Lng Trn Hy Hin VBA
21
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 mt s ngu nhin ca 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 nhp vo gi tr bt u: "))
NumToFill = CInt(InputBox("in 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 biu)
[Exit For] (thot khi vng lp For)
[statements] (cc pht biu)
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
22
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
23
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
24
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
25
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
26
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 liu vo file.
7. Next FileNumber
8. Reset ' ng file v cp nht d liu 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
27
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
28
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:
Lng Trn Hy Hin VBA
29
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
30

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.
Lng Trn Hy Hin VBA
31

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
Lng Trn Hy Hin VBA
32
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"

You might also like