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
Anh tham khảo thêm thôi nha. Cái em thêm vào dở ẹcEm 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 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
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
Đã dùng vba rồi thì thôi dùng Table được không?tạo mã đơn hàng nối tiếp sau khi marco chèn dòng thực hiện
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
Ở đoạn code này; bạn bẫy luôn giúp mình cả 2 tình huống. Cảm ơn vanthinh3101 nhiều nhéEm góp vui tí.
If lR < 9 Then
Exit Sub
ElseIf lR = 9 Then
.Rows(lR).Insert
.Range("A" & lR) = "DH00001"
[/CODE]
Ồ 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ề DH00001Anh tham khảo thêm thôi nha. Cái em thêm vào dở ẹc![]()
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.Đã dùng vba rồi thì thôi dùng Table được không?
Khi click vào nó vẫn hiển thị tốt đẹp mà --> kệ nó đi.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
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
Chuyển Table về Range: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
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
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.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!
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
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