Xin giúp tôi hiện thị thông báo lỗi

  • Thread starter Thread starter trungnt
  • Ngày gửi Ngày gửi
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 có thiết kế 1 bảng tính, trong bảng tính này tôi muốn tại vị trí 2 ô nhập số liệu đầu vào mà vượt quá giá trị cho phép thì hiện thị thông báo. Nhưng khi tôi viết đoạn code bỏ vào trong sự kiện change hoặc selectionchange của worksheet thì dòng thông báo hiện liên tục mỗi khi ra khỏi ô nhập khác (mặc dù số liệu nhập nằm trong vùng cho phép) và cũng khi nhập ngoài vùng giá trị thì cũng không thấy hiển thị thông báo. Lưu ý ở đây tôi không muốn dùng Data validation vì điều kiện khoảng giữa không cho số thập phân (vd 0.05 < x <0.12). Rất mong các anh chị chỉ dẫn các khắc phục. Đoạn code của tôi đã viết như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, Phi As Single
    With Sheets("BTKCAU4L").Select
        c = Range("J41")
        Phi = Range("K41")
    End With
    Select Case c
      Case 0.005 To 0.038
        Exit Sub
      Case Else
        MsgBoxUni VNI("Môøi baïn xem laïi giaù trò löïc dính c ñaõ nhaäp, _
           baïn coù theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 _
           ñeå laáy giaù trò löïc dính c töông öùng cho moãi loaïi ñaát!!!" & Chr(10) _
           & "Hoaëc nhaán nuùt tham khaûo soá lieäu E,c,Phi ôû phía treân _
           trong baûng tính..."), vbRetryCancel + vbExclamation, _
            VNI("KIEÅM TRA LÖÏC DÍNH C !!! ")
    End Select
    If Phi >= 7 And Phi <= 35 Then
        Exit Sub
    Else
        MsgBoxUni VNI("Môøi baïn xem laïi giaù trò goùc noäi ma saùt phi ñaõ nhaäp, _
             baïn coù theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 ñeå _
             laáy giaù trò löïc dính c töông öùng cho moãi loaïi ñaát!!!" & Chr(10) _
             & "Hoaëc nhaán nuùt tham khaûo soá lieäu E,c,Phi ôû phía treân trong _
             baûng tính..."), vbRetryCancel + vbExclamation, VNI("KIEÅM TRA _
             GOÙC NOÄI MA SAT !!! ")
    End If
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tôi chưa hiểu lắm về đoạn code này nhưng vẫn cãm giác dc rằng có gì đó ko ổn.... Bạn dùng sự kiện Worksheet_Change, vậy sao trong code chẳng thấy chổ nào nói về Target vậy? Target tức là cái cell mà bạn gõ gì đó vào ấy
Ví dụ như:
If Target.Value = .. gì gì đó Then
.... vân vân....
ANH TUẤN
 
Upvote 0
Chào bạn,
Sự kiện khi worksheet change, nếu bạn gán như thế thì khi có bất cứ thay đổi ở ô nào thì thủ tục vẫn phải kiểm tra hai ô định trước của bạn. Bạn phải giới hạn vùng kiểm tra lại như sau:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r,c as integer
r = Target.Rows
c = Target.Columns
if (r=41 and c=10) or (r=41 and c=11) then 'Nếu như ô thay đổi là ô J41 hoặc ô K41 _
  thì mới xử lý, không thì thoát ra'

'Đoạn code của bạn'
'-------------------------------------------'
  Dim zC, Phi As Single
  With Sheets("BTKCAU4L").Select
  zC = Range("J41")
  Phi = Range("K41")
  End With
  Select Case zC
    Case 0.005 To 0.038
    Exit Sub
  Case Else
    MsgBoxUni VNI("Môøi baïn xem laïi giaù trò löïc dính c ñaõ nhaäp, baïn coù  _
      theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 ñeå laáy giaù trò _
      löïc dính ctöông öùng cho moãi loaïi ñaát!!!" & Chr(10) & "Hoaëc nhaán nuùt _
      tham khaûo soá lieäu E,c,Phi ôû phía treân trong baûng tính..."), _
      vbRetryCancel + vbExclamation, VNI("KIEÅM TRA LÖÏC DÍNH C !!! ")
  End Select
  If Phi >= 7 And Phi <= 35 Then
    Exit Sub
  Else
  MsgBoxUni VNI("Môøi baïn xem laïi giaù trò goùc noäi ma saùt phi ñaõ nhaäp, baïn   
  coù theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 ñeå laáy giaù trò löïc 
  dính c töông öùng cho moãi loaïi ñaát!!!" & Chr(10) & "Hoaëc nhaán nuùt tham 
  khaûo soá lieäu E,c,Phi ôû phía treân trong baûng tính..."), vbRetryCancel + 
  vbExclamation, VNI("KIEÅM TRA GOÙC NOÄI MA SAT !!! ")
  End If
'----------------------------------------------------------------------------'
Else
  Exit sub
End If

End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tôi không sành về VBA nhiều nhưng với yêu cầu của bạn tôi nghĩ dùng Validation được chứ:
Bạn chọn custom
=and(j41>=0.005;j41<=0.038)
Còn muốn thông báo gì thì bạn ghi vào mục Error Alert.
Chúc bạn thành công.
 
Upvote 0
Tôi không sành về VBA nhiều nhưng với yêu cầu của bạn tôi nghĩ dùng Validation được chứ:
Bạn chọn custom
=and(j41>=0.005;j41<=0.038)
Còn muốn thông báo gì thì bạn ghi vào mục Error Alert.
Chúc bạn thành công.

Đúng rùi, nếu chỉ cần như vậy thì cần dùng Valiation là đủ, thêm cho ô K41, cũng làm vậy vói đ/k
=and(K41>=7;K41<=035)

như thế gọn hơn nhiều, mà lại k cần VBA,

** còn nếu dùng VBA thì nên sửa theo

Chào bạn,
Sự kiện khi worksheet change, nếu bạn gán như thế thì khi có bất cứ thay đổi ở ô nào thì thủ tục vẫn phải kiểm tra hai ô định trước của bạn. Bạn phải giới hạn vùng kiểm tra lại như sau:

NHƯNG ĐỔI 1 CHÚT THẾ NÀY THÔI
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)

IF Not Intersect(Target, Range("K41:J41")) Is Nothing Then

'Đoạn code của bạn'
'-------------------------------------------'
  Dim zC, Phi As Single
  With Sheets("BTKCAU4L").Select
  zC = Range("J41")
  Phi = Range("K41")
  End With
  Select Case zC
    Case 0.005 To 0.038
    'Exit Sub  Bỏ cái này đi vì cần kiểm tra PHI nữa'
  Case Else
    MsgBoxUni VNI("Môøi baïn xem laïi giaù trò löïc dính c ñaõ nhaäp, baïn coù _
      theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 ñeå laáy giaù _
      trò löïc dính ctöông öùng cho moãi loaïi ñaát!!!" & Chr(10) & "Hoaëc _
      nhaán nuùt tham khaûo soá lieäu E,c,Phi ôû phía treân trong baûng tính..."), _
       vbRetryCancel + vbExclamation,  VNI("KIEÅM TRA LÖÏC DÍNH C !!! ")
  End Select

  If Phi < 7 Or Phi > 35 Then
  MsgBoxUni VNI("Môøi baïn xem laïi giaù trò goùc noäi ma saùt phi ñaõ nhaäp, baïn   
  coù theå tham khaûo trong" & Chr(10) & "qui trình baûng B-3 ñeå laáy giaù trò löïc 
  dính c töông öùng cho moãi loaïi ñaát!!!" & Chr(10) & "Hoaëc nhaán nuùt tham 
  khaûo soá lieäu E,c,Phi ôû phía treân trong baûng tính..."), vbRetryCancel + 
  vbExclamation, VNI("KIEÅM TRA GOÙC NOÄI MA SAT !!! ")
  End If
'----------------------------------------------------------------------------'
End If

End Sub

Nếu nội dung trong MsgBoxUni VNI(. . .) là giống nhau, ta nên cho vô biến chuỗi để dễ coi sóc
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT

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

Back
Top Bottom