
Ch ng B n - Vi t Codeươ ố ế
Trong ba ch ng đ u chúng ta đã h c qua ba b ph n chánh c a m t ch ng trình Visual Basicươ ầ ọ ộ ậ ủ ộ ươ
6.0. Đó là:
•Forms là cái n n hay khung đ ta xây d ng User Interface. ề ể ự
•Controls là nh ng viên g ch đ ta dùng xây d ng User Interface. ữ ạ ể ự
•Event procedures là code n m phía sau nh ng hình nh, nó là ch t keo dùng đ dán cácằ ữ ả ấ ể
Controls l i v i nhau đ t o thành ch ng trình áp d ng c a ta. ạ ớ ể ạ ươ ụ ủ
Nh ta đã th y, t t c các code đ c x lý (executed) khi có m t Event xãy ra. Thí d nh khi Userư ấ ấ ả ượ ử ộ ụ ư
click m t CommandButton (Event Click) hay type nút Tab đ di chuy n Cursor t Textbox n yộ ể ể ừ ầ
(Event Lostfocus) qua Textbox khác (Event GotFocus). Các nhóm code x lý là :ử
Private Sub Command1_Click()
...
End Sub
Private Sub Text1_LostFocus()
...
End Sub
và
Private Sub Text2_GotFocus()
...
End Sub
Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t đ ngậ ỗ ầ ộ ủ ộ ự ộ
generate cho ta cái v t hàng ỏ ừ Private Sub Control_Event() cho đ n ếEnd Sub đ chúng ta đi nể ề
nh ng hàng code c a mình vào chính gi a.ữ ủ ữ
Đi u khi n th t x lý các dòng code ề ể ứ ự ử
Gi d ta vi t m t ch ng trình Vb6 đ n gi n nh trong hình n y v i hai Textbox tên txtName,ả ụ ế ộ ươ ơ ả ư ầ ớ
txtAge và m t nút tên CmdEnter n m trong m t form tên Form1: ộ ằ ộ
Thông th ng các dòng code đ c x lý theo th t t trên xu ng d i. Thí d nh đ ki m xemườ ượ ử ứ ự ừ ố ướ ụ ư ể ể
các d ki n v a đ c cho vào các Textbox có t ng đ i h p lý hay không, khi User click nútữ ệ ừ ượ ươ ố ợ
CmdEnter, ta x lý Sub d i đây:ử ướ
Private Sub CmdEnter_Click()
' Make sure the Name field is not blank
If txtName.Text = "" Then
1

MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End Sub
Cái Sub nói trên có ch ữPrivate n m phía tr c, ý nói ch n i trong cùng m t form ch a Controlằ ướ ỉ ộ ộ ứ
CmdEnter (t c là Form1 trong tr ng h p n y) ta m i có th g i (dùng) Sub CmdEnter_Click().ứ ườ ợ ầ ớ ể ọ
Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAgeụ ố ấ ế ở
thì coi nh User đã click nút CmdEnter. Ta vi t nh sau: ư ế ư
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' swallow Key Enter to avoid side effect
CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form
End If
End Sub
Khi ta dùng câu CmdEnter_Click làm m t dòng code (còn g i là g i Sub CmdEnter_Click) thì coiộ ọ ọ
nh t ng đ ng v i nhét t t c 10 dòng codes gi a hai hàng ư ươ ươ ớ ấ ả ữ Private Sub CmdEnter_Click() và
End Sub t i ch câu CmdEnter_Click, nh vi t l i d i đây:ạ ỗ ư ế ạ ướ
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow Key Enter to avoid side effect
' Make sure the Name field is not blank
If txtName.Text = "" Then
MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End If
End Sub
Có m t cách nói khác là khi execution đi đ n hàng ộ ế CmdEnter_Click thì nó nh y vào ảPrivate Sub
CmdEnter_Click() đ execute cho đ n h t r i nh y tr l i hàng k ti p trong ể ế ế ồ ả ở ạ ế ế Private Sub
txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User khôngế
đánh gì vào Textbox txtName thì ch ng trình s display message "Please enter Name" r i ươ ẽ ồ Exit Sub.
Đây là cách nh y ngay ra kh i Sub ch không đ i ph i execute xu ng t i hàng chót.ả ỏ ớ ợ ả ố ớ
Dùng IF....THEN statement
2

Trong Private Sub CmdEnter_Click() trên ta th y có hai ch dùng ở ấ ỗ IF...THEN đ th xem m tể ử ộ
đi u ki n gì có đ c th a mãn không. N u đi u ki n là đúng v y, t c là ề ệ ượ ỏ ế ề ệ ậ ứ True thì ta th c hi nự ệ
nh ng gì đu c vi t t hàng ữ ợ ế ừ IF...THEN cho đ n hàng ếEND IF. Ng c l i, n u đi u ki n khôngượ ạ ế ề ệ
đúng thì execution nh y xu ng t i dòng code n m ngay d i dòng ả ố ớ ằ ướ END IF. T c là có khi executionứ
s đi ngang qua, có khi không đi ngang qua nh ng dòng code gi a câu ẽ ữ ở ữ IF...THEN và câu END IF.
Đi u ki n trong IF Statement là ph n n m gi a hai ch ề ệ ầ ằ ữ ữ IF và THEN. Nó đu c g i là ợ ọ Logical
Expression. Ta có:
txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string
và
NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number
Trong Logical Expression th nhì ta dùng Function IsNumeric đ đ c cho bi t r ng txtAge.text cóứ ể ượ ế ằ
ph i là m t con s hay không. Vì ta ch than phi n khi txtAge không ph i là m t con s nên ta ph iả ộ ố ỉ ề ả ộ ố ả
đ thêm ch NOT phía tru c. T c là khiể ữ ớ ứ
IsNumeric(txtAge.text) = False
thì
NOT IsNumeric(txtAge.text) = True
N u gi a ế ữ IF...THEN và END IF ch có m t dòng code b n có th nh p dòng code lên v iỉ ộ ạ ể ậ ớ
IF...THEN và không dùng END IF. T c là: ứ
If theColorYouLike = vbRed Then
MsgBox "You 're a lucky person!"
End If
is equivalent with
If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!"
M t Logical Expression có th đ n gi n (simple) nh trong các thí d trên hay r c r i h n n u taộ ể ơ ả ư ụ ắ ố ơ ế
ráp nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t ề ạ ớ ằ ữ ừ OR và AND. Khi hai
Logical Expression đ c ráp l i b ng ch ượ ạ ằ ữ OR (HAY) thì ch c n ít nh t m t trong hai Expression làỉ ầ ấ ộ
TRUE là Logical Expression t ng h p cũng là TRUE. Cái TRUE Table cho OR nh sau:ổ ợ ư
A B A OR B
FALSE FALSE FALSE
FALSE TRUE TRUE
TRUE FALSE TRUE
TRUE TRUE TRUE
Trong thí d d i đây n u m t ng i 25 tu i tr lên HAY có l i t c trên 30 ngàn đô la m t năm thìụ ướ ế ộ ườ ổ ở ợ ứ ộ
cho m n ti n đ c :ượ ề ượ
If (PersonAge >= 25) Or (PersonIncome >= 30000) Then
LendPersonMoney
End If
Đ ý cách dùng các d u ngo c đ n gi ng nh trong toán đ i s . Thông th ng h cái gì n m trongể ấ ặ ơ ố ư ạ ố ườ ể ằ
ngo c thì mình tính tr c. N u có nhi u l p d u ngo c thì tính theo th t t trong ra ngoài. Nhặ ướ ế ề ớ ấ ặ ứ ự ừ ư
trong bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem ồPersonIncome
3

>= 30000 xem là TRUE hay FALSE, tr c khi tính k t qu t ng h p, d a vào cái TRUE table choướ ế ả ổ ợ ự
OR.
Khi hai Logical Expression đ c ráp l i b ng ch ượ ạ ằ ữ AND (Và) thì ch khi nào c hai Expression đ uỉ ả ề
là TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND nh sau:ổ ợ ớ ư
A B A AND B
FALSE FALSE FALSE
FALSE TRUE FALSE
TRUE FALSE FALSE
TRUE TRUE TRUE
Trong thí d d i đây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm thìụ ướ ế ọ ổ ở ẹ ế ở ộ
đăng ký h c sinh m t đ i h c t :ọ ở ộ ạ ọ ư
If (StudentAge >= 18) And (ParentIncome >= 100000) Then
EnrollStudentAtPrivateUniversity
End If
M t Logical Expression có th t p h p c OR l n AND nh trong thí d d i đây n u h c sinh 18ộ ể ậ ợ ả ẫ ư ụ ướ ế ọ
tu i tr lên và cha m ki m 100 ngàn tr lên m t năm HAY h c sinh có Intelligent Quotient cao h nổ ở ẹ ế ở ộ ọ ơ
160 thì đăng ký h c sinh m t đ i h c t : ọ ở ộ ạ ọ ư
If ((StudentAge >= 18) And (ParentIncome >= 100000)) Or (StudentIQ > 160) Then
EnrollStudentAtPrivateUniversity
End If
Hai d u ngo c đ n n m bên ngoài c a:ấ ặ ơ ằ ủ
((StudentAge >= 18 ) And (ParentIncome >= 100000))
không c n thi t vì theo qui c, ta tính AND expression tr c khi tính OR expression, nh ng nóầ ế ướ ướ ư
giúp ta đ c d h n. ọ ễ ơ
Dùng IF....THEN..ELSE statement
Hãy xem thí d : ụ
If (StudentPassmark > 75) Then
' Part A
EnrollStudentAtPublicSchool
Else
' Part B
EnrollStudentAtPrivateSchool
End If
N u h c sinh đ u v i s đi m trên 75 thì cho h c tr ng công, N U KHÔNG thì ph i h c tr ngế ọ ậ ớ ố ể ọ ườ Ế ả ọ ườ
t . T c là n u ư ứ ế StudentPassmark > 75 là TRUE thì x lý ph n A, n u không thì x lý ph n B. Đ ýử ầ ế ử ầ ể
ph n A g m nh ng dòng code n m gi a dòng ầ ồ ữ ằ ữ If (StudentPassmark > 75) then và else. Còn ph n Bầ
g m nh ng dòng code n m gi a dòng ồ ữ ằ ữ else và end if.
Ta có th ráp ch ể ữ ELSE v i ch ớ ữ IF đ dùng nh trong thí d sau đây: ể ư ụ
4

<
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
Else
EnrollStudentAtPrivateSchool
End If
N u h c sinh đ u v i s đi m trên 75 thì cho h c tr ng công, N U t 55 đi m đ n 75 đi m thìế ọ ậ ớ ố ể ọ ườ Ế ừ ể ế ể
cho h c tr ng bán công, n u không (t c là đi m đ u d i 55) thì ph i h c tr ng t . ọ ườ ế ứ ể ậ ướ ả ọ ườ ư
N u t nh nh , không có tr ng t , ta không có quy t đ nh cho h c trò đ u d i 55 đi m h c ế ở ỉ ỏ ườ ư ế ị ọ ậ ướ ể ọ ở
đâu thì b ph n ỏ ầ ELSE trong thí d trên. Ph n ch ng trình tr thành: ụ ầ ươ ở
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
End If
Ta có th dùng ELSEIF nhi u l n nh sau: ể ề ầ ư
If (TheColorYouLike = vbRed) Then
MsgBox "You 're a lucky person"
ElseIf (TheColorYouLike = vbGreen) Then
MsgBox "You 're a hopeful person"
ElseIf (TheColorYouLike = vbBlue) Then
MsgBox "You 're a brave person"
ElseIf (TheColorYouLike = vbMagenta) Then
MsgBox "You 're a sad person"
Else
MsgBox "You 're an average person"
End If
Execution đi l n l t t trên xu ng d i, n u m t đi u ki n IF là TRUE thì x lý ph n c a nó r iầ ượ ừ ố ướ ế ộ ề ệ ử ầ ủ ồ
nh y xu ng ngay d i dòng ả ố ướ END IF. Ch khi m t đi u ki n IF không đ c th a mãn ta m i thỉ ộ ề ệ ượ ỏ ớ ử
m t đi u ki n IF bên d i k đó. T c là n u b n thích màu đ l u màu tím (magenta) thì ch ngộ ề ệ ướ ế ứ ế ạ ỏ ẫ ươ
trình s display "You're a lucky person", và không h bi t "You're a sad person". ẽ ề ế
Dùng SELECT CASE statement
Thí d có nhi u ELSEIF nh trên có th đ c vi t l i nh sau: ụ ề ư ể ượ ế ạ ư
Select Case TheColorYouLike
Case vbRed
MsgBox "You 're a lucky person"
Case vbGreen
MsgBox "You 're a hopeful person"
Case vbBlue
5

