e kí hiệu mã theo sheet nhưng trong sheet đó lại chạy theo nhiều sản phẩm khác nhau, mà mỗi sãn phẩm có phương pháp tét khác nhau nên e lấy kí hiệu theo sheet (1 sheet là 1 máy) kết hợp sản phẩm để phân biệt bác ạ.
e kí hiệu mã theo sheet nhưng trong sheet đó lại chạy theo nhiều sản phẩm khác nhau, mà mỗi sãn phẩm có phương pháp tét khác nhau nên e lấy kí hiệu theo sheet (1 sheet là 1 máy) kết hợp sản phẩm để phân biệt bác ạ.
Tôi sửa chay thôi vì tôi cũng chả biết phiên bản tập tin mới nhất của bạn là phiên bản nào.
Trong phiên bản tôi có thì làm quái gì có vd. GCAS = 82204717. Toàn GCAS bắt đầu bằng 821* và NAMEFG bắt đầu bằng D. Không test được nên nhìn mắt rồi sửa thôi. Hi vọng là được.
1. Trong Sub Com_INPUT_Click thêm 2 biến k và Ma như sau
Mã:
Private Sub Com_INPUT_Click()
Dim ..., [COLOR=#ff0000]k As Long, Ma As String[/COLOR]
2. Tìm trong Sub Com_INPUT_Click đoạn
Mã:
If .Row > [COLOR=#ff0000]2[/COLOR] Then
If .Offset(-1, -3) = ngay Then
index = Replace(.Offset(-1).Value, currCode, "")
End If
End If
và thay bằng đoạn
Mã:
If .Row > [COLOR=#ff0000]3[/COLOR] Then
k = -1
Do While .Offset(k, -3) = ngay
Ma = .Offset(k).Value
If Left(Ma, Len(currCode)) = currCode Then
index = Replace(Ma, currCode, "")
Exit Do
Else
k = k - 1
End If
Loop
End If
Tôi sửa chay thôi vì tôi cũng chả biết phiên bản tập tin mới nhất của bạn là phiên bản nào.
Trong phiên bản tôi có thì làm quái gì có vd. GCAS = 82204717. Toàn GCAS bắt đầu bằng 821* và NAMEFG bắt đầu bằng D. Không test được nên nhìn mắt rồi sửa thôi. Hi vọng là được.
1. Trong Sub Com_INPUT_Click thêm 2 biến k và Ma như sau
Mã:
Private Sub Com_INPUT_Click()
Dim ..., [COLOR=#ff0000]k As Long, Ma As String[/COLOR]
2. Tìm trong Sub Com_INPUT_Click đoạn
Mã:
If .Row > [COLOR=#ff0000]2[/COLOR] Then
If .Offset(-1, -3) = ngay Then
index = Replace(.Offset(-1).Value, currCode, "")
End If
End If
và thay bằng đoạn
Mã:
If .Row > [COLOR=#ff0000]3[/COLOR] Then
k = -1
Do While .Offset(k, -3) = ngay
Ma = .Offset(k).Value
If Left(Ma, Len(currCode)) = currCode Then
index = Replace(Ma, currCode, "")
Exit Do
Else
k = k - 1
End If
Loop
End If
Xin lỗi bác, 1 số mã hàng mới e chưa update vào, file cấu trúc như thực tế luôn đó bác.E test thấy ok rồi cảm ơn bác.
E muốn nhờ bác test kiểm tra dùm e trên sheet "Tong hop", ->chọn ngày cell [E2]->sheet sẽ tự động lọc theo giá trị "end" cột [L] ở các sheet sang sheet tổng hợp. Lúc trươc cũng file này e chạy được, nhưng trong quá trình mấy bữa nay thêm sửa code không biết có bị xung đột gì không mà code ở module 1 không chạy. Chọn ngày xong mà không thấy code đả động gì, làm lại thì có lúc báo lỗi dòng màu xanh.
Option ExplicitPublic Sub TongHop()
Application.ScreenUpdating = False
Dim tu As Date, ShList(), Res(1 To 8000, 1 To 20), Tm, i, J, n, m
tu = Sheet4.[E2].Value
If Not IsDate(tu) Then
MsgBox "Sai ngay"
Exit Sub
End If
ShList = Array("Sheet8", "Sheet9", "Sheet10", "Sheet11", "Sheet12", "Sheet13", "Sheet14", "Sheet15", "Sheet16", "Sheet17", "Sheet18", "Sheet25", "Sheet23", "Sheet24")
Application.ScreenUpdating = False
For i = LBound(ShList) To UBound(ShList)
Tm = MySh(ShList(i)).Range("A3:R" & MySh(ShList(i)).[a65000].End(xlUp).Row)
For J = 1 To UBound(Tm, 1)
If Format(Tm(J, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(J, 12) = "END" Then
n = n + 1
For m = 1 To 20 Res(n, m) = Tm(J, m)
Next m
End If
Next J
Next i
Sheet4.[A6:R8000].ClearContents
Sheet4.[A6:R8000] = Res
Application.ScreenUpdating = True
End Sub
Xin lỗi bác, 1 số mã hàng mới e chưa update vào, file cấu trúc như thực tế luôn đó bác.E test thấy ok rồi cảm ơn bác.
E muốn nhờ bác test kiểm tra dùm e trên sheet "Tong hop", ->chọn ngày cell [E2]->sheet sẽ tự động lọc theo giá trị "end" cột [L] ở các sheet sang sheet tổng hợp. Lúc trươc cũng file này e chạy được, nhưng trong quá trình mấy bữa nay thêm sửa code không biết có bị xung đột gì không mà code ở module 1 không chạy. Chọn ngày xong mà không thấy code đả động gì, làm lại thì có lúc báo lỗi dòng màu xanh.
2. Giúp bạn mệt quá. Code của bạn hoặc sai hoặc chưa chuẩn. Có rất nhiều "bông hoa" như thế nên dò tìm để sửa rất khó và mệt. Tôi cho vd.
Mã:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' kiem tra cot [A] neu locked=true dien vao cot [W]=lock
Dim cls As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Const ApplyToSheet As String =
".FHC_TOYO3.FHC_MP1.FHC_KWT2.FHC_KWT1.FHC_CHAMMELEON.FHC_MESPACK.FHC_TOYO4.FHC_TOYO1.FHC_TOYO2.FHC_ELGIE1.FHC_ELGIE2.FHC_ELGIE3.FHC_ELGIE4.FH
C_ELGIE5.FHC_RETEST&OTHERS."
If InStr(1, ApplyToSheet, "." & Sh.Name & ".", 1) = 0 Then Exit Sub
For Each cls In Range("A3:A400")
If cls.Locked = True Then
cls.Offset(, 22) = "LOCK"
Else
cls.Offset(, 22) = "NOLOCK"
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Thế này thì toi rồi. Nếu tôi chọn sheet không có trong ApplyToSheet rồi chọn 1 ô nào đó thì Exit Sub, tức từ lúc này sẽ không có sự kiện nào được phục vụ rồi. Mọi sự kiên trong mọi sheet.
Đã chơi trò chơi "Application.EnableEvents = False" thì trước khi dọn đồ chơi phải chơi trò "Application.EnableEvents = True". Tức trước khi Exit Sub phải "trả lại". Trong th này thì chuyển
xuống sau dòng Exit Sub. Vì chả lý gì bầy đồ chơi ra để khi gặp Exit Sub lại phải dọn đồ chơi. Phải là: nếu đi tiếp, tức không sẩy ra Exit Sub, thì mới bầy đồ chơi ra. Cái gì cũng có lôgíc của nó.
3. Vì test cái code của bạn hơi mệt nên tôi phân tích chay code thử xem. Tôi lấy một đoạn trong sub TongHop
Mã:
For i = LBound(ShList) To UBound(ShList)
Tm = MySh(ShList(i)).Range("A3:R" & MySh(ShList(i)).[a65000].End(xlUp).Row)
For J = 1 To UBound(Tm, 1)
If Format(Tm(J, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(J, [COLOR=#ff0000]12[/COLOR]) = "END" Then
n = n + 1
For m = 1 To 20
Res(n, m) = Tm(J, m)
Next m
End If
Next J
Next i
Trong tập tin bạn đính kèm thì chỗ đỏ đỏ là 13. Tại sao lại thế? Trong bài #47 tôi thấy bạn ghi đúng (12) cơ mà. Hay tập tin đính kèm chưa phải là mới nhất?. Tôi cũng đã sửa lại thành 12.
Theo tôi đoán thì lý do thỉnh thoảng bạn mới gặp lỗi là do: khi đk
If Format(Tm(J, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(J, 12) = "END" Then
2. Giúp bạn mệt quá. Code của bạn hoặc sai hoặc chưa chuẩn. Có rất nhiều "bông hoa" như thế nên dò tìm để sửa rất khó và mệt. Tôi cho vd.
Mã:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' kiem tra cot [A] neu locked=true dien vao cot [W]=lock
Dim cls As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Const ApplyToSheet As String =
".FHC_TOYO3.FHC_MP1.FHC_KWT2.FHC_KWT1.FHC_CHAMMELEON.FHC_MESPACK.FHC_TOYO4.FHC_TOYO1.FHC_TOYO2.FHC_ELGIE1.FHC_ELGIE2.FHC_ELGIE3.FHC_ELGIE4.FH
C_ELGIE5.FHC_RETEST&OTHERS."
If InStr(1, ApplyToSheet, "." & Sh.Name & ".", 1) = 0 Then Exit Sub
For Each cls In Range("A3:A400")
If cls.Locked = True Then
cls.Offset(, 22) = "LOCK"
Else
cls.Offset(, 22) = "NOLOCK"
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Thế này thì toi rồi. Nếu tôi chọn sheet không có trong ApplyToSheet rồi chọn 1 ô nào đó thì Exit Sub, tức từ lúc này sẽ không có sự kiện nào được phục vụ rồi. Mọi sự kiên trong mọi sheet.
Đã chơi trò chơi "Application.EnableEvents = False" thì trước khi dọn đồ chơi phải chơi trò "Application.EnableEvents = True". Tức trước khi Exit Sub phải "trả lại". Trong th này thì chuyển
xuống sau dòng Exit Sub. Vì chả lý gì bầy đồ chơi ra để khi gặp Exit Sub lại phải dọn đồ chơi. Phải là: nếu đi tiếp, tức không sẩy ra Exit Sub, thì mới bầy đồ chơi ra. Cái gì cũng có lôgíc của nó.
3. Vì test cái code của bạn hơi mệt nên tôi phân tích chay code thử xem. Tôi lấy một đoạn trong sub TongHop
Mã:
For i = LBound(ShList) To UBound(ShList)
Tm = MySh(ShList(i)).Range("A3:R" & MySh(ShList(i)).[a65000].End(xlUp).Row)
For J = 1 To UBound(Tm, 1)
If Format(Tm(J, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(J, [COLOR=#ff0000]12[/COLOR]) = "END" Then
n = n + 1
For m = 1 To 20
Res(n, m) = Tm(J, m)
Next m
End If
Next J
Next i
Trong tập tin bạn đính kèm thì chỗ đỏ đỏ là 13. Tại sao lại thế? Trong bài #47 tôi thấy bạn ghi đúng (12) cơ mà. Hay tập tin đính kèm chưa phải là mới nhất?. Tôi cũng đã sửa lại thành 12.
Theo tôi đoán thì lý do thỉnh thoảng bạn mới gặp lỗi là do: khi đk
không thỏa thì không có lỗi. Thế khi thỏa thì sao? Tm là mảng lấy từ cột A tới R, tức có 18 cột. Vậy thì với m = 19 (chưa cần xét m = 20 vì với m = 19 đã có lỗi) thì Res(n, m) = Tm(J, m) = Tm(J, 19) <-- chết đột ngột.
4. Không chỉ code có lỗi mà dữ liệu của bạn cũng có lỗi. Như ở code trích ngay trên bạn so sánh cột A là cột ngày tháng trong khi dữ liệu vd. ở sheet FHC_KWT2 có A3 = "04.01.2014"