Báo lỗi khi không thấy mã số có trong đơn hàng.

Liên hệ QC

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
713
Được thích
54
Giới tính
Nam
Chào các anh chị.
Em có file đính kèm, trong file em có ghi chú.
Mong các anh chị giúp em viêt code khi không thấy mã số có trong đơn hàng + số yêu cầu (vì có trùng đơn hàng, trùng kiểu, chỉ khác nhau số yêu cầu.)
 

File đính kèm

  • BaoLoi.xlsx
    13 KB · Đọc: 15
Bạn nhập code vào Worksheet xem
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, lr As Long, counter As Integer
    Dim MaSo As String, DonHang As String 
  
    If Not Intersect(Target, Range("D4:D1000")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        MaSo = Target.Value
        DonHang = Cells(Target.Row, 2) & "-" & Cells(Target.Row, 3)
      
        If Not IsEmpty(MaSo) Then
            With Sheets("BangCanDoi")
                lr = .Range("A" & Rows.Count).End(xlUp).Row
                For i = 4 To lr
                    If .Range("D"&i) = MaSo Then counter = 1: Exit For
                Next i
            End With
          
            If counter = 0 Then MsgBox "Ma so nay khong co trong don hang " & DonHang, vbCritical
        End If
    End If
  
End Sub
 
Upvote 0
Chào các anh chị.
Em có file đính kèm, trong file em có ghi chú.
Mong các anh chị giúp em viêt code khi không thấy mã số có trong đơn hàng + số yêu cầu (vì có trùng đơn hàng, trùng kiểu, chỉ khác nhau số yêu cầu.)
Bạn thử, thêm module mới rồi dán đoạn code sau vào:
Mã:
Option Explicit

Public DS As Object
Public sKEY As String
Public Const sDELIM As String = "-_^"
Public blNapDS As Boolean

Public Sub NapDS()
    Dim shCanDoi As Worksheet
    Dim varDS As Variant
    Dim r As Long
    blNapDS = False
    Const sBangCanDoi As String = "BangCanDoi"
    Set shCanDoi = ThisWorkbook.Worksheets(sBangCanDoi)
    varDS = shCanDoi.Range("A3").CurrentRegion.Value
    If Not IsArray(varDS) Then Exit Sub
    Set DS = CreateObject("Scripting.Dictionary")
    For r = 2 To UBound(varDS, 1)
        sKEY = varDS(r, 1) & sDELIM & varDS(r, 3) & sDELIM & varDS(r, 4)
        If Not DS.Exists(sKEY) Then DS.Add sKEY, r
    Next r
    blNapDS = True
End Sub

Trong Worksheet 'Xuat' bạn copy code dưới rồi dán vào:
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sDonHang As String, sMa As String
    Dim r As Long, c As Long
    r = Target.Row: c = Target.Column
    If (c <> 4) Or (r < 4) Then Exit Sub
    Application.EnableEvents = False
    If Not blNapDS Then Call NapDS
    sMa = Target.Value
    sDonHang = Me.Cells(r, 2) & "-" & Me.Cells(r, 3)
    If Len(sDonHang) = 0 Then
        MsgBox "Nhap don hang va so yeu cau", vbCritical, "Loi"
        GoTo End_
    End If
    sKEY = Me.Cells(r, 2) & sDELIM & Me.Cells(r, 3) & sDELIM & sMa
    If Not DS.Exists(sKEY) Then GoTo lb_Loi
    GoTo End_
lb_Loi:
    MsgBox "Ma so [" & sMa & "] khong co trong don hang: " & sDonHang, vbCritical, "Loi"
End_:
    Application.EnableEvents = True
End Sub
 

File đính kèm

  • BaoLoi.xlsm
    24 KB · Đọc: 5
Upvote 0
Chào các anh chị.
Em có file đính kèm, trong file em có ghi chú.
Mong các anh chị giúp em viêt code khi không thấy mã số có trong đơn hàng + số yêu cầu (vì có trùng đơn hàng, trùng kiểu, chỉ khác nhau số yêu cầu.)
Để khống chế việc nhập dữ liệu sai, bạn cũng có thể tìm hiểu cách tạo Form nhập liệu
-->Khi chọn Đơn hàng + Số yêu cầu thì trường mã số chỉ hiển thị mã số tương ứng. (Đã sửa code)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D4:D10000")) Is Nothing Then
        Dim lr As Long, Arr(), j As Long
        Dim Dic As Object, Key As String, sKey As String
        Dim i As Long
        Set Dic = CreateObject("Scripting.Dictionary")
        With Sheets("BangCanDoi")
            lr = .Range("A" & Rows.Count).End(xlUp).Row
            Arr = .Range("A4:F" & lr).Value
            For i = 1 To UBound(Arr)
                If Arr(i, 1) <> "" And Arr(i, 3) <> "" And Arr(i, 4) <> "" Then
                    Key = Arr(i, 1) & "|" & Arr(i, 3) & "|" & Arr(i, 4)
                    Dic.Add (Key), ""
                End If
            Next i
        End With
        With Sheets("Xuat")
            For i = 4 To 10000
                For j = 2 To 4
                    If .Cells(i, j) <> "" Then
                        sKey = .Cells(i, 2) & "|" & .Cells(i, 3) & "|" & .Cells(i, 4)
                        If Not Dic.exists(sKey) Then
                            MsgBox "Ma khong ton tai trong don hang: " & .Cells(i, 2) & "-" & .Cells(i, 3)
                            Exit Sub
                        End If
                    End If
                Next j
            Next i
        End With
        Set Dic = Nothing
    End If
End Sub
 

File đính kèm

  • BaoLoi.xlsb
    23.5 KB · Đọc: 5
Lần chỉnh sửa cuối:
  • Thích
Reactions: DMQ
Upvote 0
Xin lỗi!! lúc mình gõ trả lời thì chưa thấy các bạn @Ngày mai trời lại sáng và bạn @THÓC SAMA trả lời, Mình đang nơi với bạn @anhtuan2939
Cám ơn bạn đã giúp viết code.
Nhưng chưa đúng bạn ơi.
Mình có thử gõ ngày 12/8/2022 đơn hàng J2812 số yêu cầu 03 mã số 061560 mà chẳng thấy báo lỗi.
Vì đơn hàng J2812 số yêu cầu 03 không có mã số 061560.
Mong bạn xem lại giúp mình.
 
Upvote 0
Xin lỗi!! lúc mình gõ trả lời thì chưa thấy các bạn @Ngày mai trời lại sáng và bạn @THÓC SAMA trả lời, Mình đang nơi với bạn @anhtuan2939
Cám ơn bạn đã giúp viết code.
Nhưng chưa đúng bạn ơi.
Mình có thử gõ ngày 12/8/2022 đơn hàng J2812 số yêu cầu 03 mã số 061560 mà chẳng thấy báo lỗi.
Vì đơn hàng J2812 số yêu cầu 03 không có mã số 061560.
Mong bạn xem lại giúp mình.
Bạn thử lại nhé.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, lr As Long, counter As Integer
    Dim MaSo As String, DonHang As String, SoYeuCau As String
 
    If Not Intersect(Target, Range("D4:D1000")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        MaSo = Target.Value
        DonHang = Cells(Target.Row, 2)
        SoYeuCau = Cells(Target.Row, 3)
      
        If Not IsEmpty(MaSo) Then
            With Sheets("BangCanDoi")
                lr = .Range("A" & Rows.Count).End(xlUp).Row
                For i = 4 To lr
                    If .Range("A" & i) = DonHang And .Range("C" & i) = SoYeuCau And .Range("D" & i) = MaSo Then counter = 1: Exit For
                Next i
            End With
          
            If counter = 0 Then MsgBox "Ma so nay khong co trong don hang " & DonHang & "-" & SoYeuCau, vbCritical
        End If
    End If
 
End Sub
 
  • Thích
Reactions: DMQ
Upvote 0
Cám ơn hai bạn @Ngày mai trời lại sáng và bạn @THÓC SAMA nhiều.
Code của hai bạn chạy tốt, sai cột đon hàng cũng báo, cột số yêu cầu cũng báo, cột đơn hàng mà gõ chữ thường cũng báo (như j thường)
Bạn @THÓC SAMA nói nhập liệu băng Form cũng hay, mà mình thì mù tịt.
Nếu được bạn có thể giúp mình.
 
Upvote 0
Cám ơn hai bạn @Ngày mai trời lại sáng và bạn @THÓC SAMA nhiều.
Code của hai bạn chạy tốt, sai cột đon hàng cũng báo, cột số yêu cầu cũng báo, cột đơn hàng mà gõ chữ thường cũng báo (như j thường)
Bạn @THÓC SAMA nói nhập liệu băng Form cũng hay, mà mình thì mù tịt.
Nếu được bạn có thể giúp mình.
Bài 3,bạn sửa lại giúp mình chỗ này nhé:
If Len(sDonHang) = 0 Then
Thành:
If Len(sDonHang) < 2 Then
Bài đã được tự động gộp:

Để khống chế việc nhập dữ liệu sai, bạn cũng có thể tìm hiểu cách tạo Form nhập liệu
-->Khi chọn Đơn hàng + Số yêu cầu thì trường mã số chỉ hiển thị mã số tương ứng.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D4:D10000")) Is Nothing Then
        Dim lr As Long, Arr(), j As Long
        Dim Dic As Object, Key As String, sKey As String
        Dim i As Long
        Set Dic = CreateObject("Scripting.Dictionary")
        With Sheets("BangCanDoi")
            lr = .Range("A" & Rows.Count).End(xlUp).Row
            Arr = .Range("A4:F" & lr).Value
            For i = 1 To UBound(Arr)
                If Arr(i, 1) <> "" And Arr(i, 3) <> "" And Arr(i, 4) <> "" Then
                    Key = Arr(i, 1) & "|" & Arr(i, 3) & "|" & Arr(i, 4)
                    Dic.Add (Key), ""
                End If
            Next i
        End With
        With Sheets("Xuat")
            For i = 4 To 1000
                For j = 2 To 4
                    If .Cells(i, j) <> "" Then
                        sKey = .Cells(i, 2) & "|" & .Cells(i, 3) & "|" & .Cells(i, 4)
                        If Not Dic.exists(sKey) Then
                            MsgBox "Ma khong ton tai trong don hang: " & .Cells(i, 2) & "-" & .Cells(i, 3)
                            Exit Sub
                        End If
                    End If
                Next j
            Next i
        End With
        Set Dic = Nothing
    End If
End Sub
Mỗi lần enter hay tab là phải chạy nhiều for vậy bạn?
Ở trên là-> d4:d10000
Ở dưới lại là: For i = 4 To 1000
Bạn giải thích chỗ này giúp với..
 
Lần chỉnh sửa cuối:
  • Thích
Reactions: DMQ
Upvote 0
CÁc bạn có thể giúp mình khi báo lỗi xong thì cell cột đơn hàng được chọn không ạ.
 
Upvote 0
CÁc bạn có thể giúp mình khi báo lỗi xong thì cell cột đơn hàng được chọn không ạ.
Thay toàn bộ code trong Worksheet 'Xuat' như sau:
Mã:
Option Explicit
Dim cell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set cell = Target
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sDonHang As String, sMa As String
    Dim r As Long, c As Long
    On Error GoTo End_
    r = Target.Row: c = Target.Column
    If (c <> 4) Or (r < 4) Then Exit Sub
    Application.EnableEvents = False
    If Not blNapDS Then Call NapDS
    sMa = Target.Value
    sDonHang = Me.Cells(r, 2) & "-" & Me.Cells(r, 3)
    If Len(sDonHang) < 2 Then
        MsgBox "Nhap don hang va so yeu cau", vbCritical, "Loi"
        If Not cell Is Nothing Then cell.ClearContents
        If Len(Me.Cells(r, 2)) = 0 Then
            Me.Cells(r, 2).Select
        ElseIf Len(Me.Cells(r, 3)) = 0 Then
            Me.Cells(r, 3).Select
        End If
        GoTo End_
    End If
    sKEY = Me.Cells(r, 2) & sDELIM & Me.Cells(r, 3) & sDELIM & sMa
    If Not DS.Exists(sKEY) Then GoTo lb_Loi
    GoTo End_
lb_Loi:
    MsgBox "Ma so [" & sMa & "] khong co trong don hang: " & sDonHang, vbCritical, "Loi"
    If Not cell Is Nothing Then cell.Select
End_:
    Application.EnableEvents = True
End Sub
 

File đính kèm

  • BaoLoi.xlsm
    25 KB · Đọc: 5
Lần chỉnh sửa cuối:
  • Thích
Reactions: DMQ
Upvote 0

File đính kèm

  • BaoLoi.xlsm
    25.7 KB · Đọc: 4
  • Thích
Reactions: DMQ
Upvote 0
Web KT

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

Back
Top Bottom