Chú ý đến khai báo biến a, b và c của chương trình con này: Trước biến a là từ khóa ByRef. Trước biến b không có từ khóa, nghĩa là sử dụng kiểu mặc định của VB. Trước biến c là từ khóa ByVal. Chương trình con thứ hai được xây dựng trên cùng một mô-đun với chương trình con trên như sau: Public Sub CallTest() Dim va As Long, vb As Long, vc As Long va = 500: vb = 500: vc = 500 '' In giá trị của biến trước khi gọi chương trình con thứ nhất Debug.Print...
Giáo trình hướng dẫn trợ giúp cú pháp CHƯƠ NG IIImã : CƠ Blệnh ẢN VỀ N GƠN Nbáo GỮ LẬP TRÌNHtrong VISUAL BVB ASIC trình viết khai biến Một chương trình đơn giản tạo sau: Public Sub Test(ByRef a As Long, b As Long, ByVal c As Long) a = 100: b = 200: c = 300 End Sub Chú ý đến khai báo biến a, b c chương trình này: Ø Trước biến a từ khóa ByRef Ø Trước biến b khơng có từ khóa, nghĩa sử dụng kiểu mặc định VB Ø Trước biến c từ khóa ByVal Chương trình thứ hai xây dựng mô-đun với chương trình sau: Public Sub CallTest() Dim va As Long, vb As Long, vc As Long va = 500: vb = 500: vc = 500 ' In giá trị biến trước gọi chương trình thứ Debug.Print " Cac gia tri bien truoc goi chuong trinh con:" Debug.Print "va=" & Str(va) Debug.Print "vb=" & Str(vb) Debug.Print "vc=" & Str(vc) ' Gọi chương trình thứ Test va, vb, vc ' In giá trị biến sau gọi chương trình thứ Debug.Print " Cac gia tri bien sau goi chuong trinh con:" Debug.Print "va=" & Str(va) Debug.Print "vb=" & Str(vb) Debug.Print "vc=" & Str(vc) End Sub Trong chương trình thứ có lời gọi đến chương trình thứ để thực thay đổi giá trị biến Kết thực thi chương trình thứ sau: Qua kết thấy rằng: Giá trị biến bị thay đổi không bị thay đổi chúng truyền vào chương trình phụ thuộc vào cách định nghĩa tham số chương trình Ø Biến a Sub Test khai báo với từ khóa ByRef truyền biến vị trí (biến va CallTest) giá trị biến ban đầu bị thay đổi tương ứng với tác động chương trình 53 Ø Biến b Sub Test khai báo mặc định (khơng có từ khóa phía trước nó) truyền biến vị trí (biến vb CallTest) giá trị biến ban đầu bị thay đổi tương ứng với tác động chương trình Ø Biến c Sub Test khai báo với từ khóa ByVal truyền biến vị trí (biến vc CallTest) giá trị biến ban đầu khơng bị thay đổi cho dù chương trình biến bị tác động Qua ví dụ thấy việc truyền tham số cho chương trình phân làm hai trường hợp đặt tên truyền tham số theo tham chiếu truyền tham số theo tham trị 9.3.1 Truyền tham số theo tham chiếu Khi truyền biến vào tham số theo kiểu tham chiếu, địa biến truyền cho chương trình Do đó, câu lệnh chương trình tác động lên tham số ảnh hưởng trực tiếp lên biến truyền tương ứng, nghĩa chương trình kết thúc, giá trị biến truyền theo kiểu bị thay đổi chương trình Truyền tham số theo kiểu tham chiếu mặc định VB, người dùng rõ việc truyền theo tham chiếu cách thêm từ khoá ByRef vào trước khai báo tham số 9.3.2 Truyền tham số theo tham trị Khi truyền biến vào tham số theo kiểu tham trị, giá trị biến truyền cho cho chương trình Do đó, chương trình có câu lệnh tác động lên tham số bị ảnh hưởng biến truyền vào không bị thay đổi, nghĩa sau chương trình kết thúc, giá trị biến giữ nguyên ban đầu Để xác định cách thức truyền liệu cho tham số theo kiểu tham trị, thêm từ khoá ByVal vào trước khai báo tham số Trong Sub Test trên, a b hai tham số truyền theo kiểu tham chiếu c truyền theo kiểu tham trị 9.3.3 Tham số tuỳ chọn Tham số tuỳ chọn tham số có bỏ qua gọi chương trình Các tham số tuỳ chọn khai báo với từ khố Optional chương trình con, khai báo tham số tuỳ chọn phải nằm cuối danh sách tham số khai báo Ví dụ: viết chương trình tính tốn diện tích mặt cắt chữ nhật có kht lỗ (như hình dưới) với yêu cầu sau: Ø Tính diện tích mặt cắt với thông số chiều rộng w, chiều cao h bán kính r lỗ khoét Ø Trong trường hợp thiếu thơng số bán kính r, tính diện tích mặt cắt chữ nhật bỏ qua lỗ khoét Dưới chương trình có sử dụng tham số tuỳ chọn: Public Function DT(w As Double, h As Double, Optional r As Variant) If Not IsMissing(r) Then If (2 * r