Giúp sửa lỗi Code (1 người xem)

Liên hệ QC

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

emconnhaxd

Thành viên chính thức
Tham gia
10/1/10
Bài viết
51
Được thích
0
mình sưu tầm 1 code

Public Function kl(strText As String)
If Right(strText, 1) = " " Then
kl = "0"
Else
strText = Replace(strText, "m2", "")
strText = Replace(strText, "m3", "")
strText = Replace(strText, "M2", "")
strText = Replace(strText, "M3", "")
strText = Replace(strText, ",", ".")

If vitri(" ", strText) < Len(strText) And vitri(" ", strText) > 1 Then
strText = Right(strText, Len(strText) - vitri(" ", strText))
'Else
End If

kl = ""
For i = 1 To Len(strText)
kytu = Mid(strText, i, 1)
If kytu = "0" Or kytu = "1" Or kytu = "2" Or kytu = "3" Or kytu = "4" Or kytu = "5" Or kytu = "6" Or kytu = "7" _
Or kytu = "8" Or kytu = "9" Or kytu = "+" Or kytu = "-" Or kytu = "*" Or kytu = "/" Or kytu = "^" Or kytu = "." _
Or kytu = "," Or kytu = "(" Or kytu = ")" Or kytu = "%" Then
kl = kl & kytu
End If
Next
If kl = "" Then
kl = 0
End If
End If
If IsError(Evaluate(kl)) Then
kl = ""
Else
kl = Round(Evaluate(kl), 3)
If kl = 0 Then
kl = ""
End If
End If
End Function


Nó báo lỗi ở dòng đầu, ae sửa giúp
 
mình sưu tầm 1 code

Public Function kl(strText As String)
If Right(strText, 1) = " " Then
kl = "0"
Else
strText = Replace(strText, "m2", "")
strText = Replace(strText, "m3", "")
strText = Replace(strText, "M2", "")
strText = Replace(strText, "M3", "")
strText = Replace(strText, ",", ".")

If vitri(" ", strText) < Len(strText) And vitri(" ", strText) > 1 Then
strText = Right(strText, Len(strText) - vitri(" ", strText))
'Else
End If

kl = ""
For i = 1 To Len(strText)
kytu = Mid(strText, i, 1)
If kytu = "0" Or kytu = "1" Or kytu = "2" Or kytu = "3" Or kytu = "4" Or kytu = "5" Or kytu = "6" Or kytu = "7" _
Or kytu = "8" Or kytu = "9" Or kytu = "+" Or kytu = "-" Or kytu = "*" Or kytu = "/" Or kytu = "^" Or kytu = "." _
Or kytu = "," Or kytu = "(" Or kytu = ")" Or kytu = "%" Then
kl = kl & kytu
End If
Next
If kl = "" Then
kl = 0
End If
End If
If IsError(Evaluate(kl)) Then
kl = ""
Else
kl = Round(Evaluate(kl), 3)
If kl = 0 Then
kl = ""
End If
End If
End Function


Nó báo lỗi ở dòng đầu, ae sửa giúp
Nó báo lỗi khi strtext rỗng (emty).
Mình thấy trong hàm còn có 1 hàm tên là "vitri" k biết nó tn?
Mà hình như có 1 topic của bạn hỏi về hàm diễn giải dùng evaluate, có bạn đã đề xuất cho bạn 1 hàm nhìn ngắn gọn hơn. Bạn nên sử dụng case thay cho 1 loạt or
 
Nó báo lỗi khi strtext rỗng (emty).
Mình thấy trong hàm còn có 1 hàm tên là "vitri" k biết nó tn?
Mà hình như có 1 topic của bạn hỏi về hàm diễn giải dùng evaluate, có bạn đã đề xuất cho bạn 1 hàm nhìn ngắn gọn hơn. Bạn nên sử dụng case thay cho 1 loạt or
Hàm Evaluate mình dùng được rồi. Code vừa rồi mình trúc xuất từ code của phần mềm Gxd, khi code này chạy thì mình chĩ cần gõ công thức =kl( ô cần tính)
 
đây là file mình dùng lệnh đó, nhưng đoạn code đó dài quá, mình cắt phần lệnh KL ra
 

File đính kèm

Lỗi là phải rồi, câu lệnh viết

If Right(strText, 1) = " " Then

vậy khi strText="" thì làm sao hàm Right thực hiện được. Bạn thay thử như sau

If strText = " " Then


P/s: Trên file của bạn thì lỗi không phải của Hàm mà là lỗi gọi Hàm thiếu tham số.
 
Lần chỉnh sửa cuối:
Lỗi là phải rồi, câu lệnh viết

If Right(strText, 1) = " " Then

vậy khi strText="" thì làm sao hàm Right thực hiện được. Bạn thay thử như sau

If strText = " " Then


P/s: Trên file của bạn thì lỗi không phải của Hàm mà là lỗi gọi Hàm thiếu tham số.
Không được bạn ah mình đã thử
 

File đính kèm

Đúng rồi, hàm không lỗi mà là sử dụng hàm lỗi.
Bạn khai báo hàm:

Public Function kl(strText As String)

Nhưng khi gọi hàm (=kl() ) bạn không cho tham số thì hàm lỗi. Nếu bạn gọi =kl("") thì OK

Muốn làm theo bạn thì có thể sửa như sau:

Public Function kl(Optional strText As String = "")
 
Đúng rồi, hàm không lỗi mà là sử dụng hàm lỗi.
Bạn khai báo hàm:

Public Function kl(strText As String)

Nhưng khi gọi hàm (=kl() ) bạn không cho tham số thì hàm lỗi. Nếu bạn gọi =kl("") thì OK

Muốn làm theo bạn thì có thể sửa như sau:

Public Function kl(Optional strText As String = "")

Bạn có thể sửa trực tiếp trên file được không: phần modul
 

File đính kèm

Trời ơi, bạn chỉ thay cái khai báo tên Hàm thôi mà. Mình Test chắc chắn rồi, cứ thay vào đi rồi thử mà xem
 
Bạn có thể sửa trực tiếp trên file được không: phần modul
Đã xem file của bạn.
Bạn copy code thiếu đoạn code vitri nên đoạn code trên báo lỗi.
Muốn code trên bán lỗi thì code phải đầy đủ thế này :
Mã:
 Function vitri(kytu As String, chuoidc As String) sodaucach = 0
 For i = 1 To Len(chuoidc)
 kytuchuoi = Mid(chuoidc, i, 1)
 If kytuchuoi = kytu Then
 vitri = i
 End If
 Next
 End Function
 Public Function kl(strText As String)
 If Right(strText, 1) = " " Then
 kl = "0"
 Else
 strText = Replace(strText, "m2", "")
 strText = Replace(strText, "m3", "")
 strText = Replace(strText, "M2", "")
 strText = Replace(strText, "M3", "")
 strText = Replace(strText, ",", ".")
     
     If vitri(" ", strText) < Len(strText) And vitri(" ", strText) > 1 Then
     strText = Right(strText, Len(strText) - vitri(" ", strText))
     'Else
     End If
     
     kl = ""
     For i = 1 To Len(strText)
         kytu = Mid(strText, i, 1)
         If kytu = "0" Or kytu = "1" Or kytu = "2" Or kytu = "3" Or kytu = "4" Or kytu = "5" Or kytu = "6" Or kytu = "7" _
             Or kytu = "8" Or kytu = "9" Or kytu = "+" Or kytu = "-" Or kytu = "*" Or kytu = "/" Or kytu = "^" Or kytu = "." _
             Or kytu = "," Or kytu = "(" Or kytu = ")" Or kytu = "%" Then
             kl = kl & kytu
         End If
     Next
     If kl = "" Then
     kl = 0
     End If
 End If
 If IsError(Evaluate(kl)) Then
 kl = ""
 Else
     kl = Round(Evaluate(kl), 3)
         If kl = 0 Then
             kl = ""
         End If
 End If
 End Function
Code trong file này có lỗi như thế này :
25 cây/m2 * 12m2 không cho kết quả
Hàm Evaluate mình dùng được rồi. Code vừa rồi mình trúc xuất từ code của phần mềm Gxd, khi code này chạy thì mình chĩ cần gõ công thức =kl( ô cần tính)
Muốn thế này thì dùng đoạn code ở topic kia không báo lỗi như mình nói ở trên
Đoạn code hoàn chỉnh bạn quanluu1989 làm giùm mình nè (ngắn gọn hơn)

Mã:
Function Klg(rng As String)
Dim i As Integer
Dim strTemp As String
rng = Application.Trim(Right(rng, Len(rng) - InStr(rng, ":")))
rng = Replace(rng, "m2", "")
rng = Replace(rng, "m3", "")
For i = 1 To Len(rng)
    Select Case Asc(Mid(rng, i, 1))
    Case 40 To 57, 94
        strTemp = strTemp & Mid(rng, i, 1)
    End Select
Next i
strTemp = Replace(strTemp, ",", ".")
strTemp = Replace(strTemp, "/*", "*")
strTemp = Replace(strTemp, "/+", "+")
strTemp = Replace(strTemp, "/-", "-")
strTemp = Replace(strTemp, "//", "/")
If Right(strTemp, 1) = "/" Then strTemp = Left(strTemp, Len(strTemp) - 1)
Klg = Evaluate(strTemp)
End Function
Công thức là =Klg( Ô cần tính)
P/S : hàm tự tạo tốt nhất để từ 3 ký tự trở lên.
TÔi cũng dùng code này để làm dự toán đây nên tôi hiểu ý bạn muốn làm gì
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom