Giải thích giúp e về cái code nhập dữ liệu này (1 người xem)

  • Thread starter Thread starter lohado
  • Ngày gửi Ngày gửi
Liên hệ QC

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

lohado

Thành viên mới
Tham gia
1/5/12
Bài viết
44
Được thích
5
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Long, R As Long, Rng As Range, Cll As Range, DK As String
If Target.Column > 2 And Target.Rows.Count = 1 Then
    C = Target.Column + 2: R = Target.Row: DK = Cells(R, 2).Value
    With Sheets("BangTheoDoi")
        Set Rng = .Range(.[A7], .[A65000].End(xlUp))
        For Each Cll In Rng
            If Cll.Value = DK Then
                Cll.Offset(6, C).Value = Target.Value
                Exit For
            End If
        Next
    End With
End If
End Sub

Em xin được cái code này của bạn Ba Tê nhờ các thầy cô anh chị giải thích giùm với ạ .
Giờ e muốn mỗi khi có cái lịch giao hàng mới, chỉ cần cop bảng lịch đấy vào đúng sheet" lịch giao hàng" thì dữ liệu cũ tại dòng "Delivered" bị xóa và dữ liệu mới tự động chạy sang dòng "Delivered" tại " bang theo doi" có được không???. hay bạn cho 1 cái nút ấn giấu đâu đó cũng được.
Thật lòng là e cũng cần đến nó, nên e mang nó sang đây nhờ các thầy cô, anh chị và các bạn giải thích giúp ạ.
Em xin chân thành cảm ơn !
 

File đính kèm

Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Long, R As Long, Rng As Range, Cll As Range, DK As String
If Target.Column > 2 And Target.Rows.Count = 1 Then
    C = Target.Column + 2: R = Target.Row: DK = Cells(R, 2).Value
    With Sheets("BangTheoDoi")
        Set Rng = .Range(.[A7], .[A65000].End(xlUp))
        For Each Cll In Rng
            If Cll.Value = DK Then
                Cll.Offset(6, C).Value = Target.Value
                Exit For
            End If
        Next
    End With
End If
End Sub

Em xin được cái code này của bạn Ba Tê nhờ các thầy cô anh chị giải thích giùm với ạ .
Giờ e muốn mỗi khi có cái lịch giao hàng mới, chỉ cần cop bảng lịch đấy vào đúng sheet" lịch giao hàng" thì dữ liệu cũ tại dòng "Delivered" bị xóa và dữ liệu mới tự động chạy sang dòng "Delivered" tại " bang theo doi" có được không???. hay bạn cho 1 cái nút ấn giấu đâu đó cũng được.
Thật lòng là e cũng cần đến nó, nên e mang nó sang đây nhờ các thầy cô, anh chị và các bạn giải thích giúp ạ.
Em xin chân thành cảm ơn !

Giải thích là sao? Giải thích để làm gì? Bạn tự sửa được không?
Trong code này thì bạn muốn giải thích dòng nào?
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim C As Long, R As Long, Rng As Range, Cll As Range, DK As String
If Target.Column > 2 And Target.Rows.Count = 1 Then
    C = Target.Column + 2: R = Target.Row: DK = Cells(R, 2).Value
    With Sheets("BangTheoDoi")
        Set Rng = .Range(.[A7], .[A65000].End(xlUp))
        For Each Cll In Rng
            If Cll.Value = DK Then
                Cll.Offset(6, C).Value = Target.Value
                Exit For
            End If
        Next
    End With
End If
End Sub
Còn câu này:
Giờ e muốn mỗi khi có cái lịch giao hàng mới, chỉ cần cop bảng lịch đấy vào đúng sheet" lịch giao hàng" thì dữ liệu cũ tại dòng "Delivered" bị xóa và dữ liệu mới tự động chạy sang dòng "Delivered" tại " bang theo doi" có được không???. hay bạn cho 1 cái nút ấn giấu đâu đó cũng được.
Tôi tặng bạn cái này, nó đúng ý bạn đấy nếu bạn biết xài.
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Dic As Object, I As Long, J As Long, K As Long, sArr(), dArr(), Rng As Range, Cll As Range
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("LichGiaoHang")
    sArr = .Range(.[B19], .[B65000].End(xlUp)).Resize(, 32).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 31)
For I = 1 To UBound(sArr, 1)
    If Not Dic.Exists(sArr(I, 1)) Then
        K = K + 1
        Dic.Add sArr(I, 1), K
        For J = 1 To 31
            dArr(K, J) = sArr(I, J + 1)
        Next
    End If
Next I
With Sheets("BangTheoDoi")
    Cells.Interior.ColorIndex = 0
    Set Rng = .Range(.[A7], .[A65000].End(xlUp))
    For Each Cll In Rng
        If Dic.Exists(Cll.Value) Then
            For J = 1 To 31
                Cll.Offset(6, J + 3) = dArr(Dic.Item(Cll.Value), J)
            Next J
            Cll.Offset(6).Resize(, 37).Interior.ColorIndex = 6
        End If
    Next
End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình xin chân thành cảm ơn bạn.
Nói thật là mình dốt , không biết gì thật sự. Vì thế nhận được sự giúp đỡ của các bạn mình cảm thấy rất vui và hạnh phúc.
Như bạn nói code tặng mình theo đúng ý nếu biết dùng. Bạn bôi đỏ 3 dòng kia, vậy chắc chắn là chỗ đó thay đổi được 2 cái dưới thì chỉ là tên sheet. còn cái trên thì mình không hiểu.sau nữa là mình vừa paste cái cod này vào bảng thì thấy nó ghi nhầm dữ liệu ngày mùng 1 vào ô safety stock. Thôi thì đã giúp thì giúp cho chót, bạn giải thích và sủa lại giúp mình với. Mình xin chân thành cảm ơn !
 
Upvote 0
Mình xin chân thành cảm ơn bạn.
Nói thật là mình dốt , không biết gì thật sự. Vì thế nhận được sự giúp đỡ của các bạn mình cảm thấy rất vui và hạnh phúc.
Như bạn nói code tặng mình theo đúng ý nếu biết dùng. Bạn bôi đỏ 3 dòng kia, vậy chắc chắn là chỗ đó thay đổi được 2 cái dưới thì chỉ là tên sheet. còn cái trên thì mình không hiểu.sau nữa là mình vừa paste cái cod này vào bảng thì thấy nó ghi nhầm dữ liệu ngày mùng 1 vào ô safety stock. Thôi thì đã giúp thì giúp cho chót, bạn giải thích và sủa lại giúp mình với. Mình xin chân thành cảm ơn !
Tôi "sợ" cái từ "giải thích" rồi.
Nếu làm thì tôi làm giùm bạn luôn.
Bạn kiểm tra các dòng màu vàng bên sheet <BangTheoDoi> xem có đúng như bên sheet <LichGiaoHang> ghi qua không.
Nếu không đúng ở dòng nào thì cho biết, còn giải thích thì ... Híc!
 

File đính kèm

Upvote 0
Tôi "sợ" cái từ "giải thích" rồi.
Nếu làm thì tôi làm giùm bạn luôn.
Bạn kiểm tra các dòng màu vàng bên sheet <BangTheoDoi> xem có đúng như bên sheet <LichGiaoHang> ghi qua không.
Nếu không đúng ở dòng nào thì cho biết, còn giải thích thì ... Híc!
Thì như mình nói từ nãy đấy nó điền sớm hơn 1 ngày. mùng 3>2; mùng 2 > 1; mùng 1 điền vào safety stock
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không biết gì về code nên đã tự sửa lại bảng theo doi.cụ thể:
+Xóa cái cột A mà bạn tạo thêm cho mình
+sửa lại cái cột của mình giống y hệt cột A bạn tạo cho.( không megre cell)
kết quả là nó đã điền đúng ngày mà không bị lệch.
Phù ! xong!
Mình vô cùng cảm ơn bạn !

Điều cuối cùng mình muốn là nó không bôi màu vàng dòng Delivered nữa @@
 
Upvote 0
Thì như mình nói từ nãy đấy nó điền sớm hơn 1 ngày. mùng 3>2; mùng 2 > 1; mùng 1 điền vào safety stock
Bạn nói cái file nào vậy? Bạn có thử cái file tôi gởi lại ở bài #4 không? Khi đã làm và trả lời thì tôi cũng phải kiểm tra xem code mình có chạy đúng không chứ.
Bạn xem thử trong sheet <LichGiaoHang> tôi nhập "Má Ơi" vào các ô I21:K24, rồi tìm trong sheet <BangTheoDoi> nó nằm ở cột nào?
Bạn gởi cái file bạn nói lỗi lên đây xem.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn nói cái file nào vậy? Bạn có thử cái file tôi gởi lại ở bài #4 không? Khi đã làm và trả lời thì tôi cũng phải kiểm tra xem code mình có chạy đúng không chứ.
Bạn xem thử trong sheet <LichGiaoHang> tôi nhập "Má Ơi" vào các ô I21:K24, rồi tìm trong sheet <BangTheoDoi> nó nằm ở cột nào?
Bạn gởi cái file bạn nói lỗi lên đây xem.
xin lỗi bạn vì mình không chú ý file đính kèm ở #4
Cảm ơn bạn rất rất nhiều vì sự giúp đỡ này. Nó giúp mình tiết kiệm được rất nhiều thời gian khi làm việc với cái bảng này. Mình mới đi làm và cũng mới tiếp xúc ít với excel trong khoảng thời gian ngắn nên độ gà thì khỏi nói. Bạn thông cảm cho mình nhé.
PS: lại không chú ý nữa. xin lỗi bạn rất nhiều :((
 
Lần chỉnh sửa cuối:
Upvote 0
Em nghĩ bác Ba Tê không nên dùng [A65000].End(xlUp) như nhiều người vẫn dùng vì thói quen sử dụng Excel 2003.
Phiên bản 2007 hơn 1 triệu dòng, dễ dẫn đến nhầm lẫn.
 
Upvote 0
Em nghĩ bác Ba Tê không nên dùng [A65000].End(xlUp) như nhiều người vẫn dùng vì thói quen sử dụng Excel 2003.
Phiên bản 2007 hơn 1 triệu dòng, dễ dẫn đến nhầm lẫn.
Híc! Tui vẫn xài bộ Office 2003 nên nó là thói quen, 65000 gõ nhanh hơn 65536.
Máy bàn gắn bó lâu "gồi", dù "bèo" nhưng cũng còn "chơi" được, hổng đành bỏ nó. Mà biểu nó chạy bộ Office 2007 hay hơn nữa sợ nó "cự".
-------------------------------------
Hì hì... Lâu gặp Hướng quá. Gia đình vẫn khoẻ chứ? Mình gởi lời thăm "Thủ Trưởng" và các cháu nghe.
 
Upvote 0
Em nghĩ bác Ba Tê không nên dùng [A65000].End(xlUp) như nhiều người vẫn dùng vì thói quen sử dụng Excel 2003.
Phiên bản 2007 hơn 1 triệu dòng, dễ dẫn đến nhầm lẫn.
Em nghĩ vì file gốc của tác giả là phiên bản 2003 nên bác Ba Tê khỏi cần quan tâm chỗ đỏ đỏ đó đâu anh ạ, cứ y chang mà chiến thôi, chứ nếu là từ phiên bản 2007 trở nên thì bác ấy cũng bái bai topic này luôn, hehehe
 
Upvote 0
Em nghĩ vì file gốc của tác giả là phiên bản 2003 nên bác Ba Tê khỏi cần quan tâm chỗ đỏ đỏ đó đâu anh ạ, cứ y chang mà chiến thôi, chứ nếu là từ phiên bản 2007 trở nên thì bác ấy cũng bái bai topic này luôn, hehehe

Híc!
Tui xài 2003 nhưng có lần có người nào đó trên GPE chỉ tải "cái gì đó" về là mở được file 2007...2010 nên tải về cài đặt thử, thấy cũng mở được file.
Từ đó cứ mở "tút tùn tụt" các file Excel của các bạn hỏi, "gồi chả lời" lại bằng file 2003.
Ha ha ha...
Xe đạp kéo xe hơi! Hổng "bái bai" thằng nào.
 
Upvote 0
Em nghĩ vì file gốc của tác giả là phiên bản 2003 nên bác Ba Tê khỏi cần quan tâm chỗ đỏ đỏ đó đâu anh ạ, cứ y chang mà chiến thôi, chứ nếu là từ phiên bản 2007 trở nên thì bác ấy cũng bái bai topic này luôn, hehehe
Chính xác là từ ngày đến làm chỗ này em lên đời office 2007 cho cả phòng. Cái bảng này chắc là từ hồi xưa người ta dựng lên từ 2003 @@
 
Upvote 0
Bạn ơi khi mình áp dụng ra toàn bộ bảng của mình thì gặp hiện tượng này.Các mã hàng QC2-8244-000,QC2-9454-000,QC2-9588-000.....như đính kèm không tự chuyển dữ liệu sang. Bạn xem ròi sửa giúp mình với nhé :(
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi khi mình áp dụng ra toàn bộ bảng của mình thì gặp hiện tượng này.Các mã hàng QC2-8244-000,QC2-9454-000,QC2-9588-000.....như đính kèm không tự chuyển dữ liệu sang. Bạn xem ròi sửa giúp mình với nhé :(

ps, ko đính kèm được nên bạn down từ link này nhé
http://www.mediafire.com/download/a7tadk0xikotlsg/VBA_test.rar

Bạn đang "giỡn" với VBA rồi.
Sheet LichGiaoHang file cũ bắt đầu từ dòng 19, file sau từ dòng 4.
Sheet BangTheo Doi file cũ từ dòng 7 - file sau từ dòng 8.
Bạn tự sửa code để sau này bạn muốn ở đâu tuỳ ý, code phải viết chính xác từng dòng, từng cột, không thể "hứng lên" muốn "quất" mấy dòng, mấy cột thì "quất". Nó hổng biết chỗ nào mà "rà, rà... trúng thì quất" theo ý bạn được.
----------------
Rất xin lỗi nếu những lời "thiệt tình" của tui không phù hợp cách hiểu của bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn đang "giỡn" với VBA rồi.
Sheet LichGiaoHang file cũ bắt đầu từ dòng 19, file sau từ dòng 4.
Sheet BangTheo Doi file cũ từ dòng 7 - file sau từ dòng 8.

Bạn tự sửa code để sau này bạn muốn ở đâu tuỳ ý, code phải viết chính xác từng dòng, từng cột, không thể "hứng lên" muốn "quất" mấy dòng, mấy cột thì "quất". Nó hổng biết chỗ nào mà "rà, rà... trúng thì quất" theo ý bạn được.
----------------
Rất xin lỗi nếu những lời "thiệt tình" của tui không phù hợp cách hiểu của bạn.
Mình nói là mình không bít gì về VBA mà. Nhưng mà nghe bạn nói mình cũng hiểu ra tí tí. }}}}}}}}}}}}}}}:D
"Thiệt Tình" là cảm ơn bạn Ba Tê nhiều lắm. Mình làm được rồi ^^~--=0
 
Upvote 0

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

Back
Top Bottom