BIẾN VÀ KHAI BÁO BIẾN

Một phần của tài liệu Sử dụng Excel trong quản lí (Trang 133 - 148)

Biến (variable) là một đối tượng được sử dụng để cất giữ các giá trị trong khi thi hành mã nguồn Visual basic. Cú pháp khai báo 1 biến như sau:

Dim/Public <tên biến> [As Kiểu] Trong đó:

- Dim/Public: là từ khoá của Visual basic để chỉ ra rằng đây là câu lệnh khai báo biến. Chúng ta sẽ chỉ sử dụng 1 trong 2 từ khoá Dim hay Public tuỳ theo từng ngữ cảnh cụ thể. Khi nào sử dụng từ khoá nào sẽđược đề cập ở phần phạm vi của biến dưới đây.

- <tên biến>: là tên mà người dùng đặt cho biến (theo qui tắc đặt tên biến của ngôn ngữ lập trình). Trong mã chương trình ta sẽ không sử dụng dấu < và >.

- As: Từ khoá của Visual basic chỉ ra kiểu của biến. - Kiểu: Kiểu của biến

Cặp dấu [] chỉ ra rằng phần nằm bên trong nó là tuỳ chọn. Người dùng có thể chỉ ra một cách tường minh kiểu của biến hoặc không (nếu không, Visual basic ngầm hiểu kiểu của biến là variant).

Trong Visual basic, khác với một số ngôn ngữ lập trình khác (như Pascal hay C), chúng ta có thể không nhất thiết phải khai báo biến trước khi sử dụng nó. Đây chính là cách “không khai báo biến tường minh”. Tuy nhiên, để chương trình dễ “đọc” và dễ quản lý, chúng ta có thể khai báo tường minh các biến trước khi sử dụng nó.

Ví dụ:

Dim strName as string strName = ‘Nguyễn Văn An”

Ởđây biến strName được sử dụng sau khi đã khai báo. Do đó nó được coi là khai báo tường minh. Ngược lại, nếu trước đó ta chưa khai báo bằng câu lệnh Dim ở trên thì biến strName được sử dụng theo kiểu không khai báo tường minh.

Khi được khai báo, một biến sẽđược sinh ra trong Visual basic và sẽ tồn tại trong một phạm vi nào đó, tức là nó sẽ có giá trị trong một vùng nào đó đã được xác định trước. Ngoài phạm vi đó, biến sẽ không còn có tác dụng. Trong Visual basic, chúng ta có 2 phạm vi cho biến đó là:

- Biến cục bộ: Là biến được khai báo bởi từ khoá Dim. Biến này chỉ tồn tại trong phạm vi khai báo nó - trong 1 hàm, một thủ tục hay một module nhất định.

- Biến toàn cục: Là biến được khai báo bởi từ khoá Public. Biến này có ảnh hưởng đến toàn bộ chương trình, do đó trong 1 chương trình không thể có 2 biến toàn cục có cùng tên. Tuy nhiên, chúng ta có thể khai báo biến cục bộ trùng tên với biến toàn cục. Khi đó Visual basic sẽưu tiên sử dụng biến cục bộ trong phạm vi của nó.

Ngoài ra, Visual basic còn hỗ trợ việc khai báo các hằng số. Hằng số là các giá trị cốđịnh, không bị thay đổi trong chương trình. Việc sử dụng hằng số rất tiện lợi khi trong chương trình ta cần sử dụng lặp đi lặp lại một giá trị nào đó. Để khai báo hằng số, ta sử dụng cú pháp sau:

Const <tên hằng> = <Giá trị>

Ví dụ: Const name = “Nguyễn Văn Nam” - Khai báo hằng có giá trị kiểu chữ Const dob = #09/17/1980# - Khai báo hằng có giá trị kiểu ngày tháng.

Tương tự như biến, hằng cũng có phạm vi ảnh hưởng của nó. Khi được khai báo trong hàm, thủ tục hay module nào thì hằng sẽ có ảnh hưởng đến hàm, thủ tục hay module đó. Để có hằng có phạm vi toàn cục, ta phải khai báo hằng bằng từ khoá Public Const ngay trong phần khai báo của module.

5.3 CÁC CẤU TRÚC ĐIỀU KHIỂN

Các cấu trúc điều khiển cho phép chúng ta điều khiển thứ tự thi hành của các câu lệnh trong một chương trình. Thông thường, nếu bỏ qua các cấu trúc điều khiển thì thứ tự thi thành của các câu lệnh trong một đoạn mã sẽ là tuần tự từ trên xuống dưới, bắt đầu với câu lệnh đầu tiên và kết thúc bởi câu lệnh cuối cùng. Cũng giống như các ngôn ngữ lập trình khác, Visual basic cung cấp đầy đủ các cấu trúc điều khiển cho phép chúng ta thay đổi thứ tự thực thi của các câu lệnh một cách linh hoạt và hiệu quả.

5.3.1 Cấu trúc lệnh rẽ nhánh

Cấu trúc rẽ nhánh cho phép chúng ta kiểm tra các điều kiện rồi thực hiện các hành động khác nhau tuỳ thuộc vào kết quảđược kiểm tra. Các cấu trúc lựa chọn của Visual basic bao gồm:

If … Then If .. Then … Else Select Case.

Cấu trúc If .. Then dùng để thi hành một hay nhiều câu lệnh khi một điều kiện kiểm tra được thoả mãn. Cấu trúc chung của If … Then như sau:

If < điều kiện> Then <một hoặc nhiều lệnh> End If.

Với đoạn mã trên, nếu <điều kiện> - thường là một biểu thức logic - là đúng thì chương trình sẽ thực hiện <một hoặc nhiều lệnh>. Ngược lại, chương trình sẽ không thực hiện gì.

Cấu trúc If …Then … Else là sự phát triển của cấu trúc If … Then. Ở trên, nếu biểu thức là đúng thì một hoặc nhiều lệnh trong khối được thực hiện, ngược lại chương trình không thực hiện gì. Tuy nhiên, trong cấu trúc này, nếu điều kiện kiểm tra là sai thì chương trình sẽ thực hiện các lệnh nằm trong phần Else: If <điều kiện> Then <một hoặc nhiều lệnh> Else <một hoặc nhiều lệnh khác> End If

Select Case lại là phần mở rộng hơn của If … Then … Else. Trong cấu trúc If … Then … Else, chúng ta chỉ có thể xử lý được một trong 2 tình huống là <điều kiện> đúng hoặc sai. Tuy nhiên, trong thực tế có rất nhiều trường hợp <điều kiện> của chúng ta lại trả về nhiều hơn 2 giá trị. Do đó biểu thức Select Case được sử dụng để giải quyết các tình huống đó. Cú pháp của biểu thức này như sau:

Select Case <tên biến> Case <giá trị 1> <tập lệnh 1> Case <giá trị 2> <tập lệnh 2> …. Case <giá trị n> <tập lệnh n>

Case Else

<tập lệnh n+1> End Select

Ý nghĩa của biểu thức này như sau: Chương trình sẽ kiểm tra <tên biến>. Ứng với mỗi giá trị của <tên biến>, tập lệnh tương ứng sẽ được thực hiện. Ngược lại, nếu không có giá trị nào trong các giá trị trên thoả mãn thì tập lệnh thứ n+1 nằm sau Case Else sẽđược thực hiện.

Với cấu trúc này, nếu 1 biến có nhiều hơn 1 giá trị thì cũng chỉ tập lệnh đầu tiên ứng với giá trịđầu tiên được thực hiện và chương trình sẽ tựđộng thoát ra khỏi cấu trúc Select.

5.3.2 Cấu trúc lặp

Trong lập trình cũng như trong đời sống, chúng ta có thể muốn lặp đi lặp lại một số thao tác nào đó một số lần nhất định, cho tới khi đạt đến một đích cho trước hay cho tới khi một điều kiện nào đó được thỏa mãn. Trong lập trình, trường hợp đầu được gọi là một vòng lặp xác định trước số lần lặp và trường hợp sau gọi là vòng lặp không xác định trước số lần lặp. Với Visual basic, chúng ta có các cấu trúc lặp như sau:

Do … Loop: Đây là cấu trúc lặp với số vòng lặp không xác định trước. Cú pháp của cấu trúc này như sau:

Do While <điều kiện> <các lệnh>

Loop

Với cấu trúc này, nếu <điều kiện> còn đúng thì <các lệnh> sẽ còn được thực hiện. Chỉ khi nào <điều kiện> là sai thì vòng lặp mới kết thúc. Đây là cấu trúc lặp mà ngay từ lần thực hiện đầu tiên chương trình đã kiểm tra <điều kiện>. Điều này có nghĩa là có thể vòng lặp sẽ không được thực hiện lần nào nếu <điều kiện> sai ngay lần thửđầu tiên. Để cải tiến, ta có thể sử dụng cấu trúc này theo cách sau:

Do

<các lệnh>

Loop While <điều kiện>

Đểđảm bảo ít nhất vòng lặp được thực hiện một lần.

Ngoài ra, chúng ta cũng có thể sử dụng cấu trúc lặp này với từ khoá Until thay vì từ khóa While. Điều khác biệt ở đây là, với từ khoá While, vòng lặp sẽ dừng lại khi <điều kiện> là sai, còn với từ khoá Until, vòng lặp sẽ dừng lại khi điều kiện là đúng.

For … Next: Vòng lặp Do …Loop ở trên hoạt động rất tốt trong trường hợp chúng ta chưa biết chính xác số lượng vòng lặp cần thực hiện. Tuy nhiên, trong nhiều trường hợp, khi chúng ta đã biết chính xác được số lượng vòng lặp rồi thì cấu trúc For … Next là một lựa chọn tốt hơn. Cú pháp của cấu trúc này như sau:

For <biến đếm> = <bắt đầu> To <kết thúc> [Step <giá trị tăng>] <các lệnh>

Ý nghĩa của cấu trúc này như sau: Chương trình sẽ thực hiện <các lệnh> với số lượng là <kết thúc> - <bắt đầu> + 1 lần. Ở đây, biến đếm, bắt đầu và kết thúc thường là các số nguyên. Đầu tiên, chương trình thiết lập <biến đếm> bằng với <bắt đầu> và ngầm định giá trị tăng là 1 và thực hiện <các lệnh>. Sau mỗi vòng, chương trình tăng <biến đếm> lên 1 giá trị và so sánh nó với <kết thúc>. Nếu <biến đếm> còn nhỏ hơn <kết thúc> thì thực hiện tiếp <các lệnh>, ngược lại thì thoát khỏi vòng lặp. Ởđây, Step được ngầm định hiểu là giá trị 1 nếu ta không viết ra tường minh. Ví dụ, chúng ta muốn in ra màn hình các chữ số từ 1 đến 10. Do đã biết được số vòng lặp là 10 nên ta có thể sử dụng cấu trúc For … Next như sau:

For i = 1 To 10 Debug.Print i Next i

Nếu muốn in ngược lại từ 10 đến 1, ta sử dụng Step = -1 như sau: For i = 10 to 1 Step -1

Debug.Print i Next i

For Each … Next: Là cấu trúc tương tự như For … Next nhưng nó lặp lại một nhóm các câu lệnh cho từng phần tử trong một tập hợp hay trong một mảng (array) thay vì lặp các câu lệnh một số lần chỉđịnh. Điều này đặc biệt có ích nếu chúng ta không biết có bao nhiêu phân tử trong tập hợp.

Cú pháp của cấu trúc này như sau: For Each <phần tử> In <tập hợp> <các lệnh>

Next <phần tử>

5.3.3 Các cấu trúc điều khiển lồng nhau.

Chúng ta hoàn toàn có thểđặt các cấu trúc điều khiển bên trong một cấu trúc điều khiển khác (ví dụ một khối If…Then nằm trong một vòng lặp For …Next). Một cấu trúc điều khiển đặt bên trong một cấu trúc điều khiển khác được gọi là lồng nhau. Nếu muốn, chúng ta cũng có thể tổ chức các cấu trúc điều khiển trong Visual basic thành nhiều cấp.

Qui luật về các cấu trúc điều khiển lồng nhau là rất đơn giản. Khi đó, cấu trúc bên trong phải được hoàn thành trước khi trở thành điều kiện kiểm tra cho cấu trúc bên ngoài trực tiếp chứa nó. Một kỹ thuật lập trình mà chúng ta nên tham khảo và áp dụng, đó là khi viết các cấu trúc điều khiển lồng nhau, chúng ta nên căn lề cho từng cấu trúc đểđoạn mã chương trình rõ ràng và dễ gỡ rối khi có lỗi xảy ra.

5.3.4 Thoát khỏi một cấu trúc điều khiển lặp

Như đã trình bày ở trên, các vòng lặp For và Do được lặp đi lặp lại với số lượng lần biết trước hay không biết trước. Tuy nhiên, trong nhiều ứng dụng, nếu chúng ta đã thực hiện được mục tiêu thì chúng ta cần thoát ngay ra khỏi vòng lặp. Khi đó, câu lệnh Exit có thểđược sử dụng để

chương trình ngay lập tức thoát ra khỏi vòng lặp. Cú pháp của câu lệnh này rất đơn giản, từ khoá exit được sử dụng cùng với từ khoá của vòng lặp For hay Do

Ví dụ: Exit For sẽ thoát ngay ra khỏi vòng lặp For.

5.4 SỬ DỤNG LỆNH DOCMD

Trong nhiều trường hợp, mã lệnh của Visual basic không thể giúp chúng ta thực hiện được một số hành động - chẳng hạn như đóng hay mở một form, report. Khi đó, lệnh DoCmd của Access là một công cụ hữu ích giúp chúng ta thực hiện các hành động kiểu này.

DoCmd có cú pháp như sau:

DoCmd.<hành động> <danh sách các tham số>

Ởđây, hành động là các hành động mà Access hỗ trợ nhưđóng (close), mở (open) form hay report, thực thi câu lệnh SQL (RunSQL).

<danh sách các tham số> là các tham số mà mỗi <hành động> ở trên hỗ trợ, mỗi tham số được viết cách nhau bởi 1 dấu phẩy “,”.

Ví dụ, chúng ta có 1 form được đặt tên là frmUser. Để mở form này, chúng ta có thể thực hiện câu lệnh DoCmd như sau:

DoCmd.OpenForm “frmUser”, acNormal - Mở form ở chếđộ thi hành.

Với các hành động mở Form và mở Report, chúng ta thường có các tham số như sau: [ViewMode], [FilterName], [WhereCondition], [DataMode], [WindowsMode] Trong đó:

- ViewMode - chếđộ mở. Cụ thể:

o acDesign: Mở Report ra chếđộ thiết kế o acNormal: Mở Report ra để thi hành - FilterName - Đặt lọc

- WhereCondition - Giới hạn các bản ghi trong nguồn dữ liệu - DataMode - thiết lập chếđộ dữ liệu trên Report

- WindowsMode - thiết lập kiểu cửa sổ Report là: o acDialog: Kiểu hộp thoại

o acWindowsNormal: Kiểu cửa sổ bình thường

Ngoài ra, lệnh DoCmd.RunSQL <câu lệnh SQL> sẽ thực thi một câu lệnh SQL giống như nó được viết ra trong một truy vấn.

5.5CHƯƠNG TRÌNH CON - THỦ TỤC VÀ HÀM

Cũng giống như trong tất cả các ngôn ngữ lập trình khác, Visual basic cũng hỗ trợ người lập trình tạo ra các chương trình con dưới dạng thủ tục hay hàm. Một chương trình con, về mặt cấu trúc có thểđược coi như một chương trình hoàn chỉnh được viết để làm một số việc nhất định nào

đó. Thông thường, nhiều khi người lập trình muốn sử dụng lặp đi, lặp lại một đoạn mã lệnh nào đó. Khi đó, đoạn mã lệnh đó có thểđược viết dưới dạng một chương trình con để người lập trình có thể tái sử dụng nó một cách hiệu quả mà không cần phải viết lại toàn bộđoạn mã.

Có hai loại chương trình con, đó là Thủ tục (Sub) và Hàm (Function). Sự khác biệt cơ bản giữa thủ tục và hàm là ở chỗ: Thủ tục là một chương trình con được viết để thực hiện một hoặc một vài thao tác nhưng không trả về một giá trị nào và không được sử dụng trong một biểu thức, trong khi đó, hàm là một chương trình con được viết để tính toán và trả về một giá trị nào đó và có thểđược sử dụng trong một biểu thức. Cả hàm và thủ tục đều có thể nhận các đối số.

Cách khai báo thủ tục:

[Private|Public] [Static] Sub <Tên thủ tục>(<Danh sách các đối số>) <các lệnh>

End Sub. Trong đó

- Private|Public là các từ khoá khai báo phạm vi của thủ tục là toàn cục hay cục bộ. Nếu không được chỉ rõ, Visual basic sẽ tự coi thủ tục nó là Private.

- [Static] là từ khoá chỉ ra thủ tục đó là tĩnh.

- Sub và End Sub: Là các từ khoá bắt buộc có trong khai báo thủ tục. - <Tên thủ tục>: Là tên của thủ tục mà người dùng muốn đặt.

- <Danh sách các đối số>: Là danh sách các đối truyền vào thủ tục. Nếu có nhiều đối số thì mỗi đối sốđược phân cách bởi dấu phẩy. Mỗi đối số giống như một khai báo biến và hoạt động giống như một biến trong thủ tục. Cú pháp khai báo đối số là:

[optional] [byval] <tên biến> as <kiểu>. Cú pháp khai báo một hàm như sau:

[Private|Public] [Static] Function <tên hàm> (<danh sách các đối số> as <kiểu>) <các lệnh>

End Function

Ở đây mọi thứ đều giống như trong khai báo thủ tục, điều khác biệt duy nhất là vì hàm trả về giá trị, cho nên trong khai báo hàm ta có thêm khai báo kiểu giá trị trả về của hàm bằng chỉ thị: as <kiểu>.

Vì hàm trả về một giá trị cho nên trước khi kết thúc một hàm (trước câu lệnh End Function), chúng ta luôn phải gán giá trị trả về vào hàm bằng câu lệnh gán như sau:

Một phần của tài liệu Sử dụng Excel trong quản lí (Trang 133 - 148)

Tải bản đầy đủ (PDF)

(173 trang)