[UserForm]Stop macro from userform-Dừng chương trình giữa chừng

tuhocvba

Administrator
Thành viên BQT
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:
Mã:
Private Sub CommandButton1_Click()
    Dim i As Long
    For i = 1 To 10000
        Range("A1") = Range("A1") + 1
    Next i
End Sub
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:
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
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:
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
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.
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:
 
Top