Nội dung:
Đã bao giờ bạn muốn dừng chương trình giữa chừng chưa?
Có rất nhiều trường hợp chúng ta muốn dừng chương trình giữa chừng. Chẳng hạn như chúng ta chưa hoàn thiện code, rất có khả năng code này sẽ chạy quá lâu, và trong quá trình test code, chúng ta muốn có một chức năng dừng chương trình giữa chừng.
Code:
Giả thiết trên UserForm tôi có nút bấm 1 làm công việc cộng số từ 1 tới 10000 như sau:
Tôi muốn dừng chương trình giữa chừng, có nghĩa là tôi phải can thiệp vào vòng lặp For Next ở trên:
Vậy phải làm như thế nào? Chúng ta nghĩ tới việc thêm một nút bấm STOP:
Nhưng mà làm như trên không thoát được vòng lặp For Next, giật và lag. Tại vì chúng ta để điều kiện thoát vòng lặp bên trong For Next.
Chúng ta thấy rằng thao tác để ấn vào nút bấm Stop là rất khó khăn.
Trong For Next chúng ta không thể giải phóng CPU, cho nên chúng ta phải sử dụng DoEvents.
Đã bao giờ bạn muốn dừng chương trình giữa chừng chưa?
Có rất nhiều trường hợp chúng ta muốn dừng chương trình giữa chừng. Chẳng hạn như chúng ta chưa hoàn thiện code, rất có khả năng code này sẽ chạy quá lâu, và trong quá trình test code, chúng ta muốn có một chức năng dừng chương trình giữa chừng.
Code:
Giả thiết trên UserForm tôi có nút bấm 1 làm công việc cộng số từ 1 tới 10000 như sau:
Mã:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 10000
Range("A1") = Range("A1") + 1
Next i
End Sub
Mã:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 10000
Range("A1") = Range("A1") + 1
If "Nếu ấn Stop thì dừng" Then
For..Next Thoát vòng lặp
End If
Next i
End Sub
Mã:
Dim StopFlag As Boolean
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 10000
Range("A1") = Range("A1") + 1
If StopFlag = True Then
If MsgBox("Ban muon stop chuong trinh?", vbQuestion + vbYesNo) = vbYes Then
Exit For
Else
StopFlag = False
End If
End If
Next i
End Sub
'Nut bam STOP
Private Sub CommandButton2_Click()
StopFlag = True
End Sub
Chúng ta thấy rằng thao tác để ấn vào nút bấm Stop là rất khó khăn.
Trong For Next chúng ta không thể giải phóng CPU, cho nên chúng ta phải sử dụng DoEvents.
Mã:
Dim StopFlag As Boolean
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 10000
Range("A1") = Range("A1") + 1
DoEvents
If StopFlag = True Then
If MsgBox("ban muon dung chuong trinh?", vbQuestion + vbYesNo) = vbYes Then
Exit For
Else
StopFlag = False
End If
End If
Next i
End Sub
Private Sub CommandButton2_Click()
StopFlag = True
End Sub
Bạn cần đăng nhập để thấy đa phương tiện
Nguồn tham khảo:
Bạn cần đăng nhập để thấy link