Viết nút NEXT, BACK và PRINT trong thẻ nhân sự mình làm dang dỡ (3 người xem)

Liên hệ QC

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

quannguyen1984

Thành viên mới
Tham gia
12/2/11
Bài viết
38
Được thích
0
Giúp mình cho nút Print cái form đó ra và khi chọn OptionButton nào thì những người thuộc chức danh đó sẽ hiện ra trong Combobox đó được không? Còn nút Next và back là xem trước và sau số người hiện trong Combobox đó. Xin cảm ơn
 
Lần chỉnh sửa cuối:
Nói bạn có thể buồn, chứ CSDL của bạn chưa ra làm sao cả

Mà cứ bắt tay vô tạo nút này, viết nút nọ kia chỉ tổ cực nhọc sau này thôi;

Những vấn đề bạn cần quan tâm sửa đổi hay bổ sung như sau:

(1) Tối cần thiết, đó là mã nhân viên

(2) Mã đơn vị hay bộ fận trong CQ, theo kiều
A: BGĐ
B: TCHC
C: TVụ
. . .

Bảng này là fụ trợ để làm rõ cột mã ĐVị trong CSDL chính
Những bảng này có thể sẽ nhiều, như [Trình độ học vấn], [Đảng/đoàn], thậm chí quá trình lương, trang quản lí thân nhân gia đình như
Mã:
[MãNV], [Mối QH],[ Họ Tên]; [Năm sinh]
 NVH00, Mẹ  ,   Ngô T. Tô; 1950

Vài lời cùng bạn & bạn nên cho biết qui mô nhân sự CQ bạn cỡ nào?
 
Upvote 0
Giúp mình cho nút Print cái form đó ra và khi chọn OptionButton nào thì những người thuộc chức danh đó sẽ hiện ra trong Combobox đó được không? Còn nút Next và back là xem trước và sau số người hiện trong Combobox đó. Xin cảm ơn
 
Upvote 0
Bạn tạm tham khảo cái file đơn giản này trước đi nha
 

File đính kèm

Upvote 0
Bạn ơi, mình làm như bạn thì in ok rồi. Nhưng cái form này in dọc thì nó không hết được dữ liệu, có cách nào mình mặc định in trang ngang cho nút Print luôn được không?
Yêu cầu các nút Next, Back cũng không khó, mình thấy bạn viết code combobox được thì các nút đó chỉ cần làm 1 số việc, ví dụ nút Next:
- Kiểm tra xem đã ở cuối danh sách chưa
if combobox1.listindex=combobox1.listcount-1 then
(lệnh này có thể đặt trong combobox1_change để khi ở cuối thì property Enabled của nút Next =False để vô hiệu hóa nút Next).
- Tăng property listindex của combobox1 thêm 1 để chọn người tiếp.
Đối với option button thì bạn phải load từng nhân viên vào bằng cách kiểm tra công việc rồi dùng combobox1.additem
Trường hợp với nút print mình chưa thử nhưng nếu dùng thenhansu.printform thì chương trình có thể in ra cả những phần thừa, mục đích chỉ cần in frame1 nên cần dùng lệnh chỉnh kích cỡ form vừa với frame rồi mới in. Do printform không chỉnh được hướng in landscape nên theo MS thì cần giả lập Alt-Printscreen để copy vào sheet tạm rồi in sheet này; việc này làm được bằng API nhưng cách dễ hơn là bạn làm 1 sheet có mẫu như frame1 rồi copy các thông tin từ form vào sheet này để in.
 
Upvote 0
Yêu cầu các nút Next, Back cũng không khó, mình thấy bạn viết code combobox được thì các nút đó chỉ cần làm 1 số việc, ví dụ nút Next:
- Kiểm tra xem đã ở cuối danh sách chưa
if combobox1.listindex=combobox1.listcount-1 then
(lệnh này có thể đặt trong combobox1_change để khi ở cuối thì property Enabled của nút Next =False để vô hiệu hóa nút Next).
- Tăng property listindex của combobox1 thêm 1 để chọn người tiếp.
Đối với option button thì bạn phải load từng nhân viên vào bằng cách kiểm tra công việc rồi dùng combobox1.additem
Trường hợp với nút print mình chưa thử nhưng nếu dùng thenhansu.printform thì chương trình có thể in ra cả những phần thừa, mục đích chỉ cần in frame1 nên cần dùng lệnh chỉnh kích cỡ form vừa với frame rồi mới in. Do printform không chỉnh được hướng in landscape nên theo MS thì cần giả lập Alt-Printscreen để copy vào sheet tạm rồi in sheet này; việc này làm được bằng API nhưng cách dễ hơn là bạn làm 1 sheet có mẫu như frame1 rồi copy các thông tin từ form vào sheet này để in.

Một số lệnh trong VBA như bạn nói mình thật sự không hiểu và biết làm lắm, mong được bạn giành ít thời gian giúp đỡ bắng cách làm vào file "The nhan su" gửi lại giúp mình được không? Xin cảm ơn bạn nhiều.
 
Upvote 0
Một số lệnh trong VBA như bạn nói mình thật sự không hiểu và biết làm lắm, mong được bạn giành ít thời gian giúp đỡ bắng cách làm vào file "The nhan su" gửi lại giúp mình được không? Xin cảm ơn bạn nhiều.
Mình chỉ bổ sung thêm code nút lệnh next, back và option button. Nút print chưa được. Bạn xóa code trong form đi, thay bằng code này:
Mã:
Private Sub ComboBox1_Click()
On Error Resume Next
Dim rw As Long, cl As Range
rw = WorksheetFunction.Match(Me.ComboBox1.Value, Worksheets("BANGTONGHOP").Range("D:D"), 0)
If Err.Number Then MsgBox "Không coì CB-CNV câÌn tiÌm!!!"
hovaten = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 0)
namsinh = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 5)
tuoi = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 7)
chucvu = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 3)
taikhoan = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 51)
trinhdovanhoa = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 8)
trinhdochuyenmon = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 9)
ngoaingu = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 41)
tinhoc = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 42)
tnbonhiem = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 24)
dangdoan = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 12)
tncongtactaicang = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 14)
hesoluong = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 15)
tnnangluong = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 16)
thangbangbacluong = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 19)
solaodong = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 44)
sobhxh = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 45)
matncn = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 21)
nguoiphuthuoc = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 46)
hotencha = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 28)
hotenme = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 29)
hotenvochong = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 30)
socon = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 31)
nguyenquan = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 32)
noisinh = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 33)
thuongtru = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 36)
cmnd = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 40)
dienthoai = Worksheets("BANGTONGHOP").Range("D" & rw).Offset(0, 52)


For Each cl In Worksheets("BANGTONGHOP").Range("D" & rw & ":AZ" & rw)
Next cl
CommandButton2.Enabled = (ComboBox1.ListIndex < ComboBox1.ListCount - 1)
CommandButton3.Enabled = (ComboBox1.ListIndex > 0)
End Sub


Private Sub CommandButton1_Click()
Application.Quit
End Sub


Private Sub CommandButton2_Click()
ComboBox1.ListIndex = ComboBox1.ListIndex + 1
End Sub


Private Sub CommandButton3_Click()
ComboBox1.ListIndex = ComboBox1.ListIndex - 1
End Sub


'Code cho nút Close Form
Private Sub Image1_Click()
End
End Sub


Private Sub OptionButton1_Click()
    option_button "H"
End Sub


Private Sub option_button(nhom As String)
    Application.EnableEvents = False
    ComboBox1.Clear
    irow = Sheets("BANGTONGHOP").Range("E65536").End(xlUp).Row
    For i = 5 To irow
        If Left(Sheets("BANGTONGHOP").Cells(i, 5), 1) = nhom Then ComboBox1.AddItem Sheets("BANGTONGHOP").Cells(i, 4)
    Next
    CommandButton2.Enabled = True
    CommandButton3.Enabled = False
    Application.EnableEvents = True
End Sub


Private Sub OptionButton2_Click()
    option_button "B"
End Sub




Private Sub OptionButton3_Click()
    option_button "T"
End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then
    Cancel = True
    MsgBox "Hãy Click nút THOÁT!", vbCritical + vbOKOnly, "            No Close"
  End If
End Sub


Private Sub UserForm_Initialize()
Dim ws1 As Worksheet
Set ws1 = Worksheets("BANGTONGHOP")
irow = ws1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 1).Row - 1
With ComboBox1
'Chon dòng bát dàu Data Hien ra Form
Application.EnableEvents = False
For Row = 5 To irow
'Láy Data vào combobox cot E Nguòi xu ly
.AddItem Sheets("BANGTONGHOP").Cells(Row, 4)
Next Row
CommandButton3.Enabled = False
Application.EnableEvents = True
End With
End Sub
 
Upvote 0
Nói về cơ sở dữ liệu của bạn

1./ Trước tiên về fần "hoàn cảnh gia đình"
Trong CSDL của bạn có 4 trường để quản về điều này, đó là
[Họ Tên Cha], [Họ Tẹn mẹ], [Họ Tên Vợ/Chồng], [Số con]

Mục đích của việc quản lí này là để thuận tiện cho người quản lí tính thuế thu nhập cá nhân, Tính chế độ khi bản thân người lao động bị chết hay bị tai nạn LĐ mà mất đi

Vậy khi đó CSDL của bạn vẫn thiếu, cái thiếu đầu tiên là ngày tháng sinh (Bạn đừng nói với tôi là BHXH hay cơ quan thuế không cần đến độ tuổi của những thân nhân người LĐ đó nghe!)

Nếu bạn cho tách ra thành 2 bảng liên hệ 1<-> nhiều với nhau theo kiểu file bên trên, bạn sẽ có đủ số liệu & CSDL của bạn trông đúng chuẩn hơn.

Tương tự như vậy; Để quản lí quá trình lương của 1 nhân viên nào đó, ta cũng cần xây dựng CSDL quan hệ 1 <-> n này

Chuyện này cũng cần như để theo dõi quá trình thuyên chuyển công tác từ bộ fận/đơn vị này sang đơn vị khác trong công ti/xí nghiệp/cơ quan của bạn.

2./ Tất cả những vấn đề đó tựu chung về mã nhân viên duy nhất của người LĐ; Ta không thể xây dựng các bảng biểu này, nếu ta không lập ra mã duy nhất cho người lao động.

. . . . . . .

Tóm lại, cái chưa chuẩn nhất hiện thời trong CSDL của bạn là mã NV!

(Xin chấm hết!)
 
Upvote 0
Cảm ơn bạn Hau151978 rất nhiều, bạn làm rất đúng với mong muốn của mình. Cho mình được voi đòi 2 bà Trưng tí xíu, hee.
Private Sub option_button(nhom As String)
Application.EnableEvents = False
ComboBox1.Clear
irow = Sheets("BANGTONGHOP").Range("E65536").End(xlUp).Row
For i = 5 To irow
If Left(Sheets("BANGTONGHOP").Cells(i, 5), 1) = nhom Then ComboBox1.AddItem Sheets("BANGTONGHOP").Cells(i, 4)
Next
CommandButton2.Enabled = True
CommandButton3.Enabled = False
Application.EnableEvents = True
End Sub

Mình củng hiểu sơ sơ về đoạn code này nhưng nếu
Private Sub OptionButton1_Click()
option_button "H"
End Sub
Khi chọn sẽ hiện vừa tên Hành chính tổng hợp và vừa tên Bảo vệ mà không cần đổi mã Nhân viên thì làm sao vậy bạn
Còn nếu phòng TCTL trùng chữ "T" với phòng TCKT thì tạo OptionButton làm sao
Mong được bạn giúp đỡ tí.
 
Upvote 0
Mình chưa rõ ý bạn. Lý do mình chỉ lấy ký tự đầu là do bạn dùng tiếng Việt có dấu không đưa vào code được, bạn có thể sưa lại Sub option_button theo ý bạn.
Nếu bạn muốn chọn nhiều loại một lúc thì thay option button bằng checkbox.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình chưa rõ ý bạn. Lý do mình chỉ lấy ký tự đầu là do bạn dùng tiếng Việt có dấu không đưa vào code được, bạn có thể sưa lại Sub option_button theo ý bạn.
Nếu bạn muốn chọn nhiều loại một lúc thì thay option button bằng checkbox.

Thứ 1: bảo vệ thuộc phòng HCTH nên nếu chọn phòng HCTH thì hiện nhân viên HCTH và Bảo vệ. Dùng checkbox thì làm sao hả bạn? Mong bạn làm rõ hơn vì mình hơi kém.
Thứ 2: nữa là công ty mình còn phòng TCKT (tài chính kế toán) và TCTL (tổ chức tiền lương). Nếu dò 1 ký tự vậy thì 2 phòng ban này bị trùng chữ "T" thì sao dò được? Nên có cách nào dò bằng 2 ký tự không bạn? Cảm ơn bạn đã giúp đỡ.
 
Upvote 0
Mã:
Private Sub option_button (nhom as string)
 Dim s$, irow&, i&
 Application. EnableEvents=false
 Combobox1.clear
 Irow=Sheets("bangtonghop").Range("E65536").End(3).Row
 For i=5 to irow
   s=sheets("bangtonghop").cells(i,5).text
   If (instr(s,nhom)>0) or (nhom="HCTH" and s="BV") then combobox1.additem sheets("bangtonghop").cells(i,4)
  Next
 Commandbutton2.enabled=true
  Commandbutton3.enabled=false
 Application.enableevents=true
End sub
Các sub event click
Option_button "HCTH"
Option_button "BV"
Riêng "tổ 1" thì option_button "1"
 
Upvote 0
Một số lệnh trong VBA như bạn nói mình thật sự không hiểu và biết làm lắm, mong được bạn giành ít thời gian giúp đỡ bắng cách làm vào file "The nhan su" gửi lại giúp mình được không? Xin cảm ơn bạn nhiều.
Bạn có thể tham khảo cách khác khi viet code cho cái Combox.
Nên bố trí cho khoa học thì code sẽ ngắn gọn và đơn giản hơn
PHP:
Private Sub ComboBox1_Change()
Dim rw&, i&, str(), Cot()
str = Array("hovaten", "chucvu", "namsinh", "tuoi", "trinhdovanhoa", _
"trinhdochuyenmon", "dangdoan", "tncongtactaicang", "hesoluong", "tnnangluong", _
"thangbangbacluong", "matncn", "tnbonhiem", "hotencha", "hotenme", "hotenvochong", _
"socon", "nguyenquan", "noisinh", "thuongtru", "cmnd", "ngoaingu", "tinhoc", _
"solaodong", "sobhxh", "nguoiphuthuoc", "taikhoan", "dienthoai")
Cot = Array(0, 3, 5, 7, 8, 9, 12, 14, 15, 16, 19, 21, 24, 28, 29, _
30, 31, 32, 33, 36, 40, 41, 42, 44, 45, 46, 51, 52)
With Worksheets("BANGTONGHOP")
   rw = WorksheetFunction.Match(Me.ComboBox1.Value, .Range("D:D"), 0)
   For i = 0 To UBound(str)
      Me.Controls(str(i)).Value = .Cells(rw, 4).Offset(, Cot(i)).Value
   Next
End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom