Nhờ sửa Code bẫy lỗi để trống dữ liệu trên UserForm.

Liên hệ QC

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
846
Nghề nghiệp
CNVC Laos
Chào các bạn...Như tiêu đề: Nhờ các bạn sửa (Rút gọn) cái Code bẫy lỗi để trống dữ liệu.

If Ctr1 = "" Or Ctr2 = "" Or Ctr3 = "" Or Ctr4 = "" Or Ctr5 = "" Or Ctr6 = "" Or Ctr7 = "" Or Ctr8 = "" Or Ctr9 = "" Then
MsgBox ("Ban phai nhap day du cac thong tin")
Ctr1.SetFocus

Vì nếu có nhiều Ctr thì đoạn Code trên quá dài.
Các bạn xem file đính kèm và sửa giúp mình nhé,Thank
 

File đính kèm

  • SuaCodeBayLoi.xls
    55.5 KB · Đọc: 19
Lần chỉnh sửa cuối:
Chào các bạn...Như tiêu đề: Nhờ các bạn sửa (Rút gọn) cái Code bẫy lỗi để trống dữ liệu.

If Ctr1 = "" Or Ctr2 = "" Or Ctr3 = "" Or Ctr4 = "" Or Ctr5 = "" Or Ctr6 = "" Or Ctr7 = "" Or Ctr8 = "" Or Ctr9 = "" Then
MsgBox ("Ban phai nhap day du cac thong tin")
Ctr1.SetFocus

Vì nếu có nhiều Ctr thì đoạn Code trên quá dài.
Các bạn xem file đính kèm và sửa giúp mình nhé,Thank
Nếu đặt tên các control theo quy tắc trên thì anh thay đoạn code trên bởi đoạn code này xem sao:
[GPECODE=vb]Dim i As Long
For i = 1 To 9
If Controls("Ctr" & i) = "" Then Exit For
Next
If i < 10 Then
MsgBox ("Ban phai nhap day du cac thong tin")
Controls("Ctr" & i).SetFocus
Exit Sub
End If[/GPECODE]
Khi thêm controls, anh chỉ cần thay đổi số 9 và số 10 trong đoạn code trên thôi.
 
Upvote 0
Chào các bạn...Như tiêu đề: Nhờ các bạn sửa (Rút gọn) cái Code bẫy lỗi để trống dữ liệu.

If Ctr1 = "" Or Ctr2 = "" Or Ctr3 = "" Or Ctr4 = "" Or Ctr5 = "" Or Ctr6 = "" Or Ctr7 = "" Or Ctr8 = "" Or Ctr9 = "" Then
MsgBox ("Ban phai nhap day du cac thong tin")
Ctr1.SetFocus

Vì nếu có nhiều Ctr thì đoạn Code trên quá dài.
Các bạn xem file đính kèm và sửa giúp mình nhé,Thank
Anh xem lại file và cho ý kiến thêm nha
 

File đính kèm

  • SuaCodeBayLoi.xls
    45 KB · Đọc: 17
Upvote 0
Chào viehoai, dạo này vẫn khỏe chứ...Cái Code của viehoai sửa chạy rất ok ,nhưng khi mình chèn vào đoạn Code nhập dữ liệu dưới đây nó lại ko chạy:

Private Sub Cmd_ok_Click()
Dim i, Rg As Range
For i = 1 To 51
If InStr(1, Right("00" & i, 2)) = 0 Then
DATA.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
DATA.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next
DATA.Cells(Me.Ctr_dg, 52) = DATA.Cells(Me.Ctr_dg, 52).Value & User & "~" & Format(Now(), "dd/mm/yy hh:mm") & ";"
xem
Naplist
End Sub

Nhờ viehoai xem và chèn thêm Code bẫy lỗi cho với.
 
Upvote 0
Chào viehoai, dạo này vẫn khỏe chứ...Cái Code của viehoai sửa chạy rất ok ,nhưng khi mình chèn vào đoạn Code nhập dữ liệu dưới đây nó lại ko chạy:

Private Sub Cmd_ok_Click()
Dim i, Rg As Range
For i = 1 To 51
If InStr(1, Right("00" & i, 2)) = 0 Then
DATA.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
DATA.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next
DATA.Cells(Me.Ctr_dg, 52) = DATA.Cells(Me.Ctr_dg, 52).Value & User & "~" & Format(Now(), "dd/mm/yy hh:mm") & ";"
xem
Naplist
End Sub

Nhờ viehoai xem và chèn thêm Code bẫy lỗi cho với.
Anh đưa file lại cho em, chưa đọc kỹ code nhưng có khả năng tên của button là Cmd_ok mới thực thi code được
 
Upvote 0
Viehoai xem file và giúp nhé.
 

File đính kèm

  • DATA-FORM3.7z
    45.1 KB · Đọc: 11
Upvote 0
Viehoai xem file và giúp nhé.
Anh giải thích cho em mục đích anh nhấn nút lệnh Save (Cmd_ok)
Trong code anh có lệnh
[GPECODE=vb]
For i = 1 To 51
If InStr(1, Right("00" & i, 2)) = 0 Then
DATA.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
DATA.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next[/GPECODE]
Nghĩa là:
i=1: Right("00" & i,2)= Right("001", 2)= "01"=> InStr(1, Right("00" & i, 2)) =0 mà đáng lẽ là InStr( Right("00" & i, 2),1)???
i=2: Right("00" & i,2)= Right("002", 2)= "02"=> InStr(1, Right("00" & i, 2)) =0
.....
i=15: Right("00" & i,2)= Right("0015", 2)= "15"=> InStr(1, Right("00" & i, 2)) =0
Em không hiểu ý anh làm gì nữa
 
Lần chỉnh sửa cuối:
Upvote 0
mình cần bẫy lỗi để trống dữ liệu,tức là khi chưa nhập dữ liệu vào các Ctr thì khi bấm nút cmd_ok thì sẽ ko cho save và hiện lên thông báo chưa nhập dữ liệu đầy đủ.
 
Upvote 0
mình cần bẫy lỗi để trống dữ liệu,tức là khi chưa nhập dữ liệu vào các Ctr thì khi bấm nút cmd_ok thì sẽ ko cho save và hiện lên thông báo chưa nhập dữ liệu đầy đủ.
Ý tưởng của anh em đọc khó hiểu thật, đọc file tìm hiểu hơi khó
1. Anh trình mày mục đích anh đưa câu lệnh If InStr(1, Right("00" & i, 2)) = 0 Then để làm gì
2. Với sự kiện Cmd_ok_Click() có liên quan gì câu nói ở trên của anh đâu?
Anh nói thêm khi nào thì Me.Cmd_ok.Visible = True vậy, em rà theo code lâu quá
 
Lần chỉnh sửa cuối:
Upvote 0
Cái File trên là của bác sealand làm,mình có cắt bớt đi vài đoạn nên nó như vậy,đoạn code trên đầy đủ như thế này:

Private Sub Cmd_ok_Click()
Dim i, ch, Rg As Range
ch = "11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;31;37;38;39;40;41"
For i = 1 To 51
If InStr(1, ch, Right("00" & i, 2)) = 0 Then
HS.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
HS.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next
HS.Cells(Me.Ctr_dg, 52) = HS.Cells(Me.Ctr_dg, 52).Value & User & "~" & Format(Now(), "dd/mm/yy hh:mm") & ";"
xem
Naplist
End Sub
 
Upvote 0
Cái File trên là của bác sealand làm,mình có cắt bớt đi vài đoạn nên nó như vậy,đoạn code trên đầy đủ như thế này:

Private Sub Cmd_ok_Click()
Dim i, ch, Rg As Range
ch = "11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;31;37;38;39;40;41"
For i = 1 To 51
If InStr(1, ch, Right("00" & i, 2)) = 0 Then
HS.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
HS.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next
HS.Cells(Me.Ctr_dg, 52) = HS.Cells(Me.Ctr_dg, 52).Value & User & "~" & Format(Now(), "dd/mm/yy hh:mm") & ";"
xem
Naplist
End Sub
Về logic thì code này hợp lý, anh sử dụng hàm InStr() không đúng rồi, InStr(Start,String1,String2) tìm String2 trong chuỗi String1. Anh tự thay đổi thử rồi có gì nói tiếp nhé
 
Upvote 0
Anh Khamha làm được chưa?
Theo em hiểu trong các Ctr* (từ A1 đến A51) thì cái nào nhập dữ liệu text thì "*" năm trong chuỗi text "ch", còn không là dữ liệu dạng số, nếu có nhập chuỗi thì nó sẽ chuyển bằng 0. Vậy chuỗi ch thì chỉ có anh biết mà đặt
Như trên anh đã nhằm là InStr(1,String1, String2): số 1 là vị trí bắt đầu tìm Start, tìm chuỗi String2 trong chuỗi String1
Còn công thức của anh:
InStr(1, Right("00" & i, 2)) hiểu là tìm chuỗi Right("00" & i, 2) trong chuỗi "1" là không đúng
(Lưu ý nếu chỉ tối đa 51 thì chỉ cần Right("0" & i, 2) 1 số 0 là đủ
 
Lần chỉnh sửa cuối:
Upvote 0
Còn cách tạo đoạn Code bẫy lỗi ko cho lưu dữ liệu từ Form vào bảng tính thì phải tạo và chèn vào đâu?
* Nhờ viehoai giải thích nội dung Code trong File trên để mình ngâm cứu với...Còn rất nhiều chỗ chưa hiểu.Thank
 
Upvote 0
Còn cách tạo đoạn Code bẫy lỗi ko cho lưu dữ liệu từ Form vào bảng tính thì phải tạo và chèn vào đâu?

Không hiểu lắm đoạn màu đỏ. Bạn nói rõ hơn được không? Nếu lưu thì lưu cái gì và không lưu như thế nào? Và lỗi gì phát sinh mà cần bẫy lỗi?
 
Upvote 0
Còn cách tạo đoạn Code bẫy lỗi ko cho lưu dữ liệu từ Form vào bảng tính thì phải tạo và chèn vào đâu?
* Nhờ viehoai giải thích nội dung Code trong File trên để mình ngâm cứu với...Còn rất nhiều chỗ chưa hiểu.Thank
Anh chưa hiểu ở đâu thì em giải thích (nếu được) chứ file trên code nhiều thế giải thích hết sao nổi
Ý màu đỏ trên của anh là nếu Control nào trống thì chưa cho nhập vào bảng tính? Nếu vậy thì anh kiểm tra control nào còn trống thì phang "Exit Sub" là nó thoát lệnh nhập dữ liệu ngay mà
 
Upvote 0
Khi ta tạo dữ liệu mới hoặc sửa dữ liệu ,nếu trong các TextBox hay ComboBox "Ctr" chưa nhập dữ liệu thì khi ta bấm nút Save sẽ có thông báo là: "Ban phai nhap day du cac thong tin"
 
Upvote 0
Khi ta tạo dữ liệu mới hoặc sửa dữ liệu ,nếu trong các TextBox hay ComboBox "Ctr" chưa nhập dữ liệu thì khi ta bấm nút Save sẽ có thông báo là: "Ban phai nhap day du cac thong tin"
Đúng như trên đã nói và trong file SuaCodeBayLoi.xls em có đoạn code kiểm tra Control nào chưa nhập thì la làng lên "Ban phai nhap day du cac thong tin" và sau đó là Exit Sub
[GPECODE=vb]For i = 1 To 9
If Me.Controls("Ctr" & i) = "" Then
Me.Controls("Ctr" & i).SetFocus
MsgBox "Ban phai nhap day du cac thong tin"
Exit Sub
End If
Next[/GPECODE]
Chú ý đoạn mã này phải đưa đầu thủ tục
 
Upvote 0
Khi ta tạo dữ liệu mới hoặc sửa dữ liệu ,nếu trong các TextBox hay ComboBox "Ctr" chưa nhập dữ liệu thì khi ta bấm nút Save sẽ có thông báo là: "Ban phai nhap day du cac thong tin"


Đơn giản thế này thôi, chỉ thêm các dòng từ 4 đến 10 sau vào Sub Cmd_ok_Click() là được kiểm soát khoảng trắng-- các code khác vẫn giữ nguyên (sai đúng không bit - vì code cũ)

[GPECODE=vb]Private Sub Cmd_ok_Click()
Dim i, Rg As Range

For i = 1 To 51
If Me.Controls("Ctr" & Format(i, "00")) = "" Then
MsgBox "Ban Phai NHAP DAY DU DL"
Me.Controls("Ctr" & Format(i, "00")).SetFocus
Exit Sub
End If
Next

For i = 1 To 51
If InStr(1, Right("00" & i, 2)) = 0 Then
DATA.Cells(Me.Ctr_dg, i) = Me.Controls("Ctr" & Right("00" & i, 2))
Else
DATA.Cells(Me.Ctr_dg, i) = Val(Format(Me.Controls("Ctr" & Right("00" & i, 2)), "0"))
End If
Next

DATA.Cells(Me.Ctr_dg, 52) = DATA.Cells(Me.Ctr_dg, 52).Value & User & "~" & Format(Now(), "dd/mm/yy hh:mm") & ";"
xem
Naplist

End Sub[/GPECODE]
 
Upvote 0
Nếu muốn thông báo chi tiết hơn, là tại cotrol nào đang kiểm soát phát hiện là không dữ liệu, thì thay đoạn code dòng 4-10 trên bằng đoạn code sau (nhớ vẫn đặt vào Sub Cmd_ok_Click() ) :

[GPECODE=vb]For i = 1 To 51
If Me.Controls("Ctr" & Format(i, "00")) = "" Then
MsgBox "Ban Phai NHAP DAY DU DL" & Chr(13) & _
"Tai " & Me.Controls("L" & Format(i, "00")) & _
" (" & Me.Controls("Ctr" & Format(i, "00")).Name & ") dang KHONG CO DL"
Me.Controls("Ctr" & Format(i, "00")).SetFocus
Exit Sub
End If
Next[/GPECODE]
 
Upvote 0
Đã giải quyết xong vụ này...Cảm ơn các bạn nhiều.
Còn về giải thích Code trong File thì ko phải làm bây giờ đâu, ý là khi nào viehoai có thời gian rảnh thì giải thích một hai hàng ,sau đó gộp lại thôi.
 
Upvote 0
Web KT
Back
Top Bottom