Macro không hoạt động khi nhập các ký tự đặc biệt (1 người xem)

Liên hệ QC

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

huynhnguyen114255

Thành viên mới
Tham gia
17/10/09
Bài viết
4
Được thích
0
Chào cả nhà,

Em có đoạn code như thế này:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    Dim Rng As Range, MyRng As Range, ID As String
    
    If Target.Column = 3 Then
    On Error Resume Next
        If Target.Count <> 1 Then GoTo ExitSub
        ID = UCase(Target.Value)
        Set Rng = Range([C1], [C65536].End(xlUp))
        If ID = "" Or WorksheetFunction.CountIf(Rng, ID) <> 2 Then GoTo ExitSub
        Set MyRng = Rng.Find(ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not MyRng Is Nothing Then
            MyRng.Select
            Target.Delete
        End If


    Else
    Sheets.Application.ActiveCell = SetFocus
    End If
ExitSub:
    Set Rng = Nothing: Set MyRng = Nothing
End Sub

Mục đích: Khi nhập vào ID đã tồn tại thì trỏ chuột vào hàng có ID đó và xóa dữ liệu vừa nhập. Nếu ID chưa tồn tại thì ghi vào bảng tính
Vấn đề:
1:nếu nhập các số, chữ bình thường thì code hoạt động, còn có ký tự "-" hoặc "+" thì code không hoạt động
2: Khi thao tác ở các vùng ngoài cột C (chọn nhiều cells, coppy...) đôi khi bị lỗi ở hàng code:
PHP:
Sheets.Application.ActiveCell = SetFocus

Em làm file này dựa theo chủ đề: http://www.giaiphapexcel.com/forum/...iểm-tra-trùng-dữ-liệu-trong-1-cột-(dùng-Code)
Mặc dù cố gắng chỉnh sửa nhưng em vẫn không làm file hoạt động ổn định được. Mong các Anh/Chị và các Thầy giúp đỡ
 

File đính kèm

Lần chỉnh sửa cuối:
Chào cả nhà,

Em có đoạn code như thế này:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    Dim Rng As Range, MyRng As Range, ID As String
    
    If Target.Column = 3 Then
    On Error Resume Next
        If Target.Count <> 1 Then GoTo ExitSub
        ID = UCase(Target.Value)
        Set Rng = Range([C1], [C65536].End(xlUp))
        If ID = "" Or WorksheetFunction.CountIf(Rng, ID) <> 2 Then GoTo ExitSub
        Set MyRng = Rng.Find(ID, LookIn:=xlValues, LookAt:=xlWhole)
        If Not MyRng Is Nothing Then
            MyRng.Select
            Target.Delete
        End If


    Else
    Sheets.Application.ActiveCell = SetFocus
    End If
ExitSub:
    Set Rng = Nothing: Set MyRng = Nothing
End Sub

Mục đích: Khi nhập vào ID đã tồn tại thì trỏ chuột vào hàng có ID đó và xóa dữ liệu vừa nhập. Nếu ID chưa tồn tại thì ghi vào bảng tính
Vấn đề:
1:nếu nhập các số, chữ bình thường thì code hoạt động, còn có ký tự "-" hoặc "+" thì code không hoạt động
2: Khi thao tác ở các vùng ngoài cột C (chọn nhiều cells, coppy...) đôi khi bị lỗi ở hàng code:
PHP:
Sheets.Application.ActiveCell = SetFocus

Em làm file này dựa theo chủ đề: http://www.giaiphapexcel.com/forum/showthread.php?21197-Ki%E1%BB%83m-tra-tr%C3%B9ng-d%E1%BB%AF-li%E1%BB%87u-trong-1-c%E1%BB%99t-(d%C3%B9ng-Code)
Mặc dù cố gắng chỉnh sửa nhưng em vẫn không làm file hoạt động ổn định được. Mong các Anh/Chị và các Thầy giúp đỡ
Bạn thử code này xem sao.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Target.Column = 3 And Target.Count = 1 Then
    If Target.Value = "" Then Exit Sub
    Set Rng = Range(Target.Offset(-1), [C1]).Find(what:=Target.Value, lookat:=xlWhole)
    If Rng Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Rng.Select
    Target.ClearContents
    Application.EnableEvents = True
End If
End Sub
 
Upvote 0
Cảm ơn thầy Thắng!

Dùng code của Thầy đã hết lỗi rồi ạ. Thầy có thể cho em biết em bị lỗi ở đâu không ạ? (để em biết đường mà sửa sai^^). Em đoán là em dùng biến ID bị sai và không phù hợp kiểu dữ liệu. Nhưng lỗi thứ 2 thì em không đoán được.
 
Upvote 0
Cảm ơn thầy Thắng!

Dùng code của Thầy đã hết lỗi rồi ạ. Thầy có thể cho em biết em bị lỗi ở đâu không ạ? (để em biết đường mà sửa sai^^). Em đoán là em dùng biến ID bị sai và không phù hợp kiểu dữ liệu. Nhưng lỗi thứ 2 thì em không đoán được.
Code của bạn không chạy (hay nói đúng hơn là chạy nhưng không đúng mong muốn của bạn) trong một số trường hợp là do code của bạn có dòng này:
Mã:
If ID = "" Or WorksheetFunction.CountIf(Rng, ID) <> 2 Then GoTo ExitSub
Trong file của bạn có những ID đã nhập 3, 4 lần rồi. Vì vậy, khi bạn nhập ID đó nữa thì code đếm được 4, 5 lần và sẽ thoát khỏi thủ tục bỡi dòng lệnh này (4, 5 <> 2).
Ngoài ra, bạn sử dụng sự kiện Worksheet_Change và có thay đổi dữ liệu trong code (xóa ô) nhưng không dùng lệnh
Mã:
Application.EnableEvents = False
nên khi chạy code sẽ chạy đi chạy lại nhiều lần.
Ngoài ra còn một số chỗ thừa không cần thiết.
 
Upvote 0
Web KT

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

Back
Top Bottom