Giá trị combobox lấy từ combobox khác. (4 người xem)

Liên hệ QC

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

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
E có code sau không biết lỗi tại sao nhờ các cao thủ chỉ giúp. (dòng màu đỏ)

Private Sub SHIFT_change()
On Error Resume Next
If Me.SHIFT = "31" And Hour(Now) >= 21 And Hour(Now) < 24 Then
Me.COMBOBOXNGAY = Format(Now + 1, "Short date")
Me.DATE_RELEASE = Format(COMBOBOXNGAY + 2, "Short date")
Else
Me.COMBOBOXNGAY = Format(Now, "Short date")
Me.DATE_RELEASE = Format(COMBOBOXNGAY + 1, "Short date")


End If


TIME_RELEASE = Format(SHIFT.Column(1), "short time")
End Sub
 
Câu hỏi thêm: Bạn thêm & Left(f, 1) để làm gì?
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 ạ.
 
Upvote 0
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 ạ.

Trả lời bạn rất mất thời gian vì bạn không mô tả gì cả nên cứ phải mất vài bài để xác định ý định của bạn. Vì tôi đoán có thể đúng mà cũng có thể sai. Tôi cũng biết đoán mò nhưng tôi là người không chơi trò "đoán ý đồng đội". Nhiều khi mất thời gian lắm
Nếu còn kiểu như vậy thì ở mỗi thời điểm bất kỳ tôi sẽ chấm dứt.

Mô tả? Tôi lấy vd. sheet FHC_KWT2 được gán cho mã là KF (do KWT2. Caption = FHC_KWT2 và KWT2.Tag = "KF"). Với code cũ thì trên sheet FHC_KWT2 sẽ có: KF1, KF2, ..., KFn. Bây giờ bạn bịa thêm NAMEFG. Vậy:

1. Dạng của NAMEFG.Text là thế nào?
2. Cho vài vd. cái gọi là "kết hợp sản phẩm" và kết quả trên sheet. Lúc này không còn là KF1, KF2, ..., KFn nữa vậy thì nó sẽ thế nào? Tóm lại hãy miêu tả kiểu như: Ta chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào NAMEFG là "..." --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả trên sheet FHC_KWT2 phải là "...". Tiếp theo vẫn sheet FHC_KWT2 được chọn --> nhập vào NAMEFG là "..." --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả trên sheet FHC_KWT2 phải là "..." ...

Hãy mô tả.
 
Lần chỉnh sửa cuối:
Upvote 0
1. Dạng của NAMEFG.Text là thế nào?

1. NAMEFG Là dạng chuỗi được nhập vào dò theo checkbox "GCAS", nằm trong sheet "Gcas list" đó bác, bác chọn mã số bất kì ở checkbox "GCAS" sẽ thấy tên bên checkbox "NAMEFG".
2. Cho vài vd. cái gọi là "kết hợp sản phẩm" và kết quả trên sheet. Lúc này không còn là KF1, KF2, ..., KFn nữa vậy thì nó sẽ thế nào? Tóm lại hãy miêu tả kiểu như: Ta chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào NAMEFG là "..." --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả trên sheet FHC_KWT2 phải là "...". Tiếp theo vẫn sheet FHC_KWT2 được chọn --> nhập vào NAMEFG là "..." --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả trên sheet FHC_KWT2 phải là "..." ...
2. lần 1: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82153560 thì NAMEFG hiện là "DOWNY FBEN LIQ 330MLX24 INNOCENCE RFL TH" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFD1".

lần 2: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82204717 thì NAMEFG hiện là "FEB AMBI FR 370MLX12 B&B BTL MYSG STK" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFF1".

lần 3: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82204717 thì NAMEFG hiện là "FEB AMBI FR 370MLX12 B&B BTL MYSG STK" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFF2".

lần 4: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82153560 thì NAMEFG hiện là "DOWNY FBEN LIQ 330MLX24 INNOCENCE RFL TH" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFD2".
....
Qua ngày mới thì các kí hiệu phần số đếm lại từ đầu là 1.
 
Upvote 0
1. NAMEFG Là dạng chuỗi được nhập vào dò theo checkbox "GCAS", nằm trong sheet "Gcas list" đó bác, bác chọn mã số bất kì ở checkbox "GCAS" sẽ thấy tên bên checkbox "NAMEFG".

2. lần 1: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82153560 thì NAMEFG hiện là "DOWNY FBEN LIQ 330MLX24 INNOCENCE RFL TH" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFD1".

lần 2: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82204717 thì NAMEFG hiện là "FEB AMBI FR 370MLX12 B&B BTL MYSG STK" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFF1".

lần 3: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82204717 thì NAMEFG hiện là "FEB AMBI FR 370MLX12 B&B BTL MYSG STK" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFF2".lần 4: chọn sheet FHC_KWT2 bằng cách check vào combobox KWT2 --> nhập vào GCAS là 82153560 thì NAMEFG hiện là "DOWNY FBEN LIQ 330MLX24 INNOCENCE RFL TH" --> nhập các dữ liệu khác --> nhấn INPUT --> kết quả mã ID trên sheet FHC_KWT2 phải là "KFD2".
....
Qua ngày mới thì các kí hiệu phần số đếm lại từ đầu là 1.

Như bạn đã thấy tới bây giờ khi bạn miêu tả thì mới thấy rõ: Các số trong cùng ngày nó không liên tục như trước đó với code cũ mà phụ thuộc vào mã "bổ sung". Tức mã không phải là KF như trước mà là những mã "bổ sung" KFD, KFF, ..., và sang ngày mới thì số được đánh từ 1 cho từng mã "bổ sung" KFD, KFF, ...
Tôi sẽ sửa cho bạn sớm nhất có thể khi có thời gian.
 
Upvote 0
Như bạn đã thấy tới bây giờ khi bạn miêu tả thì mới thấy rõ: Các số trong cùng ngày nó không liên tục như trước đó với code cũ mà phụ thuộc vào mã "bổ sung". Tức mã không phải là KF như trước mà là những mã "bổ sung" KFD, KFF, ..., và sang ngày mới thì số được đánh từ 1 cho từng mã "bổ sung" KFD, KFF, ...
Tôi sẽ sửa cho bạn sớm nhất có thể khi có thời gian.
Chờ code của bác sửa giúp.
 
Lần chỉnh sửa cuối:
Upvote 0
Chờ code của bác sửa giúp.

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
 
Upvote 0
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

Bác xem trên file bác đã tải về dùm e nha.
 
Lần chỉnh sửa cuối:
Upvote 0
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.



Bác xem trên file bác đã tải về dùm e nha.

Tôi đã nói với bạn là tôi không có phiên bản mới nhất vậy bạn phải đính kèm vào bài này thôi. Tôi không test trên phiên bản mà tôi cho là không có code mới nhất vì chỉ mất công thôi
 
Upvote 0
Tôi đã nói với bạn là tôi không có phiên bản mới nhất vậy bạn phải đính kèm vào bài này thôi. Tôi không test trên phiên bản mà tôi cho là không có code mới nhất vì chỉ mất công thôi
Bác xem dùm, e làm đêm về giờ mới tỉnh.
 
Upvote 0
Bác xem dùm, e làm đêm về giờ mới tỉnh.

1. Bạn chạy được sub TongHop thì đúng là gặp may. Tại sao? Đọc tiếp

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
Mã:
Application.ScreenUpdating = False
Application.EnableEvents = False

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

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"

5. Tôi thiết nghĩ có lẽ không có ai sẽ có đủ kiên nhẫn để dò từng dữ liệu, từng dòng code của bạn để phát hiện chỗ sai đâu. Bạn nên tự dò lại từng dữ liệu, từng code để sửa thôi. Nếu căn bản còn nhiều lỗ hổng thì nên tự học hoặc theo học một khóa học. GPE không phải là chỗ để giảng một khóa VBA đâu. Mà bạn phải có căn bản đã. Không thể đốt cháy giai đoạn được.
 
Lần chỉnh sửa cuối:
Upvote 0
1. Bạn chạy được sub TongHop thì đúng là gặp may. Tại sao? Đọc tiếp

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
Mã:
Application.ScreenUpdating = False
Application.EnableEvents = False

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"

5. Tôi thiết nghĩ có lẽ không có ai sẽ có đủ kiên nhẫn để dò từng dữ liệu, từng dòng code của bạn để phát hiện chỗ sai đâu. Bạn nên tự dò lại từng dữ liệu, từng code để sửa thôi. Nếu căn bản còn nhiều lỗ hổng thì nên tự học hoặc theo học một khóa học. GPE không phải là chỗ để giảng một khóa VBA đâu. Mà bạn phải có căn bản đã. Không thể đốt cháy giai đoạn được.
Cảm ơn bác Siwtom, giờ e sửa được rồi. Đúng là e chưa được học VB, e chỉ tự học trên mạng, Từ trước giờ cũng chỉ tự học Excel trên mạng à chứ có được đi học ngày nào về excel bài bản đâu. Mong bác thông cảm, đang cố gắng học tìm hiểu và thực hành.
 
Upvote 0
Web KT

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

Back
Top Bottom