Kết quả hàm UDF trả về không như mong muốn. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

emgaingayngo

Thành viên hoạt động
Tham gia
9/2/07
Bài viết
141
Được thích
5
Mình có hàm thứ 1 như sau:
PHP:
Function MuoiHai(So As String) As String
Dim TT
If So = "" Then
MuoiHai = ""
Else
TT = Array("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11")
So = CLng(So) Mod 12
MuoiHai = TT(So)
End If
End Function

Hàm thứ 2 là :
PHP:
Function MuoiHaiTySuu(the As String, So As String) As String
Dim kq As String
Select Case the
Case "Ty"
   If MuoiHai(So) = "04" Then kq = So
Case "Suu"
   If MuoiHai(So) = "05" Then kq = So
Case "Dan"
   If MuoiHai(So) = "06" Then kq = So
Case "Mao"
   If MuoiHai(So) = "07" Then kq = So
Case "Thin"
   If MuoiHai(So) = "08" Then kq = So
Case "Ti"
   If MuoiHai(So) = "09" Then kq = So
Case "Ngo"
   If MuoiHai(So) = "10" Then kq = So
Case "Mui"
   If MuoiHai(So) = "11" Then kq = So
Case "Than"
   If MuoiHai(So) = "00" Then kq = So
Case "Dau"
   If MuoiHai(So) = "01" Then kq = So
Case "Tuat"
   If MuoiHai(So) = "02" Then kq = So
Case "Hoi"
   If MuoiHai(So) = "03" Then kq = So
End Select
MuoiHaiTySuu = kq
End Function

Khi sử dụng MuoiHaiTySuu("Ty", "16") thì kết quả hàm trả về là 04 chứ không phải là 16, xin cho hỏi tại sao như vậy và cách khắc phục. Chân thành cảm ơn!
 
Mình có hàm thứ 1 như sau:
PHP:
Function MuoiHai(So As String) As String
Dim TT
' , , , 
TT = Array("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11")
So = CLng(So) Mod 12
MuoiHai = TT(So)
End If
End Function

Hàm thứ 2 là :
PHP:
Function MuoiHaiTySuu(the As String, So As String) As String
Dim kq As String
Select Case the
Case "Ty":      If MuoiHai(So) = "04" Then kq = So
Case "Suu":    If MuoiHai(So) = "05" Then kq = So
Case "Dan":    If MuoiHai(So) = "06" Then kq = So
Case "Mao":    If MuoiHai(So) = "07" Then kq = So
Case "Thin":    If MuoiHai(So) = "08" Then kq = So
Case "Ti":       If MuoiHai(So) = "09" Then kq = So
Case "Ngo":    If MuoiHai(So) = "10" Then kq = So
Case "Mui":     If MuoiHai(So) = "11" Then kq = So
Case "Than":   If MuoiHai(So) = "00" Then kq = So
Case "Dau":    If MuoiHai(So) = "01" Then kq = So
Case "Tuat":   If MuoiHai(So) = "02" Then kq = So
Case "Hoi":     If MuoiHai(So) = "03" Then kq = So
End Select
MuoiHaiTySuu = kq
End Function
!

Khi sử dụng MuoiHaiTySuu("Ty", "16") thì kết quả hàm trả về là 04 chứ không phải là 16 được. Vì cả hai hàm lúc nào cũng chỉ trả về những chuỗi ký số < 13


& cách khắc phục là bạn cần diễn dịch iêu cầu của bạn.
 
Upvote 0
Do bạn không khai báo Byval cho biến So ở hàm MuoiHai nên khi đưa biến vào hàm MuoiHai sự thay đổi giá trị của biến sẽ được lưu lại. Các cách khắc phục:
1. Khai báo Byval cho biến So
PHP:
Function MuoiHai(ByVal So As String) As String
Dim TT
If So = "" Then
MuoiHai = ""
Else
TT = Array("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11")
So = CLng(So) Mod 12
MuoiHai = TT(So)
End If
End Function
2. Không làm thay đổi biến So trong hàm MuoiHai
PHP:
Function MuoiHai(So As String) As String
Dim TT
If So = "" Then
MuoiHai = ""
Else
TT = Array("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11")
MuoiHai = TT(CLng(So) Mod 12)
End If
End Function
Ngoài ra, theo như tôi dịch mục đích từ hàm của bạn thì bạn chỉ cần 1 hàm bên dưới này để thay thế cho 2 hàm của bạn.
PHP:
Function MuoiHaiTySuu(the As String, So As String) As String
If Array("Than", "Dau", "Tuat", "Hoi", "Ty", "Suu", "Dan", "Mao", "Thin", "Ti", "Ngo", "Mui")(CLng(So) Mod 12) = the Then MuoiHaiTySuu = So
End Function
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom