Hoàn thiện dùm em code chèn dữ liệu

Liên hệ QC

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,203
Nghề nghiệp
Kế toán
Em có bài này nhờ AC xem dùm em. Trong mục Giao nhận/Thanh toán em có tạo phần click phải chuột để chèn dữ liệu. Nhưng không hiểu sao code em sai chỗ nào mà khi xóa dữ liệu chèn vào thì tương ứng cột bên lại hiện số 5000. Em tìm mãi mà không biết lỗi chỗ nào. Em đưa lên đây nhờ mọi người xem giúp em.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim fRng As Range, Clls As Range
  On Error Resume Next
  If Target.Row >= 12 And Target.Column = 1 Then
    For Each Clls In Target
      If Clls.Value = "" Then Clls.Offset(, 1).Resize(, 2) = "" And Clls.Offset(, 6).Resize(, 1) = ""
      Set fRng = S5.Range("A1").CurrentRegion.Resize(, 4).Find(Clls.Value, , xlValues, xlWhole)
      If Not fRng Is Nothing Then
        Clls.Offset(, 1).Resize(, 2) = fRng.Offset(, 1).Resize(, 2).Value
        Clls.Offset(, 6).Resize(, 1) = fRng.Offset(, 3).Resize(, 1).Value
      End If
    Next
  End If
End Sub
Download
 
Em có bài này nhờ AC xem dùm em. Trong mục Giao nhận/Thanh toán em có tạo phần click phải chuột để chèn dữ liệu. Nhưng không hiểu sao code em sai chỗ nào mà khi xóa dữ liệu chèn vào thì tương ứng cột bên lại hiện số 5000. Em tìm mãi mà không biết lỗi chỗ nào. Em đưa lên đây nhờ mọi người xem giúp em.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim fRng As Range, Clls As Range
  On Error Resume Next
  If Target.Row >= 12 And Target.Column = 1 Then
    For Each Clls In Target
      If Clls.Value = "" Then Clls.Offset(, 1).Resize(, 2) = "" And Clls.Offset(, 6).Resize(, 1) = ""
      Set fRng = S5.Range("A1").CurrentRegion.Resize(, 4).Find(Clls.Value, , xlValues, xlWhole)
      If Not fRng Is Nothing Then
        Clls.Offset(, 1).Resize(, 2) = fRng.Offset(, 1).Resize(, 2).Value
        Clls.Offset(, 6).Resize(, 1) = fRng.Offset(, 3).Resize(, 1).Value
      End If
    Next
  End If
End Sub
Download
Câu lệnh gì mà kỳ cục thế này: If Clls.Value = "" Then Clls.Offset(, 1).Resize(, 2) = "" And Clls.Offset(, 6).Resize(, 1) = ""
Câu lệnh này gần như CHẲNG LÀM GÌ CẢ
 
Upvote 0
Lệnh xoá mà anh? Khi cột mã trống thì câc cột kia xoá?
Bạn xem kỹ câu lệnh đi... Chẳng ai viết giống vậy bao giờ
Ít ra cũng phải vầy:
PHP:
If Clls.Value = "" Then
  Clls.Offset(, 1).Resize(, 2) = ""
  Clls.Offset(, 6).Resize(, 1) = ""
Else
  'Gì gì đó
End If
Còn câu lệnh của bạn: IF [Điều kiện] Then [Kết quả 1] And [Kết quả 2]
Chẳng ra cái giống gì cả
------------------------
Code sửa lại:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim fRng As Range, Clls As Range
  On Error Resume Next
  If Target.Row >= 12 And Target.Column = 1 Then
    For Each Clls In Target
      If Clls.Value = "" Then
        Clls.Offset(, 1).Resize(, 2) = ""
        Clls.Offset(, 6).Resize(, 1) = ""
      Else
        Set fRng = S5.Range("A1").CurrentRegion.Resize(, 4).Find(Clls.Value, , xlValues, xlWhole)
        If Not fRng Is Nothing Then
          Clls.Offset(, 1).Resize(, 2) = fRng.Offset(, 1).Resize(, 2).Value
          Clls.Offset(, 6).Resize(, 1) = fRng.Offset(, 3).Resize(, 1).Value
        End If
      End If
    Next
  End If
End Sub
-------------------------------------
Nói thêm 1 chút về code nhập liệu:
- Giả sử bạn bôi đen vùng A12:B16 bằng cách đặt chuột vào B16 trước, xong quét đến A12 (tức khi ấy B16 được Active)... Xong, click phải chuột rồi chọn dữ liệu trên form xem kết quả trên bảng tính là gì?
Kết luận: Xem lại toàn bộ (sai nhiều quá)
 
Lần chỉnh sửa cuối:
Upvote 0
NHDK có nhắn tin nhờ xem code này.

Cái sai thứ nhất ndu đã chỉ ra: IF [Điều kiện] Then [Kết quả 1] And [Kết quả 2] (Chẳng ra cái giống gì cả)

Cái sai thứ 2: Dùng If Then ... trong 1 dòng (không có Else và không có End If) như trên không loại trừ hẳn được trường hợp Clls rỗng (xoá dòng), nên khi xoá dòng đoạn code dùng cho trường hợp không phải xoá dòng vẫn chạy.

Cái sai thứ 3:

Dùng phương thức Find để tìm kiếm mã, nhưng resize 4 cột chi vậy? Tìm trong cột A thôi chứ? Để cho khi xoá dòng, Find vẫn tìm Clls, mà Clls trống, nên ô trống đầu tiên nó tìm thấy là ô C93. Thế là nó lôi D93 = 5000 vào ô đó phải quá rồi còn gì?

Cái sai thứ 4:
Dùng câu On Error Resume Next trong khi vẫn chưa biết chắc những lỗi có thể xảy ra là những lỗi nào, những lỗi đó có thể bỏ qua hay không, ... Trong khi chỉ cần xoá câu đó đi và chạy code là biết ngay lỗi xảy ra từ đâu.
 
Upvote 0
Web KT
Back
Top Bottom