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

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_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

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

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

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

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.

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

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

Lng Trn Hy Hin

myArray() As Integer
Sub cmdButtonOne_OnClick
myArray(10,5)
Sub cmdButtonTwo_OnClick
myArray(4,10,2)

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.

Lng Trn Hy Hin

VBA

16

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

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 mt s ngu nhin ca 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 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

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 liu vo file.
Next FileNumber
7.
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

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:

Lng Trn Hy Hin

VBA

28

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.

Lng Trn Hy Hin

VBA

30

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

31

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