Dừng mail sub khi module phát hiện thấy lỗi (1 người xem)

Liên hệ QC

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

anhdepjai

Thành viên thường trực
Tham gia
16/6/10
Bài viết
383
Được thích
92
Gửi mọi người

Mình làm 1 đoạn sub có vài cái module,
Trong 1 module có phần phát hiện nếu dữ liệu bị thiếu thì dừng module ấy lại.
Tuy nhiên, khi thực thi thì đoạn mail sub nó vẫn tiếp tục chạy và module báo dừng riêng cho nó (end sub) chứ không dừng mail sub

MỌi người có cách nào cho stop cái main sub từ đoạn module không?
 
Bạn dùng câu lệnh

Mã:
End
 
Upvote 0
Mã:
Exit sub
chứ dhn46.
 
Upvote 0
Gửi mọi người

Mình làm 1 đoạn sub có vài cái module,
Trong 1 module có phần phát hiện nếu dữ liệu bị thiếu thì dừng module ấy lại.
Tuy nhiên, khi thực thi thì đoạn mail sub nó vẫn tiếp tục chạy và module báo dừng riêng cho nó (end sub) chứ không dừng mail sub

MỌi người có cách nào cho stop cái main sub từ đoạn module không?

bạn cũng nên để thời gian xem lại định nghĩa trong VBA cái gì gọi là Module , cái gì gọi là sub
Chứ bạn nói rằng bạn có 1 đoạn sub có chứa vài cái module thì hơi khổ ....
và tôi cũng chưa nghe nói về khái niệm dừng module ấy lại nghĩa là gì
 
Upvote 0
To chủ thớt
Hay
On Error GoTo hat
code
hat:

"Nâng chén tiêu sầu càng sầu thêm"
 
Upvote 0
Đoạn code mình như này:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheet1.Range("O2") = Format(Now + 0.05, "hh:mm")
tinhtoandao
Sheet2.Range("C1") = Sheet1.Range("B2")
Sheet2.Range("C2") = Sheet1.Range("P23") & " mm"
Sheet2.Range("C3") = Sheet1.Range("P24") & " mm"
moview
Sheet1.CommandButton3.Enabled = True
CommandButton3_Click
Application.ScreenUpdating = True
auto_run
End Sub


Trong đó mục tính toán dao thì mình lấy ở module lên,

Nếu tinhtoandao mà phát hiện lỗi thì mình đã exit sub.
Nhưng đoạn code sau nó vẫn tiếp tục chạy và báo lỗi

Mình chưa thử end. cũng không hiểu cú pháp. Chẳng lẽ là end sub :(
 
Upvote 0
Nhìn cái avatar của kiều mạnh tự nhiên thấy tỉnh cả mệt :") hê hê
 
Upvote 0
1/Ý kiến anh Bình có lẽ anh nhầm là dừng sub đang sử lý lệnh chứ không phải là code gọi sub đang sử lý lệnh.
2/Ý kiến dhn46: Phải thật chắc chắn trong việc sử dụng lệnh End. Nó sẽ khai tử tất cả các Code VBA đang chạy chứ không riêng 2 cái Sub của bạn. Ví dụ: Sub Main() được gọi bởi 1 nút trên form nào đó, nếu dùng lệnh End thì ngoài việc dừng máy cái Sub của bạn nó còn đóng luôn cả Form của người ta.
3/Với trường hợp như thế này nên chủ động kiểm tra dữ liệu yêu cầu rồi sử lý. Vì Topic không có ví dụ nên tôi ví dụ như sau:
Tại Sheet1,kể từ dòng đầu tiên nếu sẽ cộng dồn dữ liệu các ô trên cột A. Nếu gặp ô trống thì dùng lại và thông báo dòng bị trống và tổng đã cộng được.
Với cách viết Sub tương tụ của bạn mình tham gia nên sử lý như sau

Mã:
Option Explicit
'----------------------------------------------
Sub Main()
Dim iR As Integer, Tong As Long, Ktra As Boolean
Ktra = True
Do While Ktra
iR = iR + 1
Tinh Tong, Ktra, Sheet1.Cells(iR, 1)
Loop
MsgBox "Dung tai dong : " & iR & " .Tong da cong: " & Tong

End Sub

'-------------------------------------------------------

Sub Tinh(ByRef Tong, Ktra, Valu)
If Valu = "" Then
Ktra = False
Exit Sub
Else
Tong = Tong + Valu
End If
End Sub
 
Upvote 0
Đoạn code mình như này:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheet1.Range("O2") = Format(Now + 0.05, "hh:mm")
tinhtoandao
Sheet2.Range("C1") = Sheet1.Range("B2")
Sheet2.Range("C2") = Sheet1.Range("P23") & " mm"
Sheet2.Range("C3") = Sheet1.Range("P24") & " mm"
moview
Sheet1.CommandButton3.Enabled = True
CommandButton3_Click
Application.ScreenUpdating = True
auto_run
End Sub


Trong đó mục tính toán dao thì mình lấy ở module lên,

Nếu tinhtoandao mà phát hiện lỗi thì mình đã exit sub.
Nhưng đoạn code sau nó vẫn tiếp tục chạy và báo lỗi

Mình chưa thử end. cũng không hiểu cú pháp. Chẳng lẽ là end sub :(

Với đoạn Code này thì ban nên làm như sau:
Thêm 1 biến toàn cục OK dạng Boolean làm căn cứ điều khiển, trước lệnh Exit Sub trong Code Tinhtoandao bạn thêm lệnh OK=False. Sau lệnh Tinhtoandao bạn thêm lệnh If not OK then exit sub
Chi tiết:
Mã:
[B][COLOR=#ff0000]Public OK As Boolean[/COLOR][/B]
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
[B][COLOR=#ff0000]OK=True[/COLOR][/B]
Sheet1.Range("O2") = Format(Now + 0.05, "hh:mm")
tinhtoandao
[B][COLOR=#ff0000]If not OK then Exit Sub[/COLOR][/B]
Sheet2.Range("C1") = Sheet1.Range("B2")
Sheet2.Range("C2") = Sheet1.Range("P23") & " mm"
Sheet2.Range("C3") = Sheet1.Range("P24") & " mm"
moview
Sheet1.CommandButton3.Enabled = True
CommandButton3_Click
Application.ScreenUpdating = True
auto_run
End Sub

'--------------------------------------------------
Sub tinhtoandao()
---------------------
[B][COLOR=#ff0000]OK=False[/COLOR][/B]
Exit Sub
---------------------
End Sub
 
Upvote 0
Cảm ơn Mr. SEALAND nhé, mình sẽ test luôn.
 
Upvote 0
Web KT

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

Back
Top Bottom