Xây dựng cấu trúc chương trình
Khi xây dựng các đề án với Visual Basic For Application bạn phải chia các công việc nhập, tính toán, xuất sao cho càng rõ ràng, rành mạch càng tốt. Các công thức dùng cho nhập và xuất tôi đã trình bày ở bài trước, còn phần quan trọng là phải viết phần tính toán, trung tâm xử lý một chương trình Visual Basic For Application.
Thông thường với Visual Basic các thủ tục được tiến hành tuần tự theo các dòng mà bạn lập trình. Nhưng nhiều khi lại tuỳ vào một điều kiện mà bạn có thể xử lý A, hay xử lý B, hoặc lặp đi lặp lại một xử lý C nào đó. Ta phải nghiên cứu các cấu trúc công thức để hiểu. Một số cấu trúc thường gặp trong Visual Basic tôi chỉ nói qua, nhưng cấu trúc nào không có ở Visual Basic tôi xin phép được nói sâu hơn một chút.
Visual Basic For Application xử lý có hơi khác so với Visual Basic ở một số cấu trúc. Trước tiên ta hãy liệt kê câu trúc hay sử dụng lập trình ra đã. Nếu bạn đã quen với Visual Basic bạn có thể bỏ qua, nếu bạn mới làm quen với Visual Basic bạn nên xem kỹ phần này. Trong bài viết, để người đọc dễ hiểu tôi đặt tên biến hơi dài. Khi lập trình bạn nên đặt ngắn gọn dễ hiểu, dễ nhớ để rút ngắn thời gian.Các biến bạn nên đặt tên gợi nhớ bằng Tiếng Việt không dấu để tiện kiểm tra. Đừng thể hiện bằng cách đặt tên biến bằng từ Anh nếu bạn không thạo tiếng Anh lắm. Những nhà lập trình gỏi thường đặt tên biến bằng từ Việt, họ chỉ đặt bằng từ Anh khi bí từ hoặc khi copy đoạn mã nguồn từ các chương trình mẫu của Microsoft.
1. Cấu trúc IF THEN ELSE (Nếu... thì.... ngược lại)
Điều kiện là một biến logic đúng sai. Nếu phức tạp bạn nên tạo một biến logic để đặt vào cấu trúc. Đừng đưa cả biểu thức logic làm điều kiện, vì đó là kiểu cách lập trình rối, nếu quen sẽ không làm được việc lớn.
IF <Điều kiện> THEN
Công việc A - Là công việc sẽ thực hiện khi điều kiện đúng.
ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện sai.
END IF
Tuy nhiên bạn có thể sử dụng hàm IIF ( Điều kiện, Giá trị khi điều kiện đúng, Giá trị khi điều kiện sai) để gán giá trị cho một biến.
Ví dụ: KetQuaThi = IIF(DuDiemVaKhongBiLiet, "Đỗ", "Trượt")
Đôi khi bạn có thể lồng vào trong cấu trúc IF dạng ElseIF (Lưu ý viết liền)
Ví dụ:
Gioi = (Tongdiem>=8)
Kha = (TongDiem>=6.5) AND (TongDiem<8)
TB = (TongDiem>=5) AND (TongDiem<6.6)
Kem = (TongDiem<5)
IF Gioi Then
Thuong = "Xe đạp"
ELSEIF KHA THEN
Thuong="Cặp sách"
ELSEIF TB THEN
Thuong = "Trông nhà"
ELSE
Thuong = "Ăn đòn"
END IF
2. Cấu trúc SELECT CASE (Chọn trường hợp)
SELECT CASE <Điều kiện>
CASE Giá trị 11, giá trị 12..., giá trị 1n
Công việc A1 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE Giá trị 21, giá trị 12..., giá trị 2n
Công việc A2 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
.....
CASE Giá trị m1, giá trị m2..., giá trị mn
Công việc Am - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện khác tất cả giá trị trên
END SELECT
Trong đó điều kiện là một biến. Các giá trị liệt kê theo từng trường hợp mà làm các công việc khác nhau.
Nhưng ta có thể không liệt kê ra trong các trường hợp bằng dòng CASE như trên mà có thể dùng một số từ khoá sau:
CASE IsNull trường hợp điều kiện không có giá trị.
Case Is >100 trường hợp điều kiện là số >100
Case 100 to 200 trường hợp điều kiện là số từ 100 - 200
Bạn có thể sử dụng hàm CHOOSE nếu điều kiện của bạn là các số nguyên dương để gán giá trị cho biến ví dụ:
GiaiThuong = CHOOSE (KetQua, "Đi Mỹ", "Đi Úc", "Đi Đài Loan")
Tuỳ theo biến kết quả trên phải là các số nguyên dương 1, 2, 3... mà biến Giải thưởng nhận được giá trị tương ứng.
Bạn cũng có thể sử dụng hàm Switch để bật chuyển cho nhanh theo công thức sau khi thiết kế hàm.
Function ThuDo (Nuoc as String) as String
Bien= Switch(Bthức 1, Giá trị 1,Biểu thức 2, Giá trị 2......Biểu thức n, Giá trị n)
Ví dụ:
Function ThuDo (Nuoc as String) as String
KetQua = SWITCH (Nuoc="Mỹ", "Oa sinh tơn", Nuoc="Trung Quốc", "Bắc Kinh"...., Nuoc ="Campuchia", "Pnôm pênh")
ThuDo = KetQua
End Function
3. Cấu trúc lặp FOR EACH Biencon IN BienTongHop NEXT
FOR EACH Biencon IN BienTongHop
Công việc cho biến con đại diện cho tất cả các phần tử trong biến tổng hợp
NEXT
Biến con là 1 phần tử của biến tổng hợp là một tập hợp. Như ô với vùng, như ký tự với chuỗi, như nút lệnh với thanh công cụ....
Khi lặp đi lặp lại đối với từ phần tử cho đến hết các phần tử ta đưa công việc vào trong vòng lặp để Visual Basic For Application thực hiện lặp lần lượt tới từng phần tử thông qua một tên biến đại diện.
Ví dụ:
Function TONGLAPPHUONG(VungDL)
Dim KetQua, OHienTai, OHienTaiLaSo
FOR EACH OHienTai IN VungDL
OHienTaiLaSo = IsNumeric(OHienTai)
IF OHienTaiLaSo Then
KetQua = KetQua + OHienTai^3
End If
Next
TONGLAPPHUONG = KetQua
End Function
Thông thường đối với các ô của Excel thường sử dụng các hàm sau để kiểm tra dạng dữ liệu trong biến.
IsDate (Biến) - Kiểm tra xem biến có phải dạng ngày không.
IsNumeric (Biến) - Kiểm tra xem biến có phải dạng số không.
IsString (Biến) - Kiểm tra xem biến có phải dạng chuỗi không.
IsArray (Biến) - Kiểm tra xem biến có phải dạng mảng không.
IsMissing (Biến) - Kiểm tra xem biến có được truyền từ ngoài vào không.
IsNull (Biến) - Kiểm tra xem biến đã nhập dữ liệu chưa.
Trong vòng lặp có thể sử dụng Exit For để chấm dứt vòng lặp khi ta kiểm tra điều kiện.
3. Cấu trúc lặp FOR ........ NEXT
For Biến_đếm = Giá trị đầu TO Gía trị cuối (STEP)
Công việc cho các trường hợp có liên quan đến biến đếm.
Next
Vòng lặp này ta đã quá quen thuộc trong Visual Basic, nó lặp đi lặp lại các công việc một số lần xác định trừ khi ta cho nhảy ra khỏi vòng lặp bằng Exit For. Bạn có thể gặp đầy rẫy ví dụ của nó.
4. Vòng lặp không xác định:
Dùng để lặp lại chừng nào (While) điều kiện vẫn đúng, hay lặp lại cho đến khi (Until) điều kiện đúng. Vòng lặp cũng quá quen thuộc trong Visual Basic.
Do [{While | Until} điều_kiện]
Các công việc A
[Exit Do]
Các công việc B
Loop
Hoặc có thể dùng:
Do
Các công việc A
[Exit Do]
Các công việc B
Loop [{While | Until} điều kiện]
Vòng lặp sau tương tự, nhưng trong Visual Basic For Application:
While điều kiện
Các công việc A
Wend
Các công việc sẽ thực hiện khi điều kiện đang đúng. Điều này bắt buộc phải cẩn thận vì không có dạng Exit khỏi vòng lặp.
Nguyễn Phương Thảo - 525 - Điện Biên - Thị xã Yên Bái
Trung tâm Dạy nghề và Phổ cập Tin học Miền núi ABC
Khi xây dựng các đề án với Visual Basic For Application bạn phải chia các công việc nhập, tính toán, xuất sao cho càng rõ ràng, rành mạch càng tốt. Các công thức dùng cho nhập và xuất tôi đã trình bày ở bài trước, còn phần quan trọng là phải viết phần tính toán, trung tâm xử lý một chương trình Visual Basic For Application.
Thông thường với Visual Basic các thủ tục được tiến hành tuần tự theo các dòng mà bạn lập trình. Nhưng nhiều khi lại tuỳ vào một điều kiện mà bạn có thể xử lý A, hay xử lý B, hoặc lặp đi lặp lại một xử lý C nào đó. Ta phải nghiên cứu các cấu trúc công thức để hiểu. Một số cấu trúc thường gặp trong Visual Basic tôi chỉ nói qua, nhưng cấu trúc nào không có ở Visual Basic tôi xin phép được nói sâu hơn một chút.
Visual Basic For Application xử lý có hơi khác so với Visual Basic ở một số cấu trúc. Trước tiên ta hãy liệt kê câu trúc hay sử dụng lập trình ra đã. Nếu bạn đã quen với Visual Basic bạn có thể bỏ qua, nếu bạn mới làm quen với Visual Basic bạn nên xem kỹ phần này. Trong bài viết, để người đọc dễ hiểu tôi đặt tên biến hơi dài. Khi lập trình bạn nên đặt ngắn gọn dễ hiểu, dễ nhớ để rút ngắn thời gian.Các biến bạn nên đặt tên gợi nhớ bằng Tiếng Việt không dấu để tiện kiểm tra. Đừng thể hiện bằng cách đặt tên biến bằng từ Anh nếu bạn không thạo tiếng Anh lắm. Những nhà lập trình gỏi thường đặt tên biến bằng từ Việt, họ chỉ đặt bằng từ Anh khi bí từ hoặc khi copy đoạn mã nguồn từ các chương trình mẫu của Microsoft.
1. Cấu trúc IF THEN ELSE (Nếu... thì.... ngược lại)
Điều kiện là một biến logic đúng sai. Nếu phức tạp bạn nên tạo một biến logic để đặt vào cấu trúc. Đừng đưa cả biểu thức logic làm điều kiện, vì đó là kiểu cách lập trình rối, nếu quen sẽ không làm được việc lớn.
IF <Điều kiện> THEN
Công việc A - Là công việc sẽ thực hiện khi điều kiện đúng.
ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện sai.
END IF
Tuy nhiên bạn có thể sử dụng hàm IIF ( Điều kiện, Giá trị khi điều kiện đúng, Giá trị khi điều kiện sai) để gán giá trị cho một biến.
Ví dụ: KetQuaThi = IIF(DuDiemVaKhongBiLiet, "Đỗ", "Trượt")
Đôi khi bạn có thể lồng vào trong cấu trúc IF dạng ElseIF (Lưu ý viết liền)
Ví dụ:
Gioi = (Tongdiem>=8)
Kha = (TongDiem>=6.5) AND (TongDiem<8)
TB = (TongDiem>=5) AND (TongDiem<6.6)
Kem = (TongDiem<5)
IF Gioi Then
Thuong = "Xe đạp"
ELSEIF KHA THEN
Thuong="Cặp sách"
ELSEIF TB THEN
Thuong = "Trông nhà"
ELSE
Thuong = "Ăn đòn"
END IF
2. Cấu trúc SELECT CASE (Chọn trường hợp)
SELECT CASE <Điều kiện>
CASE Giá trị 11, giá trị 12..., giá trị 1n
Công việc A1 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE Giá trị 21, giá trị 12..., giá trị 2n
Công việc A2 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
.....
CASE Giá trị m1, giá trị m2..., giá trị mn
Công việc Am - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện khác tất cả giá trị trên
END SELECT
Trong đó điều kiện là một biến. Các giá trị liệt kê theo từng trường hợp mà làm các công việc khác nhau.
Nhưng ta có thể không liệt kê ra trong các trường hợp bằng dòng CASE như trên mà có thể dùng một số từ khoá sau:
CASE IsNull trường hợp điều kiện không có giá trị.
Case Is >100 trường hợp điều kiện là số >100
Case 100 to 200 trường hợp điều kiện là số từ 100 - 200
Bạn có thể sử dụng hàm CHOOSE nếu điều kiện của bạn là các số nguyên dương để gán giá trị cho biến ví dụ:
GiaiThuong = CHOOSE (KetQua, "Đi Mỹ", "Đi Úc", "Đi Đài Loan")
Tuỳ theo biến kết quả trên phải là các số nguyên dương 1, 2, 3... mà biến Giải thưởng nhận được giá trị tương ứng.
Bạn cũng có thể sử dụng hàm Switch để bật chuyển cho nhanh theo công thức sau khi thiết kế hàm.
Function ThuDo (Nuoc as String) as String
Bien= Switch(Bthức 1, Giá trị 1,Biểu thức 2, Giá trị 2......Biểu thức n, Giá trị n)
Ví dụ:
Function ThuDo (Nuoc as String) as String
KetQua = SWITCH (Nuoc="Mỹ", "Oa sinh tơn", Nuoc="Trung Quốc", "Bắc Kinh"...., Nuoc ="Campuchia", "Pnôm pênh")
ThuDo = KetQua
End Function
3. Cấu trúc lặp FOR EACH Biencon IN BienTongHop NEXT
FOR EACH Biencon IN BienTongHop
Công việc cho biến con đại diện cho tất cả các phần tử trong biến tổng hợp
NEXT
Biến con là 1 phần tử của biến tổng hợp là một tập hợp. Như ô với vùng, như ký tự với chuỗi, như nút lệnh với thanh công cụ....
Khi lặp đi lặp lại đối với từ phần tử cho đến hết các phần tử ta đưa công việc vào trong vòng lặp để Visual Basic For Application thực hiện lặp lần lượt tới từng phần tử thông qua một tên biến đại diện.
Ví dụ:
Function TONGLAPPHUONG(VungDL)
Dim KetQua, OHienTai, OHienTaiLaSo
FOR EACH OHienTai IN VungDL
OHienTaiLaSo = IsNumeric(OHienTai)
IF OHienTaiLaSo Then
KetQua = KetQua + OHienTai^3
End If
Next
TONGLAPPHUONG = KetQua
End Function
Thông thường đối với các ô của Excel thường sử dụng các hàm sau để kiểm tra dạng dữ liệu trong biến.
IsDate (Biến) - Kiểm tra xem biến có phải dạng ngày không.
IsNumeric (Biến) - Kiểm tra xem biến có phải dạng số không.
IsString (Biến) - Kiểm tra xem biến có phải dạng chuỗi không.
IsArray (Biến) - Kiểm tra xem biến có phải dạng mảng không.
IsMissing (Biến) - Kiểm tra xem biến có được truyền từ ngoài vào không.
IsNull (Biến) - Kiểm tra xem biến đã nhập dữ liệu chưa.
Trong vòng lặp có thể sử dụng Exit For để chấm dứt vòng lặp khi ta kiểm tra điều kiện.
3. Cấu trúc lặp FOR ........ NEXT
For Biến_đếm = Giá trị đầu TO Gía trị cuối (STEP)
Công việc cho các trường hợp có liên quan đến biến đếm.
Next
Vòng lặp này ta đã quá quen thuộc trong Visual Basic, nó lặp đi lặp lại các công việc một số lần xác định trừ khi ta cho nhảy ra khỏi vòng lặp bằng Exit For. Bạn có thể gặp đầy rẫy ví dụ của nó.
4. Vòng lặp không xác định:
Dùng để lặp lại chừng nào (While) điều kiện vẫn đúng, hay lặp lại cho đến khi (Until) điều kiện đúng. Vòng lặp cũng quá quen thuộc trong Visual Basic.
Do [{While | Until} điều_kiện]
Các công việc A
[Exit Do]
Các công việc B
Loop
Hoặc có thể dùng:
Do
Các công việc A
[Exit Do]
Các công việc B
Loop [{While | Until} điều kiện]
Vòng lặp sau tương tự, nhưng trong Visual Basic For Application:
While điều kiện
Các công việc A
Wend
Các công việc sẽ thực hiện khi điều kiện đang đúng. Điều này bắt buộc phải cẩn thận vì không có dạng Exit khỏi vòng lặp.
Nguyễn Phương Thảo - 525 - Điện Biên - Thị xã Yên Bái
Trung tâm Dạy nghề và Phổ cập Tin học Miền núi ABC