Tạo mã đơn hàng nối tiếp đơn sau trong Bảng excel (1 người xem)

Liên hệ QC

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

Nguyễn Hồng Quang

Thành viên GPE Hà Nội
Tham gia
8/6/07
Bài viết
1,203
Được thích
877
Giới tính
Nam
Nghề nghiệp
Kế toán
Em có bảng tổng hợp theo dõi đơn hàng và 1 Marco chèn dòng tiếp vào dòng dưới cùng của bảng tính
Em muốn tạo mã đơn hàng nối tiếp sau khi marco chèn dòng thực hiện
Rất mong các anh chị, em và các bạn giúp đỡ
Xin cảm ơn
 

File đính kèm

Em có bảng tổng hợp theo dõi đơn hàng và 1 Marco chèn dòng tiếp vào dòng dưới cùng của bảng tính
Em muốn tạo mã đơn hàng nối tiếp sau khi marco chèn dòng thực hiện
Rất mong các anh chị, em và các bạn giúp đỡ
Xin cảm ơn
Anh tham khảo thêm thôi nha. Cái em thêm vào dở ẹc :p:p:p
 

File đính kèm

Upvote 0
Em có bảng tổng hợp theo dõi đơn hàng và 1 Marco chèn dòng tiếp vào dòng dưới cùng của bảng tính
Em muốn tạo mã đơn hàng nối tiếp sau khi marco chèn dòng thực hiện
Rất mong các anh chị, em và các bạn giúp đỡ
Xin cảm ơn
Em góp vui tí.
Em làm dựa vào vị trí "Tổng cộng" trong cột A
Mã:
Sub GPE()
    Dim lR As Long, I As Long
    
    With Sheet10
        lR = .Columns("A").Find(what:="T" & ChrW(7893) & "ng c" & ChrW(7897) & "ng").Row
        If lR < 9 Then
            Exit Sub
        ElseIf lR = 9 Then
            .Rows(lR).Insert
            .Range("A" & lR) = "DH00001"
        Else
            .Rows(lR).Insert
           .Range("A" & lR) = "DH" & Format(Right(.Range("A" & (lR - 1)), 5) * 1 + 1, "00000")
        End If
    End With
End Sub
 
Upvote 0
tạo mã đơn hàng nối tiếp sau khi marco chèn dòng thực hiện
Đã dùng vba rồi thì thôi dùng Table được không?
PHP:
Sub Button320_Click()
    Dim opCal, LastRow As Long, sCode As String
    opCal = Application.Calculation
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Application.CutCopyMode = False
    With Sheet10 'With Sheets("TH theo DH")
        LastRow = .Cells(Rows.Count, "B").End(xlUp).Row
        sCode = .Range("A" & LastRow - 1).Value
        If LastRow < 9 Then Exit Sub
        .Rows(LastRow).Insert Shift:=xlDown
        If Len(sCode) > 0 Then .Range("A" & LastRow).Value = Left(sCode, 2) & Format(CLng(Mid(sCode, 3)) + 1, String(Len(sCode) - 2, "0"))
    End With
    Application.Calculation = opCal
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Anh tham khảo thêm thôi nha. Cái em thêm vào dở ẹc :p:p:p
Ồ không dở chút nào đâu. Mình cảm ơn ♫ђöล♥ßล†♥†µ♫ nhiều; code của bạn ra kết quả vượt cả những gì mình mong đợi. Mình kiểm tra thử ở DH100000 thì code vẫn nỗi tiếp ra được DH100001 chứ không bị lỗi quay về DH00001
 
Upvote 0
Đã dùng vba rồi thì thôi dùng Table được không?
Cảm ơn anh befaint, tại em trót sử dụng Textbox sẵn có của Excel để lọc khách hàng rồi nên phải dùng Table name để chạy code.
Anh cho em hỏi thêm là có cách nào khắc phục lỗi hiển thị dấu ? của các chữ có dấu trong Textbox không anh ơi
 

File đính kèm

Upvote 0
có cách nào khắc phục lỗi hiển thị dấu ? của các chữ có dấu trong Textbox không
Khi click vào nó vẫn hiển thị tốt đẹp mà --> kệ nó đi. :D
PHP:
Private Sub TextBox1_Change()
    Dim FindString As String
    FindString = TextBox1.Text
    With Sheet10 'With Sheets("TH theo DH")
        If Len(FindString) = 0 Then
            .ShowAllData
        Else
            .ListObjects("Table1").Range.AutoFilter Field:=3, Criteria1:="*" & FindString & "*"
        End If
    End With
End Sub
trót sử dụng Textbox sẵn có của Excel để lọc khách hàng rồi nên phải dùng Table name để chạy code
Chuyển Table về Range:
PHP:
Private Sub TextBox1_Change()
    Dim FindString As String, lRow As Long, Rng As Range
    FindString = TextBox1.Text
    With Sheet10 'With Sheets("TH theo DH")
        lRow = .Range("A" & Rows.Count).End(xlUp).Row
        If lRow < 8 Then Exit Sub
        Set Rng = .Range("C8:C" & lRow)
        If Len(FindString) = 0 Then
            .AutoFilterMode = False
        Else
            Rng.AutoFilter Field:=1, Criteria1:="*" & FindString & "*"
        End If
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình xin góp với bạn ý này: Xây dựng hệ thống mã đơn hàng gồm 2 thành tố
1./ Thành tố thứ nhất luôn sẽ là 3 kí tự; 3 kí tự (có thể có kí số) này liên hệ chặt chẽ đến ngày fát hành hóa đơn (HĐ)sau:
Ví dụ HĐ ngày 10/4/2018 sẽ là H4A & ngày kế tiếp là H4B,. . . .
Ờ đây chữ cái 'H' chỉ năm fát hành HĐ ; (H cũng là cột thứ 8 trong bảng tính Excel)
con số 4 biểu thị cho tháng 4 trong năm fát hành HĐ; tháng 10 sẽ la 'A' làm đại diện, . . .
Chữ cái 'A' hay 'B' cuối trong thành tố thể hiện ngày ra HĐ,. . . .
2./ Thành tố thứ 2 gồm các kí số; & số kí số sẽ fụ thuộc vô số HĐ thường fát hành trong ngày của đơn vị của bạn;
Ví dụ nếu trong 1 ngày sẽ chỉ ban hành dưới 999 HĐ, thì fần này (mình thường gọi là fần định trị) chỉ gồm 2 kí số;
(Với 2 kí số hay kí tự, ta có thể biểu diễn đến 36 x 36 HĐ trong 1 ngày)
Ví dụ HAJZZ sẽ được diễn dịch là số HĐ thứ (36*36) fát hành trong ngày 19 tháng 10 năm nay

Như vậy thay vì số HĐ theo mã của bạn có 7 kí tự số, thì rút lại còn 5;
Chưa chỉ có vậy; bộ mã này có lợi ích trong việc thống kê theo ngày, tháng hay năm ban hành HĐ;

Nếu bạn chịu hệ mã HĐ này mình sẽ khuyến mãi thêm 2 hàm người dũng để chuyển đổi:
a./ Từ 1 ngày cụ thể nào đó trong nữa thế kỉ đương thời ra thành fần đặc tính (theo cách mình gọi) cho bạn
b./ Từ mã của HĐ ra ngày thực thụ fát hành HĐ đó.

Có thể bạn tẩu hỏa nhập ma khi đọc những dòng này; nhưng bảo đảm rằng 1 khi xài quen, bạn sẽ thích ngay í mà!

Chúc vui cả ngày nha bạn!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình xin góp với bạn ý này: Xây dựng hệ thống mã đơn hàng gồm 2 thành tố
1./ Thành tố thứ nhất luôn sẽ là 3 kí tự; 3 kí tự (có thể có kí số) này liên hệ chặt chẽ đến ngày fát hành hóa đơn (HĐ)sau:
Ví dụ HĐ ngày 10/4/2018 sẽ là H4A & ngày kế tiếp là H4B,. . . .
Ờ đây chữ cái 'H' chỉ năm fát hành HĐ ; (H cũng là cột thứ 8 trong bảng tính Excel)
con số 4 biểu thị cho tháng 4 trong năm fát hành HĐ; tháng 10 sẽ la 'A' làm đại diện, . . .
Chữ cái 'A' hay 'B' cuối trong thành tố thể hiện ngày ra HĐ,. . . .
2./ Thành tố thứ 2 gồm các kí số; & số kí số sẽ fụ thuộc vô số HĐ thường fát hành trong ngày của đơn vị của bạn;
Ví dụ nếu trong 1 ngày sẽ chỉ ban hành dưới 999 HĐ, thì fần này (mình thường gọi là fần định trị) chỉ gồm 2 kí số;
(Với 2 kí số hay kí tự, ta có thể biểu diễn đến 36 x 36 HĐ trong 1 ngày)
Ví dụ HAJZZ sẽ được diễn dịch là số HĐ thứ (36*36) fát hành trong ngày 19 tháng 10 năm nay

Như vậy thay vì số HĐ theo mã của bạn có 7 kí tự số, thì rút lại còn 5;
Chưa chỉ có vậy; bộ mã này có lợi ích trong việc thống kê theo ngày, tháng hay năm ban hành HĐ;

Nếu bạn chịu hệ mã HĐ này mình sẽ khuyến mãi thêm 2 hàm người dũng để chuyển đổi:
a./ Từ 1 ngày cụ thể nào đó trong nữa thế kỉ đương thời ra thành fần đặc tính (theo cách mình gọi) cho bạn
b./ Từ mã của HĐ ra ngày thực thụ fát hành HĐ đó.

Có thể bạn tẩu hỏa nhập ma khi đọc những dòng này; nhưng bảo đảm rằng 1 khi xài quen, bạn sẽ thích ngay í mà!

Chúc vui cả ngày nha bạn!
Cảm ơn HYen17 nha, trong ngày hôm nay Quang sẽ dành 1 khoảng thời gian đọc kỹ #9 này, chỗ nào chưa hiểu sẽ gửi thư hỏi thêm bạn sau.
 
Upvote 0
PHP:
Function MaVT(Dat As Date) As String
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

MaVT = Mid(Alf, Year(Dat) - 2000, 1)
MaVT = MaVT & Mid(Alf, 1 + Month(Dat), 1)
MaVT = MaVT & Mid(Alf, 1 + Day(Dat), 1)

End Function

& đây là hàm chuyển ngược từ mã thành ra ngày-tháng-năm của hóa đơn:
PHP:
Function IDToDate(StrC As String) As Date
 Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 Dim Nm As Long, Th As Byte, Ng As Byte, VTr As Integer
  
 VTr = InStr(Alf, Left(StrC, 1))
 Nm = 2000 + VTr
 VTr = InStr(Alf, Mid(StrC, 2, 1))
 Th = VTr - 1
 VTr = InStr(Alf, Right(StrC, 1))
 Ng = VTr - 1
 IDToDate = DateSerial(Nm, Th, Ng)
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tặng chủ bài đăng file này để bạn vận hành thử hệ mã vật tư kiểu mới
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom