Phạm vi tác dụng của Code

Liên hệ QC

thanh tong

Thành viên hoạt động
Tham gia
27/5/10
Bài viết
122
Được thích
11
Các bạn lai giúp mình nhé!
Mình đang học VBA nên có nhiều điều chưa biết, mình viết cái code này:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells > 10 Then
MsgBox " nhap sai"
Target.Cells = ClearComments
Target.Select
Exit Sub
End If
End Sub

Nhưng nó lại hoạt động trên phạm vi rộng quá mà mình chỉ muốn nó hoạt động trên một vùng nhỏ hơn hoặc trên 2 vùng nhỏ mà mình không biết viết nó thế nào các bạn giúp mình nhé
 
Dùng f ương thức If Not Intersect(Target, Range) Is Nothing Then

Ví dụ
If Not Intersect(Target, Range("B2:B9") Is Nothing Then

Hay

If Not Intersect(Target, Range("C1:F99") Is Nothing Then

Hoặc If Not Intersect(Target, Union([A12],Range("D4:N15"))) Is Nothing Then
 
Upvote 0
Các bạn lai giúp mình nhé!
Mình đang học VBA nên có nhiều điều chưa biết, mình viết cái code này:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells > 10 Then
MsgBox " nhap sai"
Target.Cells = ClearComments
Target.Select
Exit Sub
End If
End Sub

Nhưng nó lại hoạt động trên phạm vi rộng quá mà mình chỉ muốn nó hoạt động trên một vùng nhỏ hơn hoặc trên 2 vùng nhỏ mà mình không biết viết nó thế nào các bạn giúp mình nhé

Phải vậy không:
'Giả sử bạn muốn nó chỉ hoạt đông trên cột C (cột 3)
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column <> 3 Then
MsgBox "nhap sai"
Else
MsgBox "tiep tuc"
End If
End Sub
 
Upvote 0
Mình muốn là trên một vùng hoặc trên 2 vùng khác nhau nếu mình nhập một dữ liệu lớn hơn 100 thì nó tự động đưa ra thông báo sau khi tắt thông báo thì ô cell nhập sai cũng bị xoá dữ liệu nhưng mình không biết làm thế nào để cái code của mình chỉ hoạt động trên vùng mình mong muốn, vì mình viết như vậy thì mình đánh số thứ tự nó cũng xoá mất của mình mà mình thì muốn nó chỉ tác động trên những vùng mình muốn ( chảng han [B1:C19,E1:X25])
 
Upvote 0
Mình muốn là trên một vùng hoặc trên 2 vùng khác nhau nếu mình nhập một dữ liệu lớn hơn 100 thì nó tự động đưa ra thông báo sau khi tắt thông báo thì ô cell nhập sai cũng bị xoá dữ liệu nhưng mình không biết làm thế nào để cái code của mình chỉ hoạt động trên vùng mình mong muốn, vì mình viết như vậy thì mình đánh số thứ tự nó cũng xoá mất của mình mà mình thì muốn nó chỉ tác động trên những vùng mình muốn ( chảng han [B1:C19,E1:X25])

Bạn xem file đính kèm, có phải như thế này không ?

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    With [b1:c19,e1:x25].Validation
        .Delete
        .Add 2, , , 0, 100
        .ErrorMessage = "Khong duoc nhap so > 100" & Chr(10) & "Chon Cancel de ket thuc"
    End With
End Sub
 

File đính kèm

Upvote 0
Không thấy bóng dáng target đâu nữa
Câu lệnh add 2, , , 0, 100 nghĩa là sao Bạn?
 
Upvote 0
Không thấy bóng dáng target đâu nữa
Câu lệnh add 2, , , 0, 100 nghĩa là sao Bạn?
Cái đó là người ta dùng mẹo bằng Validation ---> Muốn biết máy số 2, 0, 100 có ý nghĩa gì thì bạn cứ vừa tạo Validation đồng thời record macro sẽ biết ngay
Và đương nhiên đã dùng Validation thì phải biết khuyết điểm lớn nhất của nó là không chống được copy, paste ---> Chẳng hạn copy số 130 từ nơi khác paste vào vùng hoạt động của code thì nó... cóc báo gì cả
Còn cái này có Target đây:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Union([B1:C19], [E1:X25]), Target) Is Nothing Then
    If Not IsNumeric(Target) Then
      MsgBox "Du lieu vua nhap không phai là SO nha! NHAP LAI!"
      Target.ClearContents: Target.Select
    ElseIf Target.Value > 100 Then
      MsgBox "Không duoc nhap so > 100! NHAP LAI!"
      Target.ClearContents: Target.Select
    End If
  End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom