Nhờ mọi người hỗ trợ điều chỉnh code file quản lý nhân sự

Liên hệ QC

viettho

Thành viên hoạt động
Tham gia
4/7/11
Bài viết
120
Được thích
24
Chào anh/ chị
Hiện tại, em có một file quản lý nhân sự bên công ty em. Em có tạo 1 userform dùng để nhập liệu hồ sơ nhân viên nhưng khi nhập liệu gặp phải vấn đề khi nhập liệu địa chỉ hộ khẩu của nhân viên như sau:
- Trên userform dùng để nhập liệu em có dùng combobox để tách riêng tỉnh, huyện, xã để nhập liệu. Khi nhập tên tỉnh thì combobox nhập tên huyện chỉ thể hiện các huyện thuộc tỉnh đó và tương tự đối với combobox tên xã.
- Nhưng em có vấn đề khi nhập tên Tỉnh Hậu Giang thì combobox nhập tên huyện vẫn thể hiện các quận huyện thuộc Tỉnh Hậu Giang nhưng thiếu Huyện Châu Thành.
- Em có kiểm tra dữ liệu tỉnh huyện xã của em lcó thông tin huyện Châu Thành nhưng không biết tại sao không thể hiện trên combobox khi nhập liệu.
Em gởi file đính kèm anh/ chị giúp em nhé
 

File đính kèm

  • Employee database.xlsm
    1.3 MB · Đọc: 28
Chào anh/ chị
Hiện tại, em có một file quản lý nhân sự bên công ty em. Em có tạo 1 userform dùng để nhập liệu hồ sơ nhân viên nhưng khi nhập liệu gặp phải vấn đề khi nhập liệu địa chỉ hộ khẩu của nhân viên như sau:
- Trên userform dùng để nhập liệu em có dùng combobox để tách riêng tỉnh, huyện, xã để nhập liệu. Khi nhập tên tỉnh thì combobox nhập tên huyện chỉ thể hiện các huyện thuộc tỉnh đó và tương tự đối với combobox tên xã.
- Nhưng em có vấn đề khi nhập tên Tỉnh Hậu Giang thì combobox nhập tên huyện vẫn thể hiện các quận huyện thuộc Tỉnh Hậu Giang nhưng thiếu Huyện Châu Thành.
- Em có kiểm tra dữ liệu tỉnh huyện xã của em lcó thông tin huyện Châu Thành nhưng không biết tại sao không thể hiện trên combobox khi nhập liệu.
Em gởi file đính kèm anh/ chị giúp em nhé
Vì có Huyện Châu Thành A rồi, nên trùng

Sửa ở sub nap_huyen như sau (thêm phần đỏ)
If Huyen(i, 1) = Me.cbxTinh And InStr(1, ktr, Huyen(i, 2) & ";") = 0 Then

If Huyen(i, 1) = Me.cbxTinh And InStr(1, ktr, Huyen(i, 2) & ";") = 0 Then

---------Tuy thế thuật toán kiểu dò tìm này tốn thời gian quá - vì số liệu nhập kiểu lạ
 
Upvote 0
Vì có Huyện Châu Thành A rồi, nên trùng

Sửa ở sub nap_huyen như sau (thêm phần đỏ)
If Huyen(i, 1) = Me.cbxTinh And InStr(1, ktr, Huyen(i, 2) & ";") = 0 Then

If Huyen(i, 1) = Me.cbxTinh And InStr(1, ktr, Huyen(i, 2) & ";") = 0 Then

---------Tuy thế thuật toán kiểu dò tìm này tốn thời gian quá - vì số liệu nhập kiểu lạ
Dạ em cám ơn, nhưng em hơi thắc mắc nếu Huyện Châu Thành A và Huyện Châu Thành như anh nói là trùng thì em thấy chưa hiểu lắm phần này
 
Upvote 0
Dạ em cám ơn, nhưng em hơi thắc mắc nếu Huyện Châu Thành A và Huyện Châu Thành như anh nói là trùng thì em thấy chưa hiểu lắm phần này
Chưa hiểu thì tìm hiểu hàm InStr() --- vì khi tìm "Huyện Châu Thành" thì trong ktr đã chứa nó trong "Huyện Châu Thành A"
 
Lần chỉnh sửa cuối:
Upvote 0
Mình xin gợi ý cho bạn cách mà ta có thể tăng tốc cho quá trình tạo ra danh sách quận huyện tương ứng 1 khi bạn chọn 1 tỉnh/thành cụ thể nào đó:
1./ Nếu vấn đề:
Hiện tại, khi bạn chọn 1 địa danh tỉnh hay thành nào đó, macro sẽ tìm trong cột tỉnh thành tới 11164 dòng dữ liệu để lấy ra cỡ không quá 50 dòng chứa quãn hay huyện trực thuộc tỉnh (mà bạn đã vừa chọn)
Nhưng vậy sẽ chậm
2./ Cách tằng tốc:
Bạn chép 2 cột A & B của trang tính 'T_H_X' (Tên bạn gán cho trang tính quá ư dài không cần thiết!) sang cột G & H
Thực hiện việc xóa trùng trong cả 2 cột mới chép sang này
Khi đó ta chỉ còn lại chỉ là 711 dòng dữ liệu

Kết luận: Suy ra với phương cách hiện thời của bạn đi chang nữa, ta đã giảm đáng kể quá trình chạy vòng lặp để ra danh sách các huyện thị cần thiết cho tỉnh bạn đã chọn

Với mình thì áp dụng phương thức, FIND() sẽ tăng tốc thêm 1 tẹo nữa.
Như macro sau:
PHP:
Sub NapHuyen()
ReDim Huyen(1 To 68, 1 To 1) As String
Dim Rng As Range, sRng As Range
Dim W As Integer
Dim MyAdd As String
With Sheet8
    Set Rng = .Range(.[G1], .[G1].End(xlDown))
    Set sRng = Rng.Find(Me!cbxTinh.Text, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                                  Huyen(W, 1) = sRng.Offset(, 1).Value
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
End With
Me!cbxHuyen.List = Huyen()
End Sub

Chúc vui !
 

File đính kèm

  • GPE.rar
    735.4 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
Chào anh/ chị
Hiện tại, em có một file quản lý nhân sự bên công ty em. Em có tạo 1 userform dùng để nhập liệu hồ sơ nhân viên nhưng khi nhập liệu gặp phải vấn đề khi nhập liệu địa chỉ hộ khẩu của nhân viên như sau:
- Trên userform dùng để nhập liệu em có dùng combobox để tách riêng tỉnh, huyện, xã để nhập liệu. Khi nhập tên tỉnh thì combobox nhập tên huyện chỉ thể hiện các huyện thuộc tỉnh đó và tương tự đối với combobox tên xã.
- Nhưng em có vấn đề khi nhập tên Tỉnh Hậu Giang thì combobox nhập tên huyện vẫn thể hiện các quận huyện thuộc Tỉnh Hậu Giang nhưng thiếu Huyện Châu Thành.
- Em có kiểm tra dữ liệu tỉnh huyện xã của em lcó thông tin huyện Châu Thành nhưng không biết tại sao không thể hiện trên combobox khi nhập liệu.
Em gởi file đính kèm anh/ chị giúp em nhé
Tôi rút gọn code nạp tỉnh, huyện, xã cho ngắn gọn để dễ nhìn hơn.
 

File đính kèm

  • Employee database.xlsm
    1.3 MB · Đọc: 26
Lần chỉnh sửa cuối:
Upvote 0
Mình có câu hỏi: Sao ta không mã hóa toàn bộ địa danh cả nước theo 1 qui luật nào đó để việc tìm kiếm nhanh hơn & biết đâu đỡ sai sót.
Mình thử ví dụ , các bạn xem có được không nha:

1./ Mã hóa đơn vị HC cấp tỉnh bỡi biển số xe đang dùng, ví như Hà Nội => 29; TF HCM=> 50, Đồng Nai => 60,. . . .
(Tất cả đều 2 kí số nha các bạn; không chơi kiểu 08, lộn xộn lắm. . . . )
2./ Cấp huyện là 2 kí số, như Ba Đình: 2901; Quận 01 sẽ phải là 5001, Xuân Lộc sẽ là 6005,. . . .
3 Cấp xã phường cũng tương tự: Như phường Bến Thành sẽ là 500101; Xã Hố Nai sẽ là 600113,. . . .

Xin ý kiến của chư vị gần xa (!)
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có câu hỏi: Sao ta không mã hóa toàn bộ địa danh cả nước theo 1 qui luật nào đó để việc tìm kiếm nhanh hơn & biết đâu đỡ sai sót.
Mình thử ví dụ , các bạn xem có được không nha:

1./ Mã hóa đơn vị HC cấp tỉnh bỡi biển số xe đang dùng, ví như Hà Nội => 29; TF HCM=> 50, Đồng Nai => 60,. . . .
(Tất cả đều 2 kí số nha các bạn; không chơi kiểu 08, xộn xộn lắm. . . . )
2./ Cấp huyện là 2 kí số, như Ba Đình: 2901; Quận 01 sẽ phải là 5001, Xuân Lộc sẽ là 6005,. . . .
3 Cấp xã phường cũng tương tự: Như phường Bến Thành sẽ là 500101; Xã Hố Nai sẽ là 600113,. . . .

Xin ý kiến của chư vị gần xa (!)
Không biết nhà nước làm ăn kiểu gì mà không có sự thống nhất trong bộ mã tỉnh, huyện, xã, vì vậy mã của từng ngành là khác nhau, ví vụ về mã tỉnh Đồng Nai như sau:
1/ Mã BHXH là 479.
2/ Mã hộ theo hộ khẩu là 759.
3/ Mã theo Giáo dục là 48.
4/ Mã xe là 60.
5/ Thêm một mã ngành Tài nguyên và Môi trường là 379.
Còn một số ngành nữa (chưa tra thử)

Tại sao Nhà nước không lấy con số thứ tự tỉnh thành làm mã tỉnh tính từ bắc xuống Nam (có thể bắt đầu số 01 là Hà Giang, cuối cùng là 63 là Cà Mau) để thống nhất về bộ mã thì việc theo dõi sẽ thuận tiện và tra cứu tàng thư sẽ được dễ dàng hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Không biết nhà nước làm ăn kiểu gì mà không có sự thống nhất trong bộ mã tỉnh, huyện, xã, vì vậy mã của từng ngành là khác nhau, ví vụ về mã tỉnh
Tại sao Nhà nước không lấy con số thứ tự tỉnh thành làm mã tỉnh tính từ bắc xuống Nam (có thể bắt đầu số 01 là Hà Giang, cuối cùng là 63 là Cà Mau) để thống nhất về bộ mã thì việc theo dõi sẽ thuận tiện và tra cứu tàng thư sẽ được dễ dàng hơn.
(1) Tại sao ư?:
Thống nhất về phương diện địa lý là sau 30/04/75
Thống nhất về phương diện chính trị là năm 1976
Thống nhất về mã địa phương: Tết Côngô nha các bạn!
(Mỗi ngành đều cho hệ mã mình luôn đúng & duy nhất tồn tại vĩnh cữu, vua con mà!
Có vua con vì vua cha quá iếu & nhu nhược, thế thôi)

(2) Để dễ xài trong Excel, các con số 00 cho đến 09 không nên xài. Mã tỉnh nên bắt đầu bỡi 2 con số như 10, . . . ,13, . . . . 35, . . . . . . 88, 89,. . . ,99
 
Upvote 0
Không biết nhà nước làm ăn kiểu gì mà không có sự thống nhất trong bộ mã tỉnh, huyện, xã, vì vậy mã của từng ngành là khác nhau, ví vụ về mã tỉnh Đồng Nai như sau:
1/ Mã BHXH là 479.
2/ Mã hộ theo hộ khẩu là 759.
3/ Mã theo Giáo dục là 48.
4/ Mã xe là 60.
5/ Thêm một mã ngành Tài nguyên và Môi trường là 379.
Còn một số ngành nữa (chưa tra thử)

Tại sao Nhà nước không lấy con số thứ tự tỉnh thành làm mã tỉnh tính từ bắc xuống Nam (có thể bắt đầu số 01 là Hà Giang, cuối cùng là 63 là Cà Mau) để thống nhất về bộ mã thì việc theo dõi sẽ thuận tiện và tra cứu tàng thư sẽ được dễ dàng hơn.
Bác cũng từng làm nhà nước mà hỏi câu cũng lạ?
Nhưng hiện đã có mã ZIP CODE của bên bưu chính, chính là mã cho các tỉnh thành rồi (tuy thế không rõ đến từng Quận không, như các nước phát triển thì họ đến từng vùng nhỏ tương đương quận).
Còn dùng Excel, người dùng có áp dụng vào hay là họ thích cá nhân hóa họ thì tùy.

Ah, xem lại thì: bác nói về sự thống nhất, thì đúng là câu hỏi muôn thủa: VN tuy tìm được chuẩn rất khó, nhưng đa dạng, đa bản sắc thì luôn có sẵn ....
 
Lần chỉnh sửa cuối:
Upvote 0
Bác cũng từng làm nhà nước mà hỏi câu cũng lạ?
Nhưng hiện đã có mã ZIP CODE của bên bưu chính, chính là mã cho các tỉnh thành rồi (tuy thế không rõ đến từng Quận không, như các nước phát triển thì họ đến từng vùng nhỏ tương đương quận).
Còn dùng Excel, người dùng có áp dụng vào hay là họ thích cá nhân hóa họ thì tùy.

Ah, xem lại thì: bác nói về sự thống nhất, thì đúng là câu hỏi muôn thủa: VN tuy tìm được chuẩn rất khó, nhưng đa dạng, đa bản sắc thì luôn có sẵn ....
Mấy quan cấp từ Bộ trở lên mới có quyền đề xuất và quyết định ba cái vụ này.
 
Upvote 0
Tôi rút gọn code nạp tỉnh, huyện, xã cho ngắn gọn để dễ nhìn hơn.
Cám ơn anh rất nhiều
Bài đã được tự động gộp:

Không biết nhà nước làm ăn kiểu gì mà không có sự thống nhất trong bộ mã tỉnh, huyện, xã, vì vậy mã của từng ngành là khác nhau, ví vụ về mã tỉnh Đồng Nai như sau:
1/ Mã BHXH là 479.
2/ Mã hộ theo hộ khẩu là 759.
3/ Mã theo Giáo dục là 48.
4/ Mã xe là 60.
5/ Thêm một mã ngành Tài nguyên và Môi trường là 379.
Còn một số ngành nữa (chưa tra thử)

Tại sao Nhà nước không lấy con số thứ tự tỉnh thành làm mã tỉnh tính từ bắc xuống Nam (có thể bắt đầu số 01 là Hà Giang, cuối cùng là 63 là Cà Mau) để thống nhất về bộ mã thì việc theo dõi sẽ thuận tiện và tra cứu tàng thư sẽ được dễ dàng hơn.
Đúng vấn đề em đang gặp phải đó các anh hehe. Báo tăng BHXH khai báo kiểu khác, MST khai báo kiểu khác trong khi đó thông tin cá nhân thì chỉ có 1
 
Upvote 0
Nếu là mình thì để nhập Tỉnh-Huyện-Xã, mình cũng sẽ nhập nhờ 3 ComboBox (gần giống như bạn)
Khác ở chỗ là mỗi ComboBox gồm 2 cột dữ liệu nguồn

Danh sach nguồn cho ComboBox đầu sẽ là

Tên TỉnhMã tỉnh
Thành phố Hải Phòng
16​
Thành phố Hà Nội
29​
Thành phố Đà Nẵng
43​
Thành phố Hồ Chí Minh
50​
Tỉnh Đồng Nai
60​
. . . . ..

Sau khi từ ComboBox này ta chọn 1 dòng nào đó thì ta sẽ đi tìm mã tỉnh của dòng đó trên 1 danh sách khác
Danh sách đó là như vầy:
Tên HuyệnMã Huyện
Quận Hồng Bàng1601
Quận Ngô Quyền1602
Quận Lê Chân1603
Quận Hải An1604
Quận Kiến An1605
Quận Đồ Sơn1606
Quận Dương Kinh1607
Huyện Thuỷ Nguyên1608
Huyện An Dương1609
Huyện An Lão1610
Huyện Kiến Thuỵ1611
Huyện Tiên Lãng1612
Huyện Vĩnh Bảo1613
Huyện Cát Hải1614
Huyện Bạch Long Vĩ1615
Quận Ba Đình2901
Quận Hoàn Kiếm2902
Quận Tây Hồ2903
Quận Long Biên2904
Quận Cầu Giấy2905
Quận Đống Đa2906
Quận Hai Bà Trưng2907
Quận Hoàng Mai2908
. . . .. . . .
Quận Liên Chiểu4301
Quận Thanh Khê4302
Quận Hải Châu4303
Quận Sơn Trà4304
Quận Ngũ Hành Sơn4305
Quận Cẩm Lệ4306
Huyện Hòa Vang4307
Quận 15001
Quận 125002
Quận Thủ Đức5003
Quận 95004

Danh sách này có khoảng hơn 700 dòng thôi

Từ DS hơn 710 dòng đó, ta chọn ra danh sách cỡ không quá 50 dòng (như bạn đã làm)

Cái khác ở đây giữa bạn với mình là lần nào bạn cũng tìm trong vạn dòng dữ liệu nguồn
 
Lần chỉnh sửa cuối:
Upvote 0
1. Xóa các sub cũ: UserForm_Initialize, cbxHuyen_Change, cbxTinh_Change, nap_tinh, nap_huyen, nap_xa.

2. Dan code dưới đây vào module UserForm1.

3. Cách hoạt động.
Trong UserForm_Initialize, cbxHuyen_Change, cbxTinh_Change code sẽ gọi sub nap_tinh_huyen_xa. Chỉ khi gọi nap_tinh_huyen_xa trong UserForm_Initialize thì code mới duyệt toàn bộ dữ liệu từ dòng 2 tới 11165: nạp các tinh vào cbxTinh, và với mỗi tỉnh ghi nhớ chỉ số dòng bắt đầu và chỉ số dòng kết thúc trên sheet của tỉnh. Khi nap_tinh_huyen_xa được gọi trong cbxTinh_Change thì code đọc ra chỉ số bắt đầu và chỉ số kết thúc của tỉnh được chọn, và code chỉ duyệt những dòng này: nạp các huyện vào cbxHuyen, và với mỗi huyện ghi nhớ chỉ số dòng bắt đầu và chỉ số dòng kết thúc trên sheet của huyện. Khi nap_tinh_huyen_xa được gọi trong cbxHuyen_Change thì đọc ra chỉ số bắt đầu và chỉ số kết thúc của huyện được chọn, và code không duyệt những dòng này nữa mà nạp những dòng này từ cột C vào cbxXa.

Các chỉ số dòng bắt đầu và chỉ số dòng kết thúc được ghi ở cột 2 và 3 (2 cột ẩn) của cbxTinh hoặc cbxHuyen.

Ví dụ: chọn "Thành phố Hà Nội" trong cbxTinh thì code chỉ duyệt từ dòng 143 đến dòng 726, tức chỉ 584 dòng, để nạp các huyện từ cột B vào cbxHuyen. Nếu sau đó chọn "Quận Nam Từ Liêm" trong cbxHuyen thì code nạp các dòng từ 683 tới 692, tức chỉ 10 dòng, từ cột C vào cbxXa.

4. yêu cầu: dữ liệu phải được sắp xếp lần lượt theo 3 cột: Tên Tỉnh (level 1), Tên Huyện (level 2) và Tên Xã (level 3).

Mã:
Private Sub UserForm_Initialize()
Dim lastRow As Long
    lastRow = Sheet8.Range("A" & Rows.count).End(xlUp).Row
    If lastRow > 1 Then nap_tinh_huyen_xa cbxTinh, 2, lastRow
End Sub

Private Sub cbxHuyen_Change()
    With cbxHuyen
        If .ListIndex > -1 Then nap_tinh_huyen_xa cbxXa, .List(.ListIndex, 1), .List(.ListIndex, 2)
    End With
End Sub

Private Sub cbxTinh_Change()
    With cbxTinh
        If .ListIndex > -1 Then nap_tinh_huyen_xa cbxHuyen, .List(.ListIndex, 1), .List(.ListIndex, 2)
    End With
End Sub

Sub nap_tinh_huyen_xa(ByVal combo As Object, ByVal data_start As Long, ByVal data_end As Long)
'    combo: cbxTinh, cbxHuyen, cbxXa
'    data_star: chi so dong dau tien can lay tren sheet
'    data_end: chi so dong cuoi cung can lay tren sheet
Dim lastRow As Long, r As Long, count As Long, curr_parent As String, data(), result()
    If combo.Name = "cbxTinh" Then
        data = Sheet8.Range("A" & data_start & ":B" & data_end).Value
        cbxHuyen.Clear
        cbxXa.Clear
    ElseIf combo.Name = "cbxHuyen" Then
        data = Sheet8.Range("B" & data_start & ":C" & data_end).Value
        cbxXa.Clear
    ElseIf combo.Name = "cbxXa" Then
        cbxXa.List = Sheet8.Range("C" & data_start & ":C" & data_end).Value
        cbxXa.ListIndex = 0
        Exit Sub
    Else
        Exit Sub
    End If
    For r = 1 To UBound(data)
        If data(r, 1) <> curr_parent Then
            If curr_parent <> "" Then result(3, count) = r + data_start - 2
            count = count + 1
            ReDim Preserve result(1 To 3, 1 To count)
            curr_parent = data(r, 1)
            result(1, count) = curr_parent
            result(2, count) = r + data_start - 1
        End If
    Next r
    result(3, count) = r + data_start - 2
    With combo
        .Column = result
        .ListIndex = 0
    End With
End Sub
 
Upvote 0
Mình xin giới thiệu đến các bạn quan tâm cách nhập [Nơi sinh] hay [Địa chỉ thường trú], hay tương tự như xã Tân Tiến, Huyện Chương Mỹ, Hà Nội
chỉ là mã địa danh của xã đó (trong toàn quốc) như 291302, . . .
Quá trình nhập liệu nhờ Form cũng gồm 3 ComboBox Tỉnh-Huyện-Xã, nhưng khi bấm lưu thì thay vì lưu 3 cụm từ trong các ComboBox, ta chỉ lưu 6 kí số chỉ giành cho địa danh của xã đó, như:

STTMã NVHọ & TênNgày sinhGiới tínhMã Nơi sinh
0BXT00Bùi Xuân Thắm
2/20/1954​
Nu640104
1DFT00Dương Đức Thành
1/17/1969​
Nam430201
2DTF00Dương Trọng Đức
6/25/1966​
Nam500108
3GPE__GPE.COM
1/17/2007​
500101
4HCQ00Hà Cương Quyết
12/20/1960​
Nam260105
5LTT03Lê Đặng Thu Thủy
8/30/1968​
Nu160603
6LMD00Lê Mỹ Dung
3/13/1988​
Nu292420
7LLT00Lê Thị Thơm
4/24/1982​
Nu160607
8NVM00Nguyễn Văn Minh
7/13/1960​
Nam430202
9TNN00Tô Nhàn Nhã
7/28/1994​
Nam502301
10THN00Trần Hoàng Ngãi
5/17/1990​
Nam670602
11TMH00Trần Minh Hồng
9/14/1969​
Nu110204
12TLP00Trịnh Lương Phòng
11/19/1967​
Nam290405

Khi cần hiện đúng địa danh trong các trang báo cáo ta lại tra trong danh mục ra ví dụ:

III
DANH SÁCH SINH NHẬT QUÝ III.
TTHọ & TênNgày sinhFái tìnhNoi sinhGhi chú
1LTT03Lê Đặng Thu Thủy30/08/68NuPhường Vạn Hương, Quận Đồ Sơn, Thành phố Hải Phòng.
2NVM00Nguyễn Văn Minh13/07/60NamPhường Thanh Khê Đông, Quận Thanh Khê, Thành phố Đà Nẵng.
3TNN00Tô Nhàn Nhã28/07/94NamXã Long Thới, Huyện Nhà Bè, Thành phố Hồ Chí Minh.
4TMH00Trần Minh Hồng14/09/69NuXã Mông Ân, Huyện Bảo Lâm, Tỉnh Cao Bằng.

Mời các bạn xem theo file:
 

File đính kèm

  • Mã.rar
    355 KB · Đọc: 28
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom