Sửa code VBA nhập liệu userform (2 người xem)

  • Thread starter Thread starter antudo
  • Ngày gửi Ngày gửi

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

Tôi tuân thủ nội quy khi đăng bài

antudo

Thành viên mới
Tham gia
22/1/18
Bài viết
10
Được thích
2
Giới tính
Nam
Dạ Chào Anh chị,
Em đang gặp lỗi code thêm hình ảnh và ngày tháng đảo lộn trong file nhập liệu nhân sự bằng userform
Nhờ anh chị hỗ trợ sửa giúp em với ạ
Em cám ơn ạ,
 

File đính kèm

Dạ Chào Anh chị,
Em đang gặp lỗi code thêm hình ảnh và ngày tháng đảo lộn trong file nhập liệu nhân sự bằng userform
Nhờ anh chị hỗ trợ sửa giúp em với ạ
Em cám ơn ạ,
Để nguyên câu hỏi này, nếu không mô tả thêm cụ thể như thế nào thì chẳng hiểu gì để giúp.
 
Upvote 0
Để nguyên câu hỏi này, nếu không mô tả thêm cụ thể như thế nào thì chẳng hiểu gì để giúp.
Vâng, sorry ạ
Em xin miêu tả kỹ hơn về 2 lỗi, như sau:
1- Lỗi 1: Thêm hình ảnh
Private Sub CMDADDPHOTO_Click()
Dim x As Integer
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
x = Application.FileDialog(msoFileDialogOpen).Show
If x <> 0 Then
FPATH = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Image1.Picture = LoadPicture(FPATH)
Image1.PictureSizeMode = 1
End If
End Sub
2- Lỗi định dạng ngày/tháng/năm
Ví dụ:
- Với ngày 19/5/2025 thì sẽ không bị lỗi ở cả userform và excel
- Nhưng với ngày 3/5/2025 thì userform không lỗi, lỗi hiển thị ở excel (ngược sang tháng/ngày/năm)
Chi tiết Anh chị xem giúp code nhé ạ
Tks,
 
Upvote 0
Đầu tiên mình muốn lưu ý với bạn là vấn đề thiết kế CSDL;
1./ Mã số nhân viên
Hiện bạn đang xài dẫy số vô tri giác;
Nếu là mình thì xài bộ mã sau:

1760778873147.png

2./ Cũng trang CSDL này cần tách ra thành chí ít là 3 trang tính;
Trang đầu là những gì bất biến trong đời người sẽ lao động ở cơ quan bạn;
Ví du [Mã NV], [HoTen], [Ngày sinh], [Giới tính], [Địa chỉ], [SĐT],. . . .
Trang thứ 2 sẽ là
[Mã NV], [Ngày], Loại HĐLĐ], [Ghi chú]
Trang thứ 3 sẽ là về BHXH:
[Mã NV], [Số sổ BHXH], [Hôn nhân], [QH], [Họ tên người QH], [Ghi chú]
Hai trang này ghi dữ liệu theo chiều dọc; Không phải chiều ngang như bạn đang làm;

. . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Em đang gặp lỗi code thêm hình ảnh và ngày tháng đảo lộn trong file nhập liệu nhân sự bằng userform
1. Thêm hình ảnh: Userform chỉ chấp nhận file ảnh với định dạng: jpg, bmp, svg. Do đó nếu bạn chọn khác định dạng (png) sẽ báo lỗi. Để giới hạn chỉ chọn file đúng định dạng thì bạn phải thiết lập thuộc tính Filter (chỉ hiển thị file jpg, bmp) trong hộp thoại chọn file để người dùng dễ lựa chọn.
2. Ngày tháng: Theo tôi biết VBA xử lý ngày tháng theo dạng mm/dd/yyyy. Do đó bạn phải xử lý ngay ở Textbox nhập liệu.
- Textbox ngày phải nhập dạng: dd/mm/yyyy. 2 ký tự ngày, 2 ký tự cho tháng và 4 ký tự cho năm. Bạn phải bẫy lỗi nhập liệu này để người dùng nhập cho đúng định dạng.
- Code chuyển đổi ngày như bên dưới.

Screenshot at Oct 18 18-48-36.png

3. Form còn nhiều lỗi nhập liệu:
- Khi mở form, bấm thêm mới sẽ thêm liên tục mặc dù không có dữ liệu.
- Sau khi nhập msnv, bấm Search sẽ nạp dữ liệu lên UF. Bấm cập nhật nó sẽ tạo thêm dòng mới giống như vậy --> lỗi trùng dữ liệu.
- Nói chung khi mở UF lên, bấm lung tung các nút lệnh sẽ thấy lỗi tùm lum.
- Form cập nhật dữ liệu lâu mặc dùng không có nhiều trường dữ liệu.
- Form nên thiết kế tách thông tin thành các tab (TabStrip) để dễ nhìn vào nhập liệu. VD: thông tin người phụ thuộc tách ra 1 tab khác.
- Nên dùng vòng lặp duyệt qua các control (textbox, comboBox...) để cập nhật giá trị từ Userform xuống sheet và ngược lại để code ngắn gọn hơn và cũng dễ điều chỉnh. (Thay vì gán từng textbox xuống từng cell như hiện tại).

Tham khảo:

Screenshot 2025-10-18 at 16.56.28.png

Screenshot 2025-10-18 at 16.56.38.png
 
Lần chỉnh sửa cuối:
Upvote 0
1. Thêm hình ảnh: Userform chỉ chấp nhận file ảnh với định dạng: jpg, bmp, svg. Do đó nếu bạn chọn khác định dạng (png) sẽ báo lỗi. Để giới hạn chỉ chọn file đúng định dạng thì bạn phải thiết lập thuộc tính Filter (chỉ hiển thị file jpg, bmp) trong hộp thoại chọn file để người dùng dễ lựa chọn.
2. Ngày tháng: Theo tôi biết VBA xử lý ngày tháng theo dạng mm/dd/yyyy. Do đó bạn phải xử lý ngay ở Textbox nhập liệu.
- Textbox ngày phải nhập dạng: dd/mm/yyyy. 2 ký tự ngày, 2 ký tự cho tháng và 4 ký tự cho năm. Bạn phải bẫy lỗi nhập liệu này để người dùng nhập cho đúng định dạng.
- Code chuyển đổi ngày như bên dưới.

View attachment 310073

3. Form còn nhiều lỗi nhập liệu:
- Khi mở form, bấm thêm mới sẽ thêm liên tục mặc dù không có dữ liệu.
- Sau khi nhập msnv, bấm Search sẽ nạp dữ liệu lên UF. Bấm cập nhật nó sẽ tạo thêm dòng mới giống như vậy --> lỗi trùng dữ liệu.
- Nói chung khi mở UF lên, bấm lung tung các nút lệnh sẽ thấy lỗi tùm lum.
- Form cập nhật dữ liệu lâu mặc dùng không có nhiều trường dữ liệu.
- Form nên thiết kế tách thông tin thành các tab (TabStrip) để dễ nhìn vào nhập liệu. VD: thông tin người phụ thuộc tách ra 1 tab khác.
- Nên dùng vòng lặp duyệt qua các control (textbox, comboBox...) để cập nhật giá trị từ Userform xuống sheet và ngược lại để code ngắn gọn hơn và cũng dễ điều chỉnh. (Thay vì gán từng textbox xuống từng cell như hiện tại).

Tham khảo:

View attachment 310074

View attachment 310075
Vâng, mình mới đang học VBA, còn gà mờ
Mình thấy cái tab mà bạn nói hay quá, trông thoáng đãng, dễ nhìn. Mà mình chưa biết cách làm
Cám ơn bạn nhiều ạ!
Bài đã được tự động gộp:

Đầu tiên mình muốn lưu ý với bạn là vấn đề thiết kế CSDL;
1./ Mã số nhân viên
Hiện bạn đang xài dẫy số vô tri giác;
Nếu là mình thì xài bộ mã sau:

View attachment 310072

2./ Cũng trang CSDL này cần tách ra thành chí ít là 3 trang tính;
Trang đầu là những gì bất biến trong đời người sẽ lao động ở cơ quan bạn;
Ví du [Mã NV], [HoTen], [Ngày sinh], [Giới tính], [Địa chỉ], [SĐT],. . . .
Trang thứ 2 sẽ là
[Mã NV], [Ngày], Loại HĐLĐ], [Ghi chú]
Trang thứ 3 sẽ là về BHXH:
[Mã NV], [Số sổ BHXH], [Hôn nhân], [QH], [Họ tên người QH], [Ghi chú]
Hai trang này ghi dữ liệu theo chiều dọc; Không phải chiều ngang như bạn đang làm;

. . . .
Vâng ạ, việc phân loại trường dữ liệu ra cũng giúp dễ nhìn, dễ nhập liệu và dễ quản lý hơn
Cám ơn Anh nhiều về góp ý liên quan đến CSDL nhé ạ
Tks,
 
Upvote 0
Nếu là mình thì sẽ theo đường hướng được phát thảo theo file!
:D :D
 
Upvote 0
Bạn xem thêm file mới & tiếp tục sửa chữa các Controls sao chúng tường minh hơn phần tên gọi
Các bước thao tác trong file:
→ Bên phải nút lệnh tìm kiếm có TextBox 'tbMa3'
Bạn thử nhập 3 ký tự của mã của bất kỳ nhân vật nào có trong danh sách & nhấn vô nút lệnh
Trên listBox sẽ hiện danh sách cô gọn những người có 3 ký tự trùng với Control 'tbMa3'
→ Nếu lấy chuột bấm vô dòng có dữ liệu của ListBox thì các TextBox bên trên sẽ nhận dữ liệu tương ứng mà ta đã bấm chọn;
Thêm chú ý:
Cần xử lý khi trong danh sách không có 1 dòng nào trùng với 'tbMa3'; Chuyện này chắc phải là bạn thực hiện rồi!

[Thêm ghi chú: Hơn 3 giờ nữa mình sẽ tháo file bài trên liền kề của mình, tiết kiệm tài nguyên!]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn xem thêm file mới & tiếp tục sửa chữa các Controls sao chúng tường minh hơn phần tên gọi
- Gõ chữ thường và nhấn tìm kiếm nó trơ trơ. Hay là thêm cái Ucase?
- Phải gõ đủ 3 ký tự. Có thể muốn gõ bao nhiêu tùy ý không?
- Phải nhấn nút tìm kiếm. Có thể gõ đến đâu tìm đến đó mà không cần nhấn nút không?
- Lê Bé có 2 từ nhưng mã buộc phải 3 ký tự thành ra LJB, chữ J thay cho cái gì, người dùng có thể nhớ chăng? Ngoài J ra còn gì khác phải nhớ nữa? Hay là tìm theo tên cho dễ (tên thì có khi đã thuộc lòng rồi)
- Textbox STT bị cứng con số 11. Msgbox thì lấy số TT của List sau khi thu gọn. Vậy nếu sửa thông tin và cập nhật xuống sheet thì cập nhật vào dòng 11 hay dòng Msgbox?
 
Upvote 0
[Copilot & Hợp đồng lao động]

Bạn đang đi đúng hướng rồi đó! Việc hiểu Dictionary sẽ giúp bạn xử lý dữ liệu hiệu quả hơn sau này, nhưng nếu chưa quen thì mình có thể hướng dẫn bạn cách nhập mới, sửa, xóa hợp đồng lao động theo cách đơn giản hơn — không cần dùng Dictionary ngay đâu

Cách xử lý dữ liệu HĐLĐ: Nhập mới, sửa, xóa​

Giả sử bạn có một sheet tên là HDLD với các cột:
A: STT
B: MaNV
C: NgayHD
D: LoaiHD
E: GhiChu

Trên UserForm, bạn có thể có:
  • Các ô nhập liệu: txtMaNV, dtpNgayHD, cmbLoaiHD, txtGhiChu
  • Một ListBox tên lstHDLD để hiển thị danh sách hợp đồng
  • Các nút: cmdThem, cmdSua, cmdXoa

✅ 1. Nhập mới hợp đồng​

PHP:
Private Sub cmdThem_Click()
    Dim ws As Worksheet
    Dim nextRow As Long 
    Set ws = ThisWorkbook.Sheets("HDLD")
    nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
   ws.Cells(nextRow, "A").Value = nextRow - 1 ' STT
    ws.Cells(nextRow, "B").Value = txtMaNV.Value
    ws.Cells(nextRow, "C").Value = dtpNgayHD.Value
    ws.Cells(nextRow, "D").Value = cmbLoaiHD.Value
    ws.Cells(nextRow, "E").Value = txtGhiChu.Value
   MsgBox "Đã thêm hợp đồng mới!"
    Call LoadDanhSachHDLD
End Sub

✏️ 2. Sửa hợp đồng đã chọn
Mã:
[/HEADING]
Private Sub cmdSua_Click()
 Dim ws As Worksheet\
 Dim selectedRow As Long
If lstHDLD.ListIndex = -1 Then
  MsgBox "Bạn chưa chọn dòng để sửa!"
  Exit Sub
End If
Set ws = ThisWorkbook.Sheets("HDLD")
selectedRow = lstHDLD.List(lstHDLD.ListIndex, 0) + 1 ' STT + 1 vì dòng bắt đầu từ 2
ws.Cells(selectedRow + 1, "B").Value = txtMaNV.Value
ws.Cells(selectedRow + 1, "C").Value = dtpNgayHD.Value
ws.Cells(selectedRow + 1, "D").Value = cmbLoaiHD.Value
ws.Cells(selectedRow + 1, "E").Value = txtGhiChu.Value
MsgBox "Đã sửa hợp đồng!"
    Call LoadDanhSachHDLD
End Sub

️ 3. Xóa hợp đồng đã chọn​

PHP:
Private Sub cmdXoa_Click()
    Dim ws As Worksheet
    Dim selectedRow As Long
   If lstHDLD.ListIndex = -1 Then
       MsgBox "Bạn chưa chọn dòng để xóa!"
       Exit Sub
    End If
    Set ws = ThisWorkbook.Sheets("HDLD")
    selectedRow = lstHDLD.List(lstHDLD.ListIndex, 0) + 1    ws.Rows(selectedRow + 1).Delete
   MsgBox "Đã xóa hợp đồng!"
   Call LoadDanhSachHDLD
End Sub

Hàm nạp lại danh sách vào ListBox​

Mã:
Sub LoadDanhSachHDLD()
    Dim ws As Worksheet
    Dim i As Long, lastRow As Long
   Set ws = ThisWorkbook.Sheets("HDLD")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lstHDLD.Clear
    lstHDLD.ColumnCount = 5
   lstHDLD.ColumnWidths = "40;80;100;100;150" 
    For i = 2 To lastRow
        lstHDLD.AddItem ws.Cells(i, "A").Value
        lstHDLD.List(lstHDLD.ListCount - 1, 1) = ws.Cells(i, "B").Value
        lstHDLD.List(lstHDLD.ListCount - 1, 2) = Format(ws.Cells(i, "C").Value, "dd/mm/yyyy")
        lstHDLD.List(lstHDLD.ListCount - 1, 3) = ws.Cells(i, "D").Value
        lstHDLD.List(lstHDLD.ListCount - 1, 4) = ws.Cells(i, "E").Value
    Next i
End Sub



Bạn có thể thử từng phần một, rồi mình sẽ giúp bạn gắn kết lại thành một hệ thống hoàn chỉnh. Nếu bạn muốn mình tạo sơ đồ luồng xử lý hoặc gợi ý cách tổ chức form đẹp hơn, mình làm ngay nhé!​
 
Upvote 0
[Copilot & Hợp đồng lao động]

Bạn đang đi đúng hướng rồi đó! Việc hiểu Dictionary sẽ giúp bạn xử lý dữ liệu hiệu quả hơn sau này, nhưng nếu chưa quen thì mình có thể hướng dẫn bạn cách nhập mới, sửa, xóa hợp đồng lao động theo cách đơn giản hơn — không cần dùng Dictionary ngay đâu

Cách xử lý dữ liệu HĐLĐ: Nhập mới, sửa, xóa​

Giả sử bạn có một sheet tên là HDLD với các cột:
A: STT
B: MaNV
C: NgayHD
D: LoaiHD
E: GhiChu

Trên UserForm, bạn có thể có:
  • Các ô nhập liệu: txtMaNV, dtpNgayHD, cmbLoaiHD, txtGhiChu
  • Một ListBox tên lstHDLD để hiển thị danh sách hợp đồng
  • Các nút: cmdThem, cmdSua, cmdXoa

✅ 1. Nhập mới hợp đồng​

PHP:
Private Sub cmdThem_Click()
    Dim ws As Worksheet
    Dim nextRow As Long
    Set ws = ThisWorkbook.Sheets("HDLD")
    nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
   ws.Cells(nextRow, "A").Value = nextRow - 1 ' STT
    ws.Cells(nextRow, "B").Value = txtMaNV.Value
    ws.Cells(nextRow, "C").Value = dtpNgayHD.Value
    ws.Cells(nextRow, "D").Value = cmbLoaiHD.Value
    ws.Cells(nextRow, "E").Value = txtGhiChu.Value
   MsgBox "Đã thêm hợp đồng mới!"
    Call LoadDanhSachHDLD
End Sub

✏️ 2. Sửa hợp đồng đã chọn​

Mã:
[/HEADING][/HEADING]
[HEADING=2]Private Sub cmdSua_Click()[/HEADING]
[HEADING=2]Dim ws As Worksheet\[/HEADING]
[HEADING=2]Dim selectedRow As Long[/HEADING]
[HEADING=2]If lstHDLD.ListIndex = -1 Then[/HEADING]
[HEADING=2]  MsgBox "Bạn chưa chọn dòng để sửa!"[/HEADING]
[HEADING=2]  Exit Sub[/HEADING]
[HEADING=2]End If[/HEADING]
[HEADING=2]Set ws = ThisWorkbook.Sheets("HDLD")[/HEADING]
[HEADING=2]selectedRow = lstHDLD.List(lstHDLD.ListIndex, 0) + 1 ' STT + 1 vì dòng bắt đầu từ 2[/HEADING]
[HEADING=2]ws.Cells(selectedRow + 1, "B").Value = txtMaNV.Value[/HEADING]
[HEADING=2]ws.Cells(selectedRow + 1, "C").Value = dtpNgayHD.Value[/HEADING]
[HEADING=2]ws.Cells(selectedRow + 1, "D").Value = cmbLoaiHD.Value[/HEADING]
[HEADING=2]ws.Cells(selectedRow + 1, "E").Value = txtGhiChu.Value[/HEADING]
[HEADING=2]MsgBox "Đã sửa hợp đồng!"[/HEADING]
[HEADING=2]    Call LoadDanhSachHDLD[/HEADING]
[HEADING=2]End Sub

️ 3. Xóa hợp đồng đã chọn​

PHP:
Private Sub cmdXoa_Click()[/HEADING]
[HEADING=2]    Dim ws As Worksheet[/HEADING]
[HEADING=2]    Dim selectedRow As Long[/HEADING]
[HEADING=2]   If lstHDLD.ListIndex = -1 Then[/HEADING]
[HEADING=2]       MsgBox "Bạn chưa chọn dòng để xóa!"[/HEADING]
[HEADING=2]       Exit Sub[/HEADING]
[HEADING=2]    End If[/HEADING]
[HEADING=2]    Set ws = ThisWorkbook.Sheets("HDLD")[/HEADING]
[HEADING=2]    selectedRow = lstHDLD.List(lstHDLD.ListIndex, 0) + 1    ws.Rows(selectedRow + 1).Delete[/HEADING]
[HEADING=2]   MsgBox "Đã xóa hợp đồng!"[/HEADING]
[HEADING=2]   Call LoadDanhSachHDLD[/HEADING]
[HEADING=2]End Sub

Hàm nạp lại danh sách vào ListBox​

Mã:
Sub LoadDanhSachHDLD()[/HEADING]
[HEADING=2]    Dim ws As Worksheet[/HEADING]
[HEADING=2]    Dim i As Long, lastRow As Long[/HEADING]
[HEADING=2]   Set ws = ThisWorkbook.Sheets("HDLD")[/HEADING]
[HEADING=2]    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row[/HEADING]
[HEADING=2]    lstHDLD.Clear[/HEADING]
[HEADING=2]    lstHDLD.ColumnCount = 5[/HEADING]
[HEADING=2]   lstHDLD.ColumnWidths = "40;80;100;100;150"[/HEADING]
[HEADING=2]    For i = 2 To lastRow[/HEADING]
[HEADING=2]        lstHDLD.AddItem ws.Cells(i, "A").Value[/HEADING]
[HEADING=2]        lstHDLD.List(lstHDLD.ListCount - 1, 1) = ws.Cells(i, "B").Value[/HEADING]
[HEADING=2]        lstHDLD.List(lstHDLD.ListCount - 1, 2) = Format(ws.Cells(i, "C").Value, "dd/mm/yyyy")[/HEADING]
[HEADING=2]        lstHDLD.List(lstHDLD.ListCount - 1, 3) = ws.Cells(i, "D").Value[/HEADING]
[HEADING=2]        lstHDLD.List(lstHDLD.ListCount - 1, 4) = ws.Cells(i, "E").Value[/HEADING]
[HEADING=2]    Next i[/HEADING]
[HEADING=2]End Sub


Bạn có thể thử từng phần một, rồi mình sẽ giúp bạn gắn kết lại thành một hệ thống hoàn chỉnh. Nếu bạn muốn mình tạo sơ đồ luồng xử lý hoặc gợi ý cách tổ chức form đẹp hơn, mình làm ngay nhé!​

Vâng, bác hoàn thiện file giúp em với ạ để em được mở mang tầm mắt và học hỏi từ từng đoạn code đó. Em cảm ơn ạ
 
Upvote 0
Vâng, bác hoàn thiện file giúp em với ạ để em được mở mang tầm mắt và học hỏi từ từng đoạn code đó. Em cảm ơn ạ
Bạn không để ý ở đoạn trên, Bác ấy copy lời của AI Copilot. Chứ có phải bác ấy làm đâu.
 
Upvote 0
Bạn phải tổ chức lại bảng dữ liệu, tôi nhìn sơ qua thì thấy bạn phải tách thành 3 bảng mới hợp lý và dễ truy vấn dữ liệu. Nói chung thì việc Thêm xoá sửa sẽ dễ hơn.
 
Upvote 0
Copilot & Hợp đồng lao động
Không đơn giản thế. Khi đã có mục tìm kiếm thì danh sách sẽ rút gọn lại. Thứ tự trên list không còn là thứ tự trên sheet nữa. Tìm kiếm với danh sách ngắn dần là biện pháp chủ yếu để sửa xóa khi list có sẵn rất dài.
Tất cả các code trên không dành cho việc xóa sửa sau khi tìm kiếm, chỉ có thể thêm mới.
 
Upvote 0
Bác có xài qua DeepSeek chưa? Em thấy DSeek nó trả lời và đưa code mẫu nhiều trường hợp, từ code cơ bản đến code nâng cao cho 1 vấn đề mình hỏi.
Cái AI nào cũng vậy, phải biết cách hỏi, mà muốn hỏi phải biết rõ vấn đề.
Chẳng hạn hỏi CoPilot:
q02.png

Và nó gợi ý code sau:

q03.png

Người hiểu biết lập trình chỉ cần như vậy là có thể khai triển thành code hoàn chỉnh theo ý mình.

Ghi chú:
Trong tài liệu tôi viết thì dùng cách khác: Lưu thứ tự dòng ngay trong cột đầu tiên của listbox, dù lọc ngắn lại thì chỉ tra cứu cột 0 là ra thứ tự dòng trên sheet. Việc ẩn cột 0 thì quá đơn giản.
 
Upvote 0
Vâng, bác hoàn thiện file giúp em với ạ để em được mở mang tầm mắt và học hỏi từ từng đoạn code đó. Em cảm ơn ạ
Mình cho rằng cần lưu ý mạnh mẽ hơn đến bạn chưa phải là Code như thế nào mà thiết kế lại CSDL;
Ngay trong file của bạn (Ở #1) cũng chưa chú tâm đến dữ liệu
→ Chỉ có 1 mống & chưa đầy đủ nữa, đến tệ
Chí ít CQ (cơ quan) của bạn ~100 thì cần chí ít mươi người;
Chí ít CQ có 7 đơn vị thì mươi người đó rãi đều khắp ở 7 đơn vị;
Chí ít có 2 loại hợp đồng dài hạn & ngắn hạn (từ 1 đến 3 năm) thì cần 4 loại hợp đồng tương ứng được rãi khắp
→ Một số người thường người ta lập các danh mục, như danh mục các đơn vị/bộ phận
Danh mục các loại hợp đồng lao động, danh mục các trình độ học thức hay chuyên môn/bậc thợ,. . .
Các danh mục này chí ít có 2 trường; đó là [Mã danh mục] & [Tên danh mục]
Trên trang dữ liệu các cột sẽ không thể hiện tên danh mục mà là mã danh mục;

& cuối cùng đó là nếu bạn không thiết kế lại CSDL thì ai đó giúp bạn trên nền tảng file #1 là vô tính hay hữu ý hại bạn mà thôi!
 
Upvote 0
Thấy bài cũng xôm tụ nên tôi cũng góp 1 file demo cho chủ thớt. Chỉ làm mẫu nhập liệu cơ bảng chừng 10 trường (cột) của bảng thôi. Chủ yếu là chức năng:
- Tìm kiếm trong listbox
- Lưu, Thêm, Xoá dữ liệu dùng cách lặp qua các control trên userform để lấy dữ liệu lên form hoặc ghi xuống sheet. Chịu khó thêm các tham số trong thuộc tính Tag của control.
Form chưa bẫy lỗi gì nhiều nên sẽ có phát sinh các hoạt động không như ý muốn. Chủ yếu tham khảo cái qui trình nhập liệu (tôi hay làm theo kiểu này).
- Tôi có tách cái bảng của chủ thớt thành 3 bảng con để CSDL cho nó chuẩn hoá.
- Thuộc tính Tag: "2_req": Tôi qui ước số 2 là cột lưu trường [Họ tên], "req" là bắt buộc phải nhập liệu, từ khoá này dùng trong hàm kiểm tra tính hợp lệ của dữ liệu nhập trước khi [Lưu].

Screenshot at Oct 23 22-43-31.png
Screenshot at Oct 23 22-50-39.png


 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nói vui chút: Cách đây 8 năm khi tạo mục giới tính tôi đã cho tùy chọn 1 trong 3: Nam, Nữ, Khác
Gần đây nhà nước đã công nhận giới tính khác rồi.

1761274096991.png
 
Upvote 0
Mình cho rằng cần lưu ý mạnh mẽ hơn đến bạn chưa phải là Code như thế nào mà thiết kế lại CSDL;
Ngay trong file của bạn (Ở #1) cũng chưa chú tâm đến dữ liệu
→ Chỉ có 1 mống & chưa đầy đủ nữa, đến tệ
Chí ít CQ (cơ quan) của bạn ~100 thì cần chí ít mươi người;
Chí ít CQ có 7 đơn vị thì mươi người đó rãi đều khắp ở 7 đơn vị;
Chí ít có 2 loại hợp đồng dài hạn & ngắn hạn (từ 1 đến 3 năm) thì cần 4 loại hợp đồng tương ứng được rãi khắp
→ Một số người thường người ta lập các danh mục, như danh mục các đơn vị/bộ phận
Danh mục các loại hợp đồng lao động, danh mục các trình độ học thức hay chuyên môn/bậc thợ,. . .
Các danh mục này chí ít có 2 trường; đó là [Mã danh mục] & [Tên danh mục]
Trên trang dữ liệu các cột sẽ không thể hiện tên danh mục mà là mã danh mục;

& cuối cùng đó là nếu bạn không thiết kế lại CSDL thì ai đó giúp bạn trên nền tảng file #1 là vô tính hay hữu ý hại bạn mà thôi!
Vâng bác, đúng là thiếu sót rồi. Em xin phép gửi lại bản này, đầy đủ hơn chút so với bản #1 ạ
Bài đã được tự động gộp:

Thấy bài cũng xôm tụ nên tôi cũng góp 1 file demo cho chủ thớt. Chỉ làm mẫu nhập liệu cơ bảng chừng 10 trường (cột) của bảng thôi. Chủ yếu là chức năng:
- Tìm kiếm trong listbox
- Lưu, Thêm, Xoá dữ liệu dùng cách lặp qua các control trên userform để lấy dữ liệu lên form hoặc ghi xuống sheet. Chịu khó thêm các tham số trong thuộc tính Tag của control.
Form chưa bẫy lỗi gì nhiều nên sẽ có phát sinh các hoạt động không như ý muốn. Chủ yếu tham khảo cái qui trình nhập liệu (tôi hay làm theo kiểu này).
- Tôi có tách cái bảng của chủ thớt thành 3 bảng con để CSDL cho nó chuẩn hoá.
- Thuộc tính Tag: "2_req": Tôi qui ước số 2 là cột lưu trường [Họ tên], "req" là bắt buộc phải nhập liệu, từ khoá này dùng trong hàm kiểm tra tính hợp lệ của dữ liệu nhập trước khi [Lưu].

View attachment 310128
View attachment 310129


Hay quá ạ, bác cho em xin contact, e hỏi kỹ hơn đc k?
 
Upvote 0
File mới nó fì đại đến cỡ nào mà bạn phải gởi lên đâu đó xa xăm làm vậy;
Ý mình là sao không gởi trực tiếp lên diễn đàn?
& trên diễn đàn này lâu nay mình thấy càng ngày càng hiếm những người 'cầm tay chỉ việc ' lắm
Có nghĩa là bạn phải tự vận động theo gợi ý của những người hướng dẫn
Những người hướng dẫn sẽ biết rằng bạn có chủ động thực hiện file của mình hay cứ chờ người khác làm thay phần nhiều!
 
Upvote 0

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

Back
Top Bottom