Giúp đỡ tôi sửa lỗi hàm

Liên hệ QC

trungnt

Thành viên hoạt động
Tham gia
2/2/07
Bài viết
135
Được thích
88
Tôi đã tự viết 1 source code trong bảng tính kết cấu, khi cho chạy thử thì cũng tạm ổn nhưng có 1 điều tôi thử xóa các ô đã gán giá trị hay công thức thì không có vấn đề gì cả, chỉ riêng khi chọn ô I79 nhấn phím Delete thì thủ tục báo lỗi là: Type mismatch có thể tạm dịch là kiểu ghép đôi không xứng, tôi chưa từng gặp lỗi như thế này và cũng không biết bắt đầu chỉnh sửa từ đâu? Kính mong các Pác trong diễn đàn quan tâm góp ý sửa giúp tôi ....Tôi xin cám ơn nhìu nhìu. Code tôi đã viết và kể cả hình minh họa.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim b1, b2, b3, b4, b5, c, d1, d2, d3, d4, D, En, TsHD, TsE, Khs, K2, Phi As Single
With Sheets("BTKCAU")
b1 = .Range("D56").Value
b2 = .Range("F64").Value
b3 = .Range("D79").Value
b4 = .Range("D110").Value
b5 = .Range("D122").Value
c = .Range("J41").Value
d1 = .Range("E37").Value
d2 = .Range("E38").Value
d3 = .Range("E39").Value
d4 = .Range("E40").Value
D = .Range("C87").Value
En = .Range("F41").Value
TsHD = .Range("F82").Value
TsE = .Range("F83").Value
Khs = .Range("F30").Value
K2 = .Range("I32").Value * .Range("F26").Value
Phi = .Range("K41").Value
End With
If (c > 0 And c <= 0.038) And d1 > 0 And d2 > 0 And d3 > 0 And d4 > 0 And En > 0 And Khs > 0 And (Phi > 0 And Phi <= 35) Then
Sheets("BTKCAU").Range("I56").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b1)
Sheets("BTKCAU").Range("H64").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b2)
Sheets("BTKCAU").Range("I79").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b3)
Sheets("BTKCAU").Range("I110").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b4)
Sheets("BTKCAU").Range("I122").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b5)
Sheets("BTKCAU").Range("J60").Formula = NS1chieu(Sheets("BTRA").Range("AF29:AG33"), Khs)
Sheets("BTKCAU").Range("J94").Formula = NS1chieu(Sheets("BTRA").Range("AI29:AJ33"), Khs)
Sheets("BTKCAU").Range("J133").Formula = NS1chieu(Sheets("BTRA").Range("AI29:AJ33"), Khs)

Sheets("BTKCAU").Range("I87").Formula = Noisuy2chieu(Phi, D, Sheets("BTRA").Range("A64:L71")) / 1000

Sheets("BTKCAU").Range("F117").Formula = Noisuy2chieu(Sheets("BTKCAU").Range("F116").Value, Sheets("BTKCAU").Range("F115").Value, Sheets("BTRA").Range("A42:U60"))

Sheets("BTKCAU").Range("F129").Formula = Noisuy2chieu(Sheets("BTKCAU").Range("F128").Value, Sheets("BTKCAU").Range("F127").Value, Sheets("BTRA").Range("A42:U60"))

Select Case K2
Case Is <= 100
Sheets("BTKCAU").Range("J92").Value = 1
Case Is >= 5000
Sheets("BTKCAU").Range("J92").Value = 0.6
Case 100 To 5000
Sheets("BTKCAU").Range("J92").Formula = NS1chieu(Sheets("TRACBBOX").Range("H21:I23"), K2)
End Select

Select Case TsE
Case Is > 7
Sheets("BTKCAU").Range("j84").Formula = Noisuy2chieu(TsE, TsHD, Sheets("BTRA").Range("A16:AL25")) / NS1chieu(Sheets("BTRA").Range("Z29:AA51"), Phi)
Case Is <= 7
Sheets("BTKCAU").Range("j84").Formula = Noisuy2chieu(TsE, TsHD, Sheets("BTRA").Range("A3:V12")) / NS1chieu(Sheets("BTRA").Range("W29:X51"), Phi)
End Select

Else
MsgBox "Mời bạn xem lại dữ liệu nhập vào", vbInformation + vbYes, "CHU Y !"
Exit Sub
End If
End Sub
 
Lần chỉnh sửa cuối:
Vài góp í với bạn:

1* Bạn nên tận dụng những chức năng của diễn đàn khi đưa bài lên; Ở đây, đó là các đoạn mã macro nên dùng 1 trong 2 cặp ['Code] ... ['/Code] hay ['php]. . .['/PHP] . Hãy giúp người khác khi muốn người khác giúp mình & đừng giận nha!
2 * các câu lệnh
Mã:
Sheets("BTKCAU").Range("I56").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b1)
Sheets("BTKCAU").Range("H64").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b2)
[B]Sheets("BTKCAU").Range("I79").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b3)[/B]
Sheets("BTKCAU").Range("I110").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b4)
Sheets("BTKCAU").Range("I122").Formula = NS1chieu(Sheets("BTRA").Range("AL29:AM35"), b5)
Sheets("BTKCAU").Range("J60").Formula = NS1chieu(Sheets("BTRA").Range("AF29:AG33"), Khs)
Sheets("BTKCAU").Range("J94").Formula = NS1chieu(Sheets("BTRA").Range("AI29:AJ33"), Khs)
Sheets("BTKCAU").Range("J133").Formula = NS1chieu(Sheets("BTRA").Range("AI29:AJ33"), Khs)
có thể sẽ xinh xẽo hơn nếu bạn đặt cho vùng 'Al29 : AG33' 1 cái tên đáng iêu nào đó, VD 'DeNhin' hay 'BanTra', . . . .
Đúng là ô 'I79' của bạn có liên quan đến hàm tự tạo NS1Chieu() Vậy bạn nên đưa lên luôn,

Bổ sung:
PHP:
 Private Sub WorkChange()
Dim b1, b2, b3, b4, b5, c, d1, d2, d3, d4, D, En, TsHD, TsE, Khs, K2, Phi As Single
   
    Sheets("BTKCAU").Select
    b1 = Range("D56"):         b2 = Range("F64")
    b3 = Range("D79"):         b4 = Range("D110")
    b5 = Range("D122"):        c = Range("J41")
    d1 = Range("E37"):         d2 = Range("E38")
    d3 = Range("E39"):         d4 = Range("E40")
    D = Range("C87"):          En = Range("F41")
    TsHD = Range("F82"):       TsE = Range("F83")
    Khs = Range("F30"):        K2 = Range("I32") * Range("F26")
    Phi = Range("H82")
   
   If c * d1 * d2 * d3 * d4 * En * Khs * Phi > 0 And c <= 0.038 And Phi <= 35 Then
        Range("I56").Formula = NS1chieu(BanTRA, b1)
        Range("H64").Formula = NS1chieu(BanTRA, b2)
        Range("I79").Formula = NS1chieu(BanTRA, b3)
        Range("I110").Formula = NS1chieu(BanTRA, b4)
        Range("I122").Formula = NS1chieu(BanTRA, b5)
        Range("J60").Formula = NS1chieu(BanTRA, Khs)
        Range("J94").Formula = NS1chieu(BanTRA, Khs)
        Range("J133").Formula = NS1chieu(BanTRA, Khs)
        
        Range("I87").Formula = Noisuy2chieu(Phi, D, Sheets("BTRA").Range("A64:L71")) / 1000
        
        Range("F117").Formula = Noisuy2chieu(Range("F116"), Range("F115"), Sheets("BTRA").Range("A42:U60"))
        
        Range("F129").Formula = Noisuy2chieu(Range("F128"), Range("F127"), Sheets("BTRA").Range("A42:U60"))
        
        Select Case K2
         Case Is <= 100
             Range("J92").Value = 1
         Case Is >= 5000
             Range("J92").Value = 0.6
         Case 100 To 5000
             Range("J92").Formula = NS1chieu(Sheets("TRACBBOX").Range("H21:I23"), K2)
        End Select

        Select Case TsE
         Case Is > 7
             Range("j84").Formula = Noisuy2chieu(TsE, TsHD, Sheets("BTRA").Range("A16:AL25")) _
                / NS1chieu(Sheets("BTRA").Range("Z29:AA51"), Phi)
         Case Is <= 7
             Range("j84").Formula = Noisuy2chieu(TsE, TsHD, Sheets("BTRA").Range("A3:V12")) _
                / NS1chieu(Sheets("BTRA").Range("W29:X51"), Phi)
        End Select
    
    Else
        MsgBox "MOI BAN XEM LAI SO LIEU NHAP DAU VAO" & Chr(10) & Chr(13) & _
              "(coù soá lieäu nhaäp giaù trò aâm)", vbInformation, vbYes, "CHU Y !"
    Exit Sub
    End If
End Sub
Theo mình bạn nên dùng tên khác cho macro này, vì bạn có xài Target làm gì đâu!
* Các câu trong MSGBOX không thể xem tiếng việt được đâu, sẽ là tiếng Ả rập đó!
 
Lần chỉnh sửa cuối:
Tiếp thu ý kiến của các anh, tôi xin up lên nguyên bài mong các a quan tâm giúp đỡ .......... tôi cám ơn nhiều.
 

File đính kèm

  • BTKC.zip
    203.6 KB · Đọc: 77
Web KT
Back
Top Bottom