longkd_bvct@yahoo.com.vn > 18-12-19, 12:01 PM
tranthanhan1962 > 18-12-19, 02:05 PM
(18-12-19, 12:01 PM)longkd_bvct@yahoo.com.vn Đã viết: Chào mọi người ạ. Em đang làm 1 form nhập liệu. Gồm các nút lệnh: Thêm, Chỉnh, Xóa, ĐóngDo code VBA sẽ bị lỗi khi gỏ tiếng Việt, nên bạn phải tạo thêm các Label mẫu để xử lý các các Caption cho nút lệnh: Them_Label (Caption "Thêm"), Luu_Label (Caption "Lưu"), Chinh_Label (Caption "Chỉnh")...
Em muốn khi click vào nút "Thêm" thì nó sẽ tự chuyển thành nút "Lưu", còn nút "Chình" sẽ chuyển thành "Bỏ qua" và ẩn nút "Xóa"
Và khi em click nút "Chỉnh" thì nút "Thêm" sẽ chuyển thành nút "Lưu", và bản thân nút "Chỉnh" sẽ chuyển thành "Bỏ qua". Và kèm theo icon của từng nút ạ.
Em đã làm được nút "Thêm", "Xóa", còn nút "Chỉnh" em chưa làm dc. Nhờ mọi người giúp ạ. Em chân thành cảm ơn.
https://drive.google.com/file/d/1_umXdFC...sp=sharing
longkd_bvct@yahoo.com.vn > 18-12-19, 03:36 PM
(18-12-19, 02:05 PM)tranthanhan1962 Đã viết:Cám ơn anh đã hướng dẫn ạ.(18-12-19, 12:01 PM)longkd_bvct@yahoo.com.vn Đã viết: Chào mọi người ạ. Em đang làm 1 form nhập liệu. Gồm các nút lệnh: Thêm, Chỉnh, Xóa, ĐóngDo code VBA sẽ bị lỗi khi gỏ tiếng Việt, nên bạn phải tạo thêm các Label mẫu để xử lý các các Caption cho nút lệnh: Them_Label (Caption "Thêm"), Luu_Label (Caption "Lưu"), Chinh_Label (Caption "Chỉnh")...
Em muốn khi click vào nút "Thêm" thì nó sẽ tự chuyển thành nút "Lưu", còn nút "Chình" sẽ chuyển thành "Bỏ qua" và ẩn nút "Xóa"
Và khi em click nút "Chỉnh" thì nút "Thêm" sẽ chuyển thành nút "Lưu", và bản thân nút "Chỉnh" sẽ chuyển thành "Bỏ qua". Và kèm theo icon của từng nút ạ.
Em đã làm được nút "Thêm", "Xóa", còn nút "Chỉnh" em chưa làm dc. Nhờ mọi người giúp ạ. Em chân thành cảm ơn.
https://drive.google.com/file/d/1_umXdFC...sp=sharing
Đã có các caption thì cứ dùng hàm if để xử lý thôi.
Private Sub cmdThem_Click()
Lệnh xử lý của cmdThem...
cmdThem.Caption=Luu_Label.Caption
cmdChinh.Caption=BoQua_Label.Caotion
cmdXoa.Visible=False
End Sub
--------
Private Sub cmdChinh_Click()
Lệnh xử lý của cmdChinh...
cmdThem.Caption=Luu_Label.Caption
cmdChinh.Caption=BoQua_Label.Caotion
cmdXoa.Visible=False
End Sub
Còn về icon của các nút lệnh bạn tạo sẳn các nút lệnh mẫu có sẳn các icon muốn sử dụng Đặt tên thành mau01, mau02, mau03 hoặc mauthem, mauxoa, mauchinh...
Khi muốn nút lệnh có icon nào thì đưa code vào:
Ví dụ muốn muốn cmdThem có icon lưu: cmdThem.PictureData = mauluu.PictureData khi muốn nó trở về icon thêm thì cmdThem.PictureData = mauthem.PictureData
Nói chung bạn xử lý tốt công việc của mình chỉ vướng cái caption khi muốn thay đổi vì VBA không hỗ trợ unicode tiếng Việt nên chỉ cần tạo các label mẫu tiếng Việt để nó lấy sử dụng. Tương tự các mẫu icon cũng làm sẵn để nó sử dụng khi cần thay đổi. Thiết đặt các mẫu này visible = false để khi mở form nó không hiển thị.
Chúc bạn thành công
longkd_bvct@yahoo.com.vn > 19-12-19, 08:37 AM
ongke0711 > 19-12-19, 12:29 PM
Xuân Thanh > 19-12-19, 01:21 PM
Private Sub A_Click()
Me.B.Visible = True
Me.A.Visible = False
....code cho nút A
End Sub
Private Sub B_Click()
Me.A.Visible = True
Me.B.Visible = False
....code cho nút B
End Sub
Nguyen SVN > 19-12-19, 02:40 PM
ongke0711 > 19-12-19, 04:40 PM
ongke0711 > 20-12-19, 12:57 AM
(18-12-19, 12:01 PM)longkd_bvct@yahoo.com.vn Đã viết: Chào mọi người ạ. Em đang làm 1 form nhập liệu. Gồm các nút lệnh: Thêm, Chỉnh, Xóa, Đóng
Em muốn khi click vào nút "Thêm" thì nó sẽ tự chuyển thành nút "Lưu", còn nút "Chình" sẽ chuyển thành "Bỏ qua" và ẩn nút "Xóa"
Và khi em click nút "Chỉnh" thì nút "Thêm" sẽ chuyển thành nút "Lưu", và bản thân nút "Chỉnh" sẽ chuyển thành "Bỏ qua". Và kèm theo icon của từng nút ạ.
longkd_bvct@yahoo.com.vn > 20-12-19, 08:39 AM
(20-12-19, 12:57 AM)ongke0711 Đã viết:Em chân thành cảm ơn anh nhiều ạ. Vì em tự học nên có nhiều việc cũng k hiểu rõ ạ.(18-12-19, 12:01 PM)longkd_bvct@yahoo.com.vn Đã viết: Chào mọi người ạ. Em đang làm 1 form nhập liệu. Gồm các nút lệnh: Thêm, Chỉnh, Xóa, Đóng
Em muốn khi click vào nút "Thêm" thì nó sẽ tự chuyển thành nút "Lưu", còn nút "Chình" sẽ chuyển thành "Bỏ qua" và ẩn nút "Xóa"
Và khi em click nút "Chỉnh" thì nút "Thêm" sẽ chuyển thành nút "Lưu", và bản thân nút "Chỉnh" sẽ chuyển thành "Bỏ qua". Và kèm theo icon của từng nút ạ.
File demo theo yêu cầu của bạn đây.
Link: http://www.mediafire.com/file/nr3xfsy8c9...accdb/file
Các control (textbox, command button...) có một thuộc tính mà ít bạn khai thác đó là Tag (nằm trong Properties - Other).
Trong trường hợp một nút lệnh có nhiều chức năng thì sử dụng .Tag cũng là một trong các giải pháp.
Vd: khi bấm một nút lệnh [Thêm], bạn sẽ gán cho Tag của nút đó là: "luu". Khi bấm lần nữa, sẽ dùng code kiểm tra cái Tag này, nếu nó là "luu" thì thực hiện code lưu, nếu nó là "them" thì thực hiện các code tưng ứng.
Trong demo trên tôi sử dụng thuộc tính Tag này cho nút lệnh.
Góp ý riêng về code trong file của bạn longkd_bvct@yahoo.com.vn:
- Khi khai báo "Dim rs As Recordset", bạn nên khai báo tường minh hơn là "Dim rs As DAO.Recordset" vì: nếu trong file của bạn có khai báo thư viện ADODB thì với cách khai báo đầu tiên của bạn, Access có khi sẽ hiểu là ADO Recordset chứ không phải DAO Recordset và các phương thức, thuộc tính của 2 loại recordset này là khác nhau.
- Đối với các Action query (Insert, delete, update) thì bạn nên dùng câu lệnh SQL để thực thi sẽ nhanh hơn so với dùng Recordset:
Vd: CurrentDb.Execute "UPDATE tblCsyt SET tencsyt = '" & Me.txtTenCsyt & "'", dbFailOnError
sẽ chạy nhanh hơn là
Dim rs As DAO.Recordset
Set rs = CurrentDb. OpenRecordset ("SELECT * FROM tblCsyt WHERE macsyt ='" & me.txtmacsyt & "'", dbOpenDynaset)
rs.Edit
...
rs.Update
- Đối với table tblCsyt, tôi phải thêm một trường ID dạng "Auto Number" để làm thêm một mã định danh cho từng dòng. Bạn dùng [macsyt] làm khoá chính (Primary key) nhưng bạn cũng cho phép sửa luôn trường này trong Form (unbound) -> vậy khi update thì bạn dựa vào field nào của record để xác định đúng là dòng mình cầp cập nhật vô? bạn đã sửa luôn khoá chính rồi.
- Tương tự cái lỗi trên khi bạn bấm nút [Xoá] mà nó xoá dòng đầu tiên như bạn đã đề cập. Lý do là code nút xoá của bạn nó không xác định được dòng nào cần xoá.
Set rs = currentDb.OpenRecordset ("tblCsyt", dbOpenDynaset)
rs.Delete -->>??? Xoá dòng nào? có từ khoá nào để xác định ?
Mặc định khi OpenRecordset thì con trỏ sẽ nằm ở dòng đầu tiên của Recordset nên nó sẽ xoá dòng đầu tiên thôi.
Nếu bạn muốn dùng Recordset để xoá thì bạn phải lọc ra đúng dòng cần xoá
Vd:
Dim sSQL As String
sSQL =" Select * From tblCsyr Where macsyt ='" & me.txtmacssyt & "'" --> trả về đúng 1 dòng
Set rs = currentDb.OpenRecordset (sSQL, dbOpenDynaset)
rs.Delete
...
- Khi bạn bẫy lỗi kiểm tra một Textbox có rỗng hay không để bắt người dùng nhập liệu đầy đủ:
If Me.txtcsyt ="" Then ... --> câu lệnh này chưa đủ vì còn trường hợp Null mà bạn chưa bẫy lỗi. Null khác "" nhé.