Khai báo Optional - Có thể bạn chưa biết

Liên hệ QC

vbavn

Thành viên chính thức
Tham gia
10/1/08
Bài viết
70
Được thích
145
Khi các bạn viết một Procedure (có thể là Sub-Thủ tục hoặc Function-Hàm) chúng ta phải sử dụng cố định các tham số. Điều này sẽ làm cho hàm và thủ tục của các bạn kém linh động.
Ví dụ: Hàm tính tổng
Mã:
Function [B]TinhTong[/B](sng1 [B]As [/B]Single, sng2 [B]As [/B]Single) [B]As [/B]Single
Ở đây chúng ta thấy hàm này có hai tham số cố định là sng1 và sng2.

Trong một số trường hợp, các bạn có thể dùng khai báo Optional nhằm cho phép người dùng có thể nhập vào hay không.

Ví dụ:
Mã:
Function [B]CongTruNhanChia[/B](sng1 [B]As [/B]Singel, sng2 [B]As [/B]Single, [COLOR=Blue][B]Optional [/B][/COLOR]PhepToan As String="+") As Single
Khi khai báo dùng Optional như đối với hàm ở trên, người sử dụng có thể hay không bắt buộc nhập vào phép toán. Nếu người dùng không nhập vào thì phép tính cộng (+) sẽ được dùng.

Vấn đề ở đây là làm sao chúng ta có thể kiểm tra xem người dùng có nhập vào hay không?

Có bạn sẽ trả lời, tôi dùng hàm IsMissing.
Câu trả lời ở trên sẽ là đúng và sai !

Tại sao là đúng? Và tại sao sai?

Đúng, hàm IsMissing nhằm kiểm tra xem người dùng có nhập vào hay không. Nhưng hàm này chỉ áp dụng nếu bạn khai báo kiểu Variant. Trong trường hợp các kiểu dữ liệu khác hàm sẽ trả về False.

Chú ý:

_ Khai báo Optional phải đặt cuối cùng. Ví dụ ta không thể đặt khai báo Optional như thế này:
Mã:
Function CongTruNhanChia([B][COLOR=Blue]Optional [/COLOR][/B]PhepToan As String="+", sng1 As Single, sng2 As Single) As Single
Khai báo như trên là sai.

_ Khai báo Optional không được dùng cho User Defined Types (biến kiểu người dùng-UTDs).

_ Vậy chúng ta có thể dùng nhiều khai báo Optional hay không?

Xin thưa, được, nhưng bạn chú ý cho nguyên tắc ở trên. Tức là khai báo Optional phải đặt cuối.

Vbavn
 
Chỉnh sửa lần cuối bởi điều hành viên:
ParamArray - Có thể bạn chưa biết

Trong một số trường hợp, số lượng các tham số có thể chúng ta không biết trước được.
Ví dụ: Hàm tính tổng, nếu các bạn khai báo
Mã:
Function [B]TinhTong[/B](sng1 [B]As [/B]Single, sng2 [B]As [/B]Single) [B]As [/B]Single
Thì bạn chỉ có thể tính tổng của hai số mà thôi. Đôi khi bạn muốn tính tổng của ba số, bốn số,... thì sao?
Cách giải quyết là chúng ta dùng kiểu tham số ParamArray.

ParamArray cho phép bất kỳ số lượng tham số truyền cho một Procedure.
Chỉ có phần tử ParamArray là có thể có hoặc không (option). Các tham số trước ParamArray là bắt buộc.

Một số nguyên tắc khi sử dụng ParamArray:

  • Biến ParamArray phải là một mảng của các phần tử kiểu Variant.
  • Biến ParamArray phải là tham số cuối cùng trong danh sách tham số.
  • Không có tham số nào được khai báo với Optional trong danh sách. Đó là vì ta không thể dùng chung, tức là vừa có khai báo dùng Optional và vừa có khai báo dùng ParamArray. Bạn chỉ có thể dùng một trong chúng mà thôi.
  • Chỉ được sử dụng một ParamArray trong một Procedure mà thôi.
  • Do tham số ParamArray là một mảng, nên nó luôn được khai báo với ByRef.
  • Mảng ParamArray là mảng được bắt đầu bằng 0 bất chấp việc khai báo Option Base của module. Nếu không có biến nào được truyền thì LBound bằng 0 và UBound là -1.
  • Biến kiểu người dùng (UDT) không thể là một phần tử của ParamArray.
Các bạn có thể đọc thêm tại đây:http://www.cpearson.com/Excel/optionalargumentstoprocedures.aspx

Vbavn
 
Web KT

Bài viết mới nhất

Back
Top Bottom