Nhờ cao nhân giúp đỡ vấn đề đánh số thứ tự tự động trên USERFORM

Liên hệ QC

xinanno22

Thành viên mới
Tham gia
17/3/21
Bài viết
4
Được thích
0
Chào các bác.

Mình có 1 form nhập liệu như hình:
1615952091379.png
1615952139443.png
có cách nào lúc mình bật user form lên thì texbox số thứ thự trên user form nó tự động nhảy lên 1 số so với số cuối cùng trong bảng dữ liệu không? Cách cho nó nhảy lên 1 số thì mình hình dung được cách viết code, nhưng lại ko biết viết ở chổ nào.

Bác nào biết chỉ mình với

Thank nhiều ạ
 
Bác ơi, viết trên chổ module1 hay form1 vậy bác
View attachment 255574
Nhập vào code của userform nha. Bạn chuột phải vào form rồi click "View Code" như hình. Xong đó nhập code vào màn hình bên tay phải.
Ủa mà Userform này không phải do bạn làm à? Thường vẽ được ra userform thế kia thì phải biết đoạn này rồi chứ nhỉ? :p

1615964249480.png
 
Upvote 0
Viết chỗ nào cũng được, miễn là chạy Sub lúc khởi động form, bạn xóa dữ liệu quan trọng rồi gửi file người ta xem cho dễ
Bác xem giúp tui với, t thử làm mà nó không ra, VBA tui hơi kém, toàn học khúc khúc trên mạng thôi à
 

File đính kèm

  • SALE DATA - Copy.xlsm
    79.6 KB · Đọc: 8
Upvote 0
Chủ bài đăng lưu í, 1 khi CSDL được hay bị ai đó sắp xếp theo 1 hay vài trướng khác trường [STT] này
Lúc ý cần phương thức khác hơn để STT sắp nhập sẽ lớn hơn 1 so với số lớn nhất trong cột số TT này.
 
Upvote 0
Cảm ơn bác nhé, đúng y luôn, thank nhiều ạ, bác ở Tân Bình đúng không? cho t xin SĐT nhé, có dịp qua đó t mời bác cafe cảm ơn nhé
Không có gì đâu, cái đó cũng không có gì rắc rối
Chủ bài đăng lưu í, 1 khi CSDL được hay bị ai đó sắp xếp theo 1 hay vài trướng khác trường [STT] này
Lúc ý cần phương thức khác hơn để STT sắp nhập sẽ lớn hơn 1 so với số lớn nhất trong cột số TT này.
Đúng như bác nói ạ :yes: , những phiếu nhập thường sẽ có số Phiếu nhập như ABC001 để đảm bảo tính duy nhất, lúc đánh số phiếu tự động thì em cũng phải tách hết phần số đưa vào mảng 1 chiều sau đó tìm giá trị lớn nhất, sau đó ghép lại "ABC"&"Giá trị lớn nhất"+1.
Bác có thể giúp em phương pháp nào gọn gàng hơn để đánh số phiếu tự động không ạ
 
Upvote 0
Mình có cách rùa này, bạn tham khảo thử nha:
Trang dữ liệu như sau:

STTMã NVSố PhiếuNgày lập phiếuMã KHSố lượng
1NPT1NPT1JC900112/9/2020KH00001
1​
2NPT1NPT1JC900212/9/2020KH00002
2​
3NMC1NMC1JC900112/9/2020KH00003
3​
4NPT0NPT0JC900112/9/2020KH00004
4​
5NPT1NPT1JC900112/9/2020KH00005
5​
6TVL0TVL0JC900112/9/2020KH00006
6​
7TVL1TVL1JC900112/9/2020KH00001
7​
8NMC1NMC1JCA00012/10/2020KH00003
13​
9NPT1NPT1JCA00012/10/2020KH00004
35​
10TVL1TVL1JCA00012/10/2020KH00002
33​
11NMC1NMC1JCA00112/10/2020KH00005
22​
12TVL1TVL1JCA00112/10/2020KH00001
2​
13NPT1NPT1JCA00112/10/2020KH00005
15​
14NPT1NPT1JCB00012/11/2020KH00006
21​
15NMC1NMC1JCB00012/11/2020KH00002
51​

Công việc là tìm số phiếu lớn nhất trong họ phiếu cần tìm:

PHP:
Private Sub cbDSNV_Change()
Dim Rng As Range, sRng As Range
Dim Rws As Long
Dim MyAdd As String, Ma As String, STT As String

Rws = [C2].CurrentRegion.Rows.Count
Set Rng = [C1].Resize(Rws)
Ma = Me!cbDSNV.Text & Me!tbMaNgay.Text
Set sRng = Rng.Find(Ma, , xlFormulas, xlPart)
If sRng Is Nothing Then
    Me!tbMaHD.Text = Ma & "000"
Else
    MyAdd = sRng.Address
    Do
        If Right(sRng.Value, 3) > STT Then STT = Right(sRng.Value, 3)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Me!tbMaHD.Text = Ma & Right("00" & CStr(Int(STT) + 1), 3)
End If
End Sub

Lưu ý: Mã ngày gồm 3 ký tự (chữ & số), như JCA: J chỉ năm, C chỉ tháng 12 & A chỉ ngày 10
 

File đính kèm

  • Form.rar
    35.3 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
Mình có cách rùa này, bạn tham khảo thử nha:
Trang dữ liệu như sau:

STTMã NVSố PhiếuNgày lập phiếuMã KHSố lượng
1NPT1NPT1JC900112/9/2020KH00001
1​
2NPT1NPT1JC900212/9/2020KH00002
2​
3NMC1NMC1JC900112/9/2020KH00003
3​
4NPT0NPT0JC900112/9/2020KH00004
4​
5NPT1NPT1JC900112/9/2020KH00005
5​
6TVL0TVL0JC900112/9/2020KH00006
6​
7TVL1TVL1JC900112/9/2020KH00001
7​
8NMC1NMC1JCA00012/10/2020KH00003
13​
9NPT1NPT1JCA00012/10/2020KH00004
35​
10TVL1TVL1JCA00012/10/2020KH00002
33​
11NMC1NMC1JCA00112/10/2020KH00005
22​
12TVL1TVL1JCA00112/10/2020KH00001
2​
13NPT1NPT1JCA00112/10/2020KH00005
15​
14NPT1NPT1JCB00012/11/2020KH00006
21​
15NMC1NMC1JCB00012/11/2020KH00002
51​

Công việc là tìm số phiếu lớn nhất trong họ phiếu cần tìm:

PHP:
Private Sub cbDSNV_Change()
Dim Rng As Range, sRng As Range
Dim Rws As Long
Dim MyAdd As String, Ma As String, STT As String

Rws = [C2].CurrentRegion.Rows.Count
Set Rng = [C1].Resize(Rws)
Ma = Me!cbDSNV.Text & Me!tbMaNgay.Text
Set sRng = Rng.Find(Ma, , xlFormulas, xlPart)
If sRng Is Nothing Then
    Me!tbMaHD.Text = Ma & "000"
Else
    MyAdd = sRng.Address
    Do
        If Right(sRng.Value, 3) > STT Then STT = Right(sRng.Value, 3)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Me!tbMaHD.Text = Ma & Right("00" & CStr(Int(STT) + 1), 3)
End If
End Sub

Lưu ý: Mã ngày gồm 3 ký tự (chữ & số), như JCA: J chỉ năm, C chỉ tháng 12 & A chỉ ngày 10
ví dụ em nhập số phiếu nó không tự động nhảy nơi anh
 
Upvote 0
Trong trang dữ liệu đã nhập có các ngày từ 9 đến 11 tháng 12; Bạn thử nhập 1 trong các ngày thuộc trong mấy ngày này sẽ đạt kết quả. . . .
 
Upvote 0
Trong trang dữ liệu đã nhập có các ngày từ 9 đến 11 tháng 12; Bạn thử nhập 1 trong các ngày thuộc trong mấy ngày này sẽ đạt kết quả. . . .
Anh giải thích giúp em vì sao lại dùng ngày tháng hiện tại thì không lập phiếu tự động tăng được vậy. Em cảm ơn
 
Upvote 0
Anh giải thích giúp em vì sao lại dùng ngày tháng hiện tại thì không lập phiếu tự động tăng được vậy. Em cảm ơn
Trong file, số phiếu được tạo từ 3 nguồn iêu cầu:
a./ Mã NV bán hàng (để phân biệt NV nào lập phiếu) & mã này có độ dài là 4 & đứng đầu trong 1 mã phiếu.
b./ Mã ngày giao dịch (gồm 3 kí tự hay số); Mã này được 1 hàm tự tạo tạo ra 1 cách tự động.
c./ Số thứ tự tăng dần của phiếu (nếu trùng mã NV & ngày (lập phiếu))
Thấy vậy để biết rằng ngày hiện tại chỉ là 1 trong các nguồn làm tăng số phiếu lên thôi.

Cảm ơn bạn nhiều vì đã hết sức quan tâm!
 
Upvote 0
Mình có cách rùa này, bạn tham khảo thử nha:
Trang dữ liệu như sau:

STTMã NVSố PhiếuNgày lập phiếuMã KHSố lượng
1NPT1NPT1JC900112/9/2020KH00001
1​
2NPT1NPT1JC900212/9/2020KH00002
2​
3NMC1NMC1JC900112/9/2020KH00003
3​
4NPT0NPT0JC900112/9/2020KH00004
4​
5NPT1NPT1JC900112/9/2020KH00005
5​
6TVL0TVL0JC900112/9/2020KH00006
6​
7TVL1TVL1JC900112/9/2020KH00001
7​
8NMC1NMC1JCA00012/10/2020KH00003
13​
9NPT1NPT1JCA00012/10/2020KH00004
35​
10TVL1TVL1JCA00012/10/2020KH00002
33​
11NMC1NMC1JCA00112/10/2020KH00005
22​
12TVL1TVL1JCA00112/10/2020KH00001
2​
13NPT1NPT1JCA00112/10/2020KH00005
15​
14NPT1NPT1JCB00012/11/2020KH00006
21​
15NMC1NMC1JCB00012/11/2020KH00002
51​

Công việc là tìm số phiếu lớn nhất trong họ phiếu cần tìm:

PHP:
Private Sub cbDSNV_Change()
Dim Rng As Range, sRng As Range
Dim Rws As Long
Dim MyAdd As String, Ma As String, STT As String

Rws = [C2].CurrentRegion.Rows.Count
Set Rng = [C1].Resize(Rws)
Ma = Me!cbDSNV.Text & Me!tbMaNgay.Text
Set sRng = Rng.Find(Ma, , xlFormulas, xlPart)
If sRng Is Nothing Then
    Me!tbMaHD.Text = Ma & "000"
Else
    MyAdd = sRng.Address
    Do
        If Right(sRng.Value, 3) > STT Then STT = Right(sRng.Value, 3)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Me!tbMaHD.Text = Ma & Right("00" & CStr(Int(STT) + 1), 3)
End If
End Sub

Lưu ý: Mã ngày gồm 3 ký tự (chữ & số), như JCA: J chỉ năm, C chỉ tháng 12 & A chỉ ngày 10
Cám ơn bác ạ, cách này hay và đỡ nhiều bước quá :-=
 
Upvote 0
Trong file, số phiếu được tạo từ 3 nguồn iêu cầu:
a./ Mã NV bán hàng (để phân biệt NV nào lập phiếu) & mã này có độ dài là 4 & đứng đầu trong 1 mã phiếu.
b./ Mã ngày giao dịch (gồm 3 kí tự hay số); Mã này được 1 hàm tự tạo tạo ra 1 cách tự động.
c./ Số thứ tự tăng dần của phiếu (nếu trùng mã NV & ngày (lập phiếu))
Thấy vậy để biết rằng ngày hiện tại chỉ là 1 trong các nguồn làm tăng số phiếu lên thôi.

Cảm ơn bạn nhiều vì đã hết sức quan tâm!
Dạ, a,b,c thì em cũng hiểu quy tắc tạo mã. Do hồi hôm không thực hiện click ở mã đối tượng nên nó không nhảy code để tạo mã nên add vào sai.
 
Upvote 0
PHP:
Private Sub cbDSNV_Change()
Dim Rng As Range, sRng As Range
Dim Rws As Long
Dim MyAdd As String, Ma As String, STT As String

Rws = [C2].CurrentRegion.Rows.Count
Set Rng = [C1].Resize(Rws)
Ma = Me!cbDSNV.Text & Me!tbMaNgay.Text
Set sRng = Rng.Find(Ma, , xlFormulas, xlPart)
If sRng Is Nothing Then
    Me!tbMaHD.Text = Ma & "000"
Else
    MyAdd = sRng.Address
    Do
        If Right(sRng.Value, 3) > STT Then STT = Right(sRng.Value, 3)
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    Me!tbMaHD.Text = Ma & Right("00" & CStr(Int(STT) + 1), 3)
End If
End Sub
Nhờ anh chú thích code giúp được không
 
Upvote 0
Private Sub cbDSNV_Change()
Dim Rng As Range, sRng As Range
Dim Rws As Long
Dim MyAdd As String, Ma As String, STT As String

1 Rws = [C2].CurrentRegion.Rows.Count
Set Rng = [C1].Resize(Rws)
3 Ma = Me!cbDSNV.Text & Me!tbMaNgay.Text
Set sRng = Rng.Find(Ma, , xlFormulas, xlPart)
5 If sRng Is Nothing Then
Me!tbMaHD.Text = Ma & "000"
7 Else
MyAdd = sRng.Address
9 Do
If Right(sRng.Value, 3) > STT Then STT = Right(sRng.Value, 3)
11 Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
13 Me!tbMaHD.Text = Ma & Right("00" & CStr(Int(STT) + 1), 3)
End If
End Sub
3 dòng lệnh trước (1): Khai báo các tham biến cần dùng;
1: Gán số dòng của vùng (đã sử dụng) vô biến
2: Gán vùng dữ liệu của cột C vô tham biến đối tượng;
3: Gán nội dung kết nối từ ComboBox & TextBox vô biến 'Ma';
4: Áp dụng phương thức tìm kiếm 1 phần trong vùng Rng
5: Điều kiện Nếu không tìm thấy thì TextBox mã HĐ sẽ là trị trong tham biến Ma nối với chuỗi 3 con số 'O': Mã đầu tiên trong ngày của NV tương ứng;
7: Đ/K tìm thấy:
8: Dưa chuỗi địa chỉ ô tìm thấy vô tham biến MyaDD
9: Khởi tạo vòng lặp tìm cho bằng hết các trị cần tìm; Vòng lặp kết thúc tại dòng 12
10: Nếu 3 kí số cuối của ô tìm thấy lớn hơn trị trong tham biến STT thì trị trong tham biến sẽ lấy trị mới này
11: Phát lệnh tìm tiếp
13: TextBox mã HĐ sẽ nhận trị số HĐ lớn nhất (đã tìm thấy) cộng thêm đơn vị.
14: Kế1 tthúc công cuộc tìm kiếm (các mã cùng họ)

Chúc vui!
 
Upvote 0
3 dòng lệnh trước (1): Khai báo các tham biến cần dùng;
1: Gán số dòng của vùng (đã sử dụng) vô biến
2: Gán vùng dữ liệu của cột C vô tham biến đối tượng;
3: Gán nội dung kết nối từ ComboBox & TextBox vô biến 'Ma';
4: Áp dụng phương thức tìm kiếm 1 phần trong vùng Rng
5: Điều kiện Nếu không tìm thấy thì TextBox mã HĐ sẽ là trị trong tham biến Ma nối với chuỗi 3 con số 'O': Mã đầu tiên trong ngày của NV tương ứng;
7: Đ/K tìm thấy:
8: Dưa chuỗi địa chỉ ô tìm thấy vô tham biến MyaDD
9: Khởi tạo vòng lặp tìm cho bằng hết các trị cần tìm; Vòng lặp kết thúc tại dòng 12
10: Nếu 3 kí số cuối của ô tìm thấy lớn hơn trị trong tham biến STT thì trị trong tham biến sẽ lấy trị mới này
11: Phát lệnh tìm tiếp
13: TextBox mã HĐ sẽ nhận trị số HĐ lớn nhất (đã tìm thấy) cộng thêm đơn vị.
14: Kế1 tthúc công cuộc tìm kiếm (các mã cùng họ)

Chúc vui!
Cảm ơn anh. Chổ dòng 10, biến STT khởi tạo string, không có giá trị thì so sánh sao anh (nhờ anh phân tích chổ này giúp em tý)
 
Upvote 0
Web KT
Back
Top Bottom