Xuân Thanh > 17-05-20, 05:51 PM
tranthanhan1962 > 17-05-20, 10:46 PM
(17-05-20, 05:42 PM)yamakashi2003 Đã viết: Bác cho em hỏi trong đoạn code này:VBA có 2 thứ mà ta gọi là hàm (function) và thủ tục (Sub). Cả hai điều có tham số.
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim n_Reply As Integer
Response = acDataErrContinue
n_Reply = msgBox("Ban muon xoa record nay", vbQuestion + vbYesNo, "Thong Bao")
If n_Reply = vbNo Then
Cancel = True
End If
Docmd.OpenForm "ABC"
End Sub
Tại sao Cancel=true lại hủy được việc xóa record ạ,
vì em không thấy có dòng code nào thực hiện việc xóa record ạ
tại sao lệnh Cancel = true lại vẫn cho chạy tiếp dòng lệnh docmd.opendorm "abc", mà lại hủy được sự kiện delete record ạ
yamakashi2003 > 18-05-20, 01:13 AM
(17-05-20, 10:46 PM)tranthanhan1962 Đã viết:Em cám ơn bác em hơi hiểu r ạ, do bthg e chỉ hay gặp sub k có tham số nên chưa biết th này(17-05-20, 05:42 PM)yamakashi2003 Đã viết: Bác cho em hỏi trong đoạn code này:VBA có 2 thứ mà ta gọi là hàm (function) và thủ tục (Sub). Cả hai điều có tham số.
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim n_Reply As Integer
Response = acDataErrContinue
n_Reply = msgBox("Ban muon xoa record nay", vbQuestion + vbYesNo, "Thong Bao")
If n_Reply = vbNo Then
Cancel = True
End If
Docmd.OpenForm "ABC"
End Sub
Tại sao Cancel=true lại hủy được việc xóa record ạ,
vì em không thấy có dòng code nào thực hiện việc xóa record ạ
tại sao lệnh Cancel = true lại vẫn cho chạy tiếp dòng lệnh docmd.opendorm "abc", mà lại hủy được sự kiện delete record ạ
Chắc ai cũng từng thấy qua những dòng này
Public Function VND(NumCurrency)
Function BangChu(Amt)
Public Function msgBoxUni(ByVal PromptUni As Variant, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal TitleUni As Variant = vbNullString) As VbMsgBoxResult
Những chữ đỏ đươc gọi là biến (tham số). Các giá trị thay đổi làm thay đổi kết quả hàm. Thủ tục ít thấy hơn nhưng không phải là không có.
Ngoài:
Private Sub Form_Load()
Private Sub Command7_Click()
...
Là không có tham số nhưng cũng có những thủ tuc có tham số:
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Private Sub Form_AfterDelConfirm(Status As Integer)
Private Sub Form_Open(Cancel As Integer)
Đây là những thủ tuc của hệ thống, vì vậy tham số cũng là của hê thống đặt;
Cancel As Integer:Không thưc hiện.
Response As Integer: Thông báo chọn lựa
Status As Integer: Thông báo xác nhận
...
Ở đây Private Sub Form_BeforeDelConfirm là thủ tục sự kiện của form trước khi xóa, Response As Integer: Có thông báo chọn lựa trươc khi xóa. Cancel As Intege : Khi chon Cancel = Chọn No trên thông báo nó sẽ hủy viêc xóa record. (Đây là việc thực thi của nút lệnh, tất nhiên nếu dùng phím delete nó cũng thưc hiện như vây)
Binh thương bạn xóa record form sẽ thực hiện một chuỗi hành động:
Hiện thông báo (Response ) cho bạn chọn:
You are about to delete...
Và 2 phím yes/no để bạn chọn, nếu chọn no => cancel = true và access không xóa record
Giờ bạn muốn sử dung thông báo tiếng Việt, Đầu tiên phải dẹp cái thông báo tiêng Anh: You are about to delete... bằng lệnh: Response = acDataErrContinue. Đừng hỏi tôi tại sao dùng lệnh này: Đó là do hệ thống bắt buộc.
Khi tham số Response bị mất tất cả nhưng lệnh tự động của hệ thống phụ thuọc vào response cũng bị mất, bạn phải tạo một tham số khác thay thế tham số response là n_Reply, và xác định giá tri của nút no trong n_Reply là hủy xóa Cancel = True (tất nhiên nếu bạn đặt lệnh If n_Reply = vbYes Then Cancel = True) thi khi bạn bấm yé nó sẽ hủy xóa và ngược lại.
Có lẽ ban sẻ hỏi tôi lấy đâu ra đoạn code này.
Tất cả các code mẫu đều vòng vòng trong này:
https://docs.microsoft.com/en-us/office/vba/api/access.form
Cứ tìm rồi sẽ thấy
Xuân Thanh > 18-05-20, 10:57 AM