Sửa lỗi code VBA

Liên hệ QC

duong22000

Thành viên thường trực
Tham gia
8/5/13
Bài viết
322
Được thích
23
Hiện em có 1 file excel có sử dụng đoạn code VBA sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 7 Then
        Target.Value = WorksheetFunction.Proper(Target.Value)
    End If
    Set Target = Range("c5")
    With Range("A7").CurrentRegion
    If Target.Value > 0 Then
    Rows("6:6").AutoFilter 5, Target.Value
    Else
         Rows("6:6").AutoFilter
    End If
    End With
End Sub
Mục đích thứ 1 là: dữ liệu khi nhập ở cột 2; 6; 7 thì dữ liệu sẽ tự động viết hoa chữ cái đầu từ
Mục đích thứ 2 là : Khi nhập điều kiện lọc ở ô C5 thì bảng dữ liệu sẽ lọc (AutoFilter) theo điều kiện ô C5
Nhưng khi nháy đúp chuột vào các ô khác ô C5 thì báo lỗi
219858
Vậy nhờ mọi người trên GPE giúp em sửa đoạn code trên cho không bị lỗi. Em xin cảm ơn mọi người !
 
bạn thử bỏ Row("6:6") xem sao
 
Vì bạn muo61nm lần lượt thực hiện 2 sự kiện nên là mình thì mình sẽ tách ra là vầy:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 7 Then
        Target.Value = WorksheetFunction.Proper(Target.Value)
    ElseIf Not Intersect(Target, [C5]) Is Nothing Then
        With Range("A7").CurrentRegion
            If Target.Value > 0 Then
6                .Rows("6:6").AutoFilter 5, Target.Value
            Else
8                .Rows("6:6").AutoFilter
            End If
        End With
    End If
End Sub

Một điều bạn có thể sẽ phải lưu ý sau này: đó là cách xài With . . . . End With
Ở đây bạn 'tuyên bố' sẽ làm việc với vùng dữ liệu liên tiếp quanh [A7]
Mình không rõ là dữ liệu (DL) của bạn bắt đầu là ở dòng đầu trang tính hay dòng thứ 6 hoặc thứ 7
Nếu DL từ dòng 6 hay 7 thì không nên xài câu lệnh
Row("6:^")AutoFilter. . . & câu lệnh tương tự có đ1nh số 8 trong trích dẫn của mình
Trong trường hợp này, nếu là mình, thì sẽ phải khai báo thêm 1 tham biến dùng để chứa dố dòng của vùng; Như:
Mã:
        With Range("A7").CurrentRegion
             Rws = .Rows.Count
             .[F7].Resize(Rws).Autofiler . . .
'. . . . . . . . . . . '
Dù sao mình cũng là đoán mò vì chưa thấy dù chỉ vài ba dòng dữ liệu của bạn.
Sẽ là không thế nếu được phép mục kĩnh DL giả lập của bạn!
 
Vì bạn muo61nm lần lượt thực hiện 2 sự kiện nên là mình thì mình sẽ tách ra là vầy:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 7 Then
        Target.Value = WorksheetFunction.Proper(Target.Value)
    ElseIf Not Intersect(Target, [C5]) Is Nothing Then
        With Range("A7").CurrentRegion
            If Target.Value > 0 Then
6                .Rows("6:6").AutoFilter 5, Target.Value
            Else
8                .Rows("6:6").AutoFilter
            End If
        End With
    End If
End Sub

Một điều bạn có thể sẽ phải lưu ý sau này: đó là cách xài With . . . . End With
Ở đây bạn 'tuyên bố' sẽ làm việc với vùng dữ liệu liên tiếp quanh [A7]
Mình không rõ là dữ liệu (DL) của bạn bắt đầu là ở dòng đầu trang tính hay dòng thứ 6 hoặc thứ 7
Nếu DL từ dòng 6 hay 7 thì không nên xài câu lệnh
Row("6:^")AutoFilter. . . & câu lệnh tương tự có đ1nh số 8 trong trích dẫn của mình
Trong trường hợp này, nếu là mình, thì sẽ phải khai báo thêm 1 tham biến dùng để chứa dố dòng của vùng; Như:
Mã:
        With Range("A7").CurrentRegion
             Rws = .Rows.Count
             .[F7].Resize(Rws).Autofiler . . .
'. . . . . . . . . . . '
Dù sao mình cũng là đoán mò vì chưa thấy dù chỉ vài ba dòng dữ liệu của bạn.
Sẽ là không thế nếu được phép mục kĩnh DL giả lập của bạn!
Em xin cảm ơn bác, để em thử sửa lại code
 
Vì bạn muo61nm lần lượt thực hiện 2 sự kiện nên là mình thì mình sẽ tách ra là vầy:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 7 Then
        Target.Value = WorksheetFunction.Proper(Target.Value)
    ElseIf Not Intersect(Target, [C5]) Is Nothing Then
        With Range("A7").CurrentRegion
            If Target.Value > 0 Then
6                .Rows("6:6").AutoFilter 5, Target.Value
            Else
8                .Rows("6:6").AutoFilter
            End If
        End With
    End If
End Sub

Một điều bạn có thể sẽ phải lưu ý sau này: đó là cách xài With . . . . End With
Ở đây bạn 'tuyên bố' sẽ làm việc với vùng dữ liệu liên tiếp quanh [A7]
Mình không rõ là dữ liệu (DL) của bạn bắt đầu là ở dòng đầu trang tính hay dòng thứ 6 hoặc thứ 7
Nếu DL từ dòng 6 hay 7 thì không nên xài câu lệnh
Row("6:^")AutoFilter. . . & câu lệnh tương tự có đ1nh số 8 trong trích dẫn của mình
Trong trường hợp này, nếu là mình, thì sẽ phải khai báo thêm 1 tham biến dùng để chứa dố dòng của vùng; Như:
Mã:
        With Range("A7").CurrentRegion
             Rws = .Rows.Count
             .[F7].Resize(Rws).Autofiler . . .
'. . . . . . . . . . . '
Dù sao mình cũng là đoán mò vì chưa thấy dù chỉ vài ba dòng dữ liệu của bạn.
Sẽ là không thế nếu được phép mục kĩnh DL giả lập của bạn!
Vì bạn muo61nm lần lượt thực hiện 2 sự kiện nên là mình thì mình sẽ tách ra là vầy:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 6 Or Target.Column = 7 Then
        Target.Value = WorksheetFunction.Proper(Target.Value)
    ElseIf Not Intersect(Target, [C5]) Is Nothing Then
        With Range("A7").CurrentRegion
            If Target.Value > 0 Then
6                .Rows("6:6").AutoFilter 5, Target.Value
            Else
8                .Rows("6:6").AutoFilter
            End If
        End With
    End If
End Sub

Một điều bạn có thể sẽ phải lưu ý sau này: đó là cách xài With . . . . End With
Ở đây bạn 'tuyên bố' sẽ làm việc với vùng dữ liệu liên tiếp quanh [A7]
Mình không rõ là dữ liệu (DL) của bạn bắt đầu là ở dòng đầu trang tính hay dòng thứ 6 hoặc thứ 7
Nếu DL từ dòng 6 hay 7 thì không nên xài câu lệnh
Row("6:^")AutoFilter. . . & câu lệnh tương tự có đ1nh số 8 trong trích dẫn của mình
Trong trường hợp này, nếu là mình, thì sẽ phải khai báo thêm 1 tham biến dùng để chứa dố dòng của vùng; Như:
Mã:
        With Range("A7").CurrentRegion
             Rws = .Rows.Count
             .[F7].Resize(Rws).Autofiler . . .
'. . . . . . . . . . . '
Dù sao mình cũng là đoán mò vì chưa thấy dù chỉ vài ba dòng dữ liệu của bạn.
Sẽ là không thế nếu được phép mục kĩnh DL giả lập của bạn!
Em đã sửa và chạy thử code theo bác SA_DQ và thấy không bị lỗi. Em xin cảm ơn bác SA_DQ đã giúp đỡ
 
Web KT

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

Back
Top Bottom