NGÔN NGỮ VBSCRIPT PHẦN PHÁT BIỂU LỆNH (statement)

Phát biểu Call
Phát biểu Dim
Vòng lặp Do...Loop
Phát biểu Exit
Vòng lặp For...Next
Vòng lặp For Each...Next

Phát biểu hàm Function
Ðiều khiển If...Then...Else
Phát biểu On Error
Phát biểu ReDim
Phát biểu Rem
Ðiều khiển Select Case
Phát biểu thủ tục Sub
Vòng lặp While...Wend
--------------------------------------------------------------------------------------
Phát biểu Call:
Mô tả:
Chuyển điều khiển cho 1 procedure Sub hoặc Function.
Cú pháp:
[Call] tên_Sub_hoặc_Function [danh sách đối số
Thành phần
Diễn giải
Call
Từ khoá tuỳ chọn. Nếu chỉ định, bạn phải đóng danh sách đối số trong cặp (). Ví dụ:
Call MyProc(0)
tên_Sub_hoặc_Function
Phải có. Tên của procedure cần gọi.
danh sách đối số
Tùy chọn. Phân tách các biến, mảng, hoặc biểu thức chuyển cho procedure.
Ví dụ
Call MyFunction("Hello World")

Function MyFunction(text)
MsgBox text
End Function
---------------------------------------------------
Phát biểu Dim:
Mô tả
Khai báo biến và định khoảng lưu trữ.
Cú pháp
Dim tên_biến[([số_chiều_biến_mảng])][, tên_biến[([số_chiều_biến_mảng)]] . . .
Thành phần
Diễn giải
tên_biến
Tên của biến; phải theo cú pháp tên biến thông thường.
số_chiều_biến_mảng
Chiều của biến mảng; lên đến 60 chiều có thể khai báo. Số_chiều_biến_mảng sử dụng theo cú pháp sau:
biên_trên [,biên_trên] . . .
Biên dưới của 1 mảng luôn luôn zero.
Lưu ý
Biến khai báo với Dim tại cấp script là tồn tại trong tất cả procedures trong script. ở procedure, các biến chỉ tồn tại trong procedure đó.
Khai báo Dim với 1 biến và cặp () rỗng để khai báo 1 array động. Sau khi khai báo 1 array động, dùng khai báo ReDim trong 1 procedure để khai báo số chiều và và các thành phần trong array. Nếu bạn khai báo 1 lại (ReDim) 1 array đã khai báo số chiều rõ ràng bằng khai báo Dim, thì bị lỗi.
Ví dụ
Dim Names(9)     ' Khai báo 1 mảng Names có 10 phần tử.
Dim Names()      ' Khai báo mảng động.
Dim MyVar, MyNum ' Khai báo 2 biến.
--------------------------------------------------------
Vòng lặp Do...Loop:
Mô tả
Lặp 1 khối lệnh trong khi điều kiện đúng(True) hoặc cho đến khi điều kiện còn đúng.
Cú pháp
Do [{While | Until} điều_kiện]
    [khối_lệnh]
    [Exit Do]
    [khối_lệnh]
Loop
Hoặc, bạn có thể dùng cú pháp:
Do
    [khối_lệnh]
    [Exit Do]
    [khối_lệnh]
Loop [{While | Until} điều_kiện]
Thành phần
Mô tả
điều_kiện
Biểu thức số(numeric) hoặc chuỗi(string) đúng(True) hoặc sai(False). Nếu điều kiện là  Null(không có giá trị hợp lệ), điều kiện được xem như False.
khối_lệnh
1 hoặc nhiều lệnh được lặp trong khi điều kiện đứng hoặc đến khi điều kiện đúng.
Lưu ý
Lệnh Exit Do chỉ có thể dùng trong cấu trúc điều khiển Do...Loop để chuyển hướng thoát khỏi Do...Loop. Lệnh Exit Do đặt mọi nơi trong Do...Loop và số lượng lệnh bất kỳ . Thường dùng để định lượng một vài điều kiện (ví dụ, If...Then), Exit Do chuyển điều khiển tức thì cho các lệnh đi ngay sau Loop.
Khi dùng trong nhiều Do...Loop lồng nhau, Exit Do chuyển điều khiển để lặp Do..Loop lồng trên nó 1 cấp.
Ví dụ
Do Until DefResp = vbNo
  MyNum = Int (6 * Rnd + 1) ' Kết sinh ngẫu nhiên 1 số nguyên ở giữa 1 và  6.
  DefResp = MsgBox (MyNum & " Do you want another number?", vbYesNo)
Loop

Dim Check, Counter
Check = True: Counter = 0 ' Khởi tạo biến.
Do ' loop ngoài.
  Do While Counter < 20 ' loop trong.
    Counter = Counter + 1 ' tăng biến đếm.
    If Counter = 10 Then ' If điều kiện=True...
      Check = False ' set giá trị flag=False.
      Exit Do ' Thoát loop trong.
    End If
  Loop
Loop Until Check = Fals
--------------------------------------------
Phát biểu Exit:
Mô tả
Thoát khỏi 1 khối: Do...Loop, For...Next, Function, hoặc Sub.
Cú pháp
Exit Do
Exit For
Exit Function
Exit Sub
Thành phần
Mô tả
Exit Do
Thực hiện thoát khỏi Do...Loop và chỉ dùng trong Do...Loop.
Exit For
Thực hiện thoát khỏi For...Next và chỉ dùng trong For...Next.
Exit Function
Thực hiện thoát khỏi Function và chỉ dùng trong Function.
Exit Sub
Thực hiện thoát khỏi Sub và chỉ dùng trong Sub.
Ví dụ
Sub RandomLoop
  Dim I, MyNum
  Do                           ' loop vô hạn.
    For I = 1 To 1000          ' Loop 1000 lần.
      MyNum = Int(Rnd * 100)   ' Kết sinh số ngẫu nhiên.
      Select Case MyNum        ' ước lượng số ngẫu nhiên.
        Case 17: MsgBox "Case 17"
          Exit For             ' Nếu 17, thoát For...Next.
        Case 29: MsgBox "Case 29"
          Exit Do              ' Nếu 29, thoát Do...Loop.
        Case 54: MsgBox "Case 54"
          Exit Sub             ' Nếu 54, thoát khoải procedure Sub.
        End Select
    Next
  Loop
End Sub
------------------------------------------------------
Vòng lặp For...Next:
Mô tả
Lặp 1 nhóm lệnh với 1 số lần chỉ định ra.
Syntax
For biến_đếm = bắt_đầu To kết_thúc [Step bước_nhẩy]
    [nhóm_lệnh]
    [Exit For]
    [nhóm_lệnh]
Next
Thành phần
Mô tả
biến_đếm
Biến kiểu số dùng như bộ đếm lặp. Không được dùng biến kiểu mảng.
bắt_đầu
Giá ban đầu của biến đếm.
kết_thúc
Giá trị cuối cùng của biến đếm.
bước_nhảy
Số lượng tăng thêm của biến đếm sau mỗi lần lặp.Nếu không chỉ định thì bước nhảy là 1.
nhóm_lệnh
1 hoặc nhiều câu lệnh mà ForNext sẽ thực hiện theo số lần lặp đã chỉ định.
Ví dụ:
For I = 1 To 10
    For J = 1 To 10
        For K = 1 To 10
        . . .
        Next
    Next
Next
----------------------------
Vòng lặp For Each...Next:
Mô tả
Lặp 1 nhóm lệnh cho từng thành phần của 1 mảng hay tập hợp.
Cú pháp
For Each thành_phần In nhóm
    [nhóm_lệnh]
    [Exit For]
    [nhóm_lệnh]
Next [thành_phần]
Thành phần
Mô tả
thành_phần
Biến dùng để lặp với tất cả các thành phần của tập hợn(collection) hoặc array. Ðối với collections, thành_phần chỉ có thể là biến Variant, 1 loại biến Object, or bất kỳ biến Automation object . Ðối với arrays, thành_phần chỉ có thể là biến Variant.
nhóm
Tên của tập hợp object hoặc array.
nhóm_lệnh
1 hoặc nhiều lệnh được thực hiện lặp theo từng mục (item) trong nhóm.
Ví dụ: In ra tên các file trong 1 thư mục truyền cho function.
Function ShowFolderList(folderspec)
  Dim fso, f, f1, fc, s
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.GetFolder(folderspec)
  Set fc = f.Files
  For Each f1 in fc
    s = s & f1.name 
    s = s & "<BR>"
  Next
  ShowFolderList = s
End Function
-------------------------------------------
Phát biểu hàm Function:
Mô tả
Khai báo tên, đối số, và mã hình thành thân của thủ tục hàm Function.
Cú pháp
[Public [Default] | Private] Function tên_hàm [(danh_sách_đối_số)]
    [nhóm_lệnh]
    [tên_hàm = biểu_thức]
    [Exit Function]
    [nhóm_lệnh]
    [tên_hàm = biểu_thức]
End Function
Thành phần
Mô tả
Public
Xác định Function có thể dùng trong các procedures scripts khác.
Default
Chỉ dùng với từ khoá Public tròn 1 khối lớp(Class) để chỉ định Function procedure là phương thức mặc  nhiên cho lớp. Lỗi xẫy ra khi có hơn 1 thủ tục Default chỉ định tròn 1 lớp.
Private
Chỉ định rằng Function chỉ được dùng trong những thủ tục trong script nơi nó khai báo hoặc nếu function là 1 thành viên của class.
tên_hàm
Tên của Function
danh_sách_đối_số
Danh sách biến gán vào giá trị tương ứng khi Function được gọi. Các biến cách nhau bằng các dấu phẩy(,).
nhóm_lệnh
Nhóm lệnh bất kỳ được thực hiện trong thân function. 
biểu_thức
Trả về giá trị của hàm Function.
Danh_sách_đối_số có cú pháp và các thành phần sau đây:
[ByVal | ByRef] tên_biến[( )]
 
Thành phần
Mô tả
ByVal
Chỉ định đối số được truyền bằng giá trị(value). Ðối số không thay đổi giá trị sau khi kết thúc hàm.
ByRef
Chỉ định đối số được truyền bằng tham khảo(reference).Ðối số bị thay đổi giá trị sau khi kết thúc hàm nếu trong hàm có lệnh thay đổi giá trị đối số.
tên_biến
Tên biến nhận giá trị truyền vào khi gọi hàm. Biến nhận và giá trị truyền phải tương ứng từ biến đầu tiên đến biến cuối cùng.
Ví dụ
Function BinarySearch(. . .)
    . . .
    ' Value not found. Return a value of False.
    If lower > upper Then
        BinarySearch = False  
        Exit Function  
    End If
    . . .
End Function
----------------------------------------
Ðiều khiển If...Then...Else:
Mô tả
Thực hiện một nhóm lệnh tùy theo điều kiện, phụ thuộc và giá trị của 1 biểu thức.
Cú pháp
If điều_kiện Then nhóm_lệnh [Else elsenhóm_lệnh ]
Or, you can use the block form syntax:
If điều_kiện Then
    [nhóm_lệnh]
[ElseIf điều_kiện-n Then
    [elseifnhóm_lệnh]] . . .
[Else
    [elsenhóm_lệnh]]
End If
The If...Then...Else statement syntax has these parts:
 
Thành phần
Mô tả
điều_kiện
1 biểu thức số hoặc chuỗi định giá True hoặc False. Nếu điều_kiệnNull, điều_kiện  xem như False.
nhóm_lệnh
1 nhóm lệnh cách nhau bằng dấu 2 chấm(:); được chạy nếu điều_kiệnTrue.
điều_kiện-n
Giống như điều_kiện.
elseifnhóm_lệnh
1 hoặc nhiều lệnh chạy nếu điều_kiện-n liên hợp  là  True.
elsenhóm_lệnh
1 hoặc nhiều lệnh chạy nếu không có điều_kiện hoặc điều_kiện-n là  True(tức False).
One or more nhóm_lệnh executed if no previous điều_kiện or điều_kiện-n expression is True.
Ví dụ
    If A > 10 Then A = A + 1 : B = B + A : C = C + B
--------------------------------------------------------
Phát biểu ReDim:
Mô tả
Khai báo biến mảng động, và định khảong trống lưu trữ tại cấp thủ tục.
Cú pháp
ReDim [Preserve] tên_biến(chiều) [, tên_biến(chiều)] . . .
Thành phần
Mô tả
Preserve
Bảo vệ data trong mảng đã tồn tại khi bạn thay đổi cỡ chiều sau cùng.
tên_biến
Tên biển
chiều
Chiều của biến mảng
Ví dụ
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
------------------------------------------------------------------------------
Phát biểu Rem:
Mô tả
Giải thích trong 1 program.
Cú pháp
Rem ghi_chú
hoặc
' ghi_chú
ghi_chú là text bất kỳ ghi_chú bạn muốn đưa vào. Phía sau từ khóa Rem, phải có 1 khoảng trống trước ghi_chú.
Ví dụ
Dim MyStr1, MyStr2
MyStr1 = "Hello" : Rem ghi chú sau câu lệnh bằng dấu 2 chấm.
MyStr2 = "Goodbye"     ' Ðây cũng là 1 ghi_chú; không cần dấu 2 chấm.
Rem ghi_chú trên dòng không có lệnh, không cần dấu 2 chấm.
-----------------------------------
Ðiều khiển Select Case:
Mô tả
Chạy 1 hoặc vài nhóm lệnh, phụ thuộc vào giá trị của 1 biểu thức.
Cú pháp
Select Case biểu_thức_kiểm_tra
    [Case danh_sách_biểu_thức-n
        [nhóm_lệnh-n]] . . .
    [Case Else danh_sách_biểu_thức-n
        [elsenhóm_lệnh-n]]
End Select
Thành phần
Mô tả
biểu_thức_kiểm_tra
Bất kỳ biểu thức số hoặc chuỗi
danh_sách_biểu_thức-n
Phải có nếu có Case. Danh sách có giới hạn của một hoặc nhiều biểu thức.
nhóm_lệnh-n
Nhóm lệnh sẽ chạy nếu biểu_thức_kiểm_tra trùng với bất kỳ biểu thức nào trong danh_sách_biểu_thức-n.
elsenhóm_lệnh-n
Nhóm lệnh sẽ chạy nếu biểu_thức_kiểm_tra không trùng với bất kỳ biểu thức nào trong các mệnh Case.
Ví dụ
Dim Color, MyVar
Sub ChangeBackground (Color)
MyVar = lcase (Color)
   Select Case MyVar
           Case "red"    document.bgColor = "red"
           Case "green"  document.bgColor = "green"
           Case "blue"   document.bgColor = "blue"
           Case Else     MsgBox "pick another color"
      End Select
End Sub
----------------------------------------------------------------
Phát biểu thủ tục Sub:Giống như Function nhưng không trả về giá trị.
Xem Function  
Mô tả
Khai báo tên, đối số, và mã hình thành thân của thủ tục hàm Sub procedure.
Cú pháp
[Public [Default] | Private] Sub tên_sub [(danh_sách_đối_số)]
    [nhóm_lệnh]
    [Exit Sub]
    [nhóm_lệnh]
End Sub
---------------------------------------------------
Vòng lặp While...Wend:
Mô tả
Thực hiện một dãy lệnh  trong khi điều kiện là True.
Syntax
While điều_kiện
    [nhóm_lệnh]
Wend
Thành phần
Mô tả
điều_kiện
1 biểu thức số hoặc chuỗi định giá True hoặc False. Nếu điều_kiệnNull, điều_kiện  xem như False.
nhóm_lệnh
Nhóm lệnh được thực hiện khi điều kiện là True.
Ví dụ
Dim Counter
Counter = 0                ' Khởi tạo biến.
While Counter < 20         ' Test giá trị Counter.
   Counter = Counter + 1   ' Tăng Counter.
   Alert Counter
Wend                        'Kết thúc lặp While khi  Counter > 19.
------------------------------------------------------------
Phát biểu On Error
Làm tăng hiệu quả điều khiển lỗi chương trình. Khi một lệnh nào đó trong chương trình bị lỗi thì phát biểu On Error Resume Next sẽ bỏ qua lệnh đó và điều khiển chương trình thực hiện lệnh tiếp theo sau lệnh bị lỗi.
Cú pháp
On Error Resume Next
Ví dụ:
On Error Resume Next
Err.Raise 6  ' Raise an overflow error.
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    ' Clear the error.
-----------------------------------------------