1. Phương pháp trả về nhiều hơn một giá trị trả về cho hàm Function
Đối với Function, chúng ta biết rằng có thể trả về cho nó một giá trị trả về. Tuy nhiên, đôi khi chúng ta muốn trả về cho hàm nhiều hơn một giá trị trả về. Thật đáng tiếc đó là Function chỉ có một giá trị trả về. Việc gia tăng số lượng giá trị trả về cho Function là việc vô lý không thể nào làm được.
Tuy nhiên, bằng cách giả tạo là một giá trị trả về, chúng ta có thể trả về cho Function số lượng giá trị trả về nhiều hơn 1.
Việc sử dụng các đối số làm nơi lưu trữ giá trị trả về thường được cho là tốt nhất, tuy nhiên một cách đơn giản nhất chính là sử dụng mảng. Sau đây tôi sẽ lần lượt giới thiệu 3 ví dụ.
2. Các ví dụ:
2.1 Giá trị trả về là mảng:
Giá trị trả về của hàm Split là kiểu Variant, nói cách khác v trong code trên chính là mảng. Và vì vậy giá trị trả về của hàm MultiReturn là mảng.
Chạy thủ tục sau:
Kết quả:
2.2 Mảng hóa giá trị trả về bằng hàm Array:
Chạy thủ tục sau:
Ta được kết quả là:
2.3 Sử dụng đối số truyền vào là nơi lưu trữ giá trị trả về
Đối số thứ nhất ( a_sPath ) đóng vai trò là INPUT, đối số thứ hai và thứ ba ( a_sDir, a_sFile ) đóng vai trò là OUTPUT.
Bây giờ chạy thủ tục sau:
Kết quả sẽ là:
Nguồn tham khảo và dịch:
Đối với Function, chúng ta biết rằng có thể trả về cho nó một giá trị trả về. Tuy nhiên, đôi khi chúng ta muốn trả về cho hàm nhiều hơn một giá trị trả về. Thật đáng tiếc đó là Function chỉ có một giá trị trả về. Việc gia tăng số lượng giá trị trả về cho Function là việc vô lý không thể nào làm được.
Tuy nhiên, bằng cách giả tạo là một giá trị trả về, chúng ta có thể trả về cho Function số lượng giá trị trả về nhiều hơn 1.
- Sử dụng mảng làm giá trị trả về.
- Mảng hóa giá trị trả về bằng hàm Array
- Sử dụng đối số truyền vào là nơi lưu trữ giá trị trả về
Việc sử dụng các đối số làm nơi lưu trữ giá trị trả về thường được cho là tốt nhất, tuy nhiên một cách đơn giản nhất chính là sử dụng mảng. Sau đây tôi sẽ lần lượt giới thiệu 3 ví dụ.
2. Các ví dụ:
2.1 Giá trị trả về là mảng:
Mã:
Function MultiReturn(a_sPath)
Dim v
v = Split(a_sPath, "\")
MultiReturn = v
End Function
Chạy thủ tục sau:
Mã:
Sub MultiReturnTest()
Dim sPath
Dim v
Dim s
sPath = "C:\web\test\abc.txt"
v = MultiReturn(sPath)
For Each s In v
Debug.Print s
Next
End Sub
Mã:
C:
web
test
abc.txt
Mã:
Function MultiReturnArray(a_sPath)
Dim sPath
Dim sFile
Dim i
i = InStrRev(a_sPath, "\")
sPath = Left(a_sPath, i)
sFile = Mid(a_sPath, i + 1)
MultiReturnArray = Array(sPath, sFile)
End Function
Mã:
Sub MultiReturnArrayTest()
Dim sPath
Dim v
Dim s
sPath = "C:\web\test\abc.txt"
v = MultiReturnArray(sPath)
For Each s In v
Debug.Print s
Next
End Sub
Mã:
C:\web\test\
abc.txt
Đối số thứ nhất ( a_sPath ) đóng vai trò là INPUT, đối số thứ hai và thứ ba ( a_sDir, a_sFile ) đóng vai trò là OUTPUT.
Mã:
Sub MultiParam(a_sPath, a_sDir, a_sFile)
Dim sPath
Dim sFile
Dim i
i = InStrRev(a_sPath, "\")
a_sDir = Left(a_sPath, i)
a_sFile = Mid(a_sPath, i + 1)
End Sub
Mã:
Sub MultiParamTest()
Dim sPath
Dim s
Dim sDir
Dim sFile
sPath = "C:\web\test\abc.txt"
Call MultiParam(sPath, sDir, sFile)
Debug.Print sDir
Debug.Print sFile
End Sub
Mã:
C:\web\test\
abc.txt
Bạn cần đăng nhập để thấy link