2012-03-06 2 views
6

Tôi có một Do .. Trong khi vòng lặp trong đó hai Vòng lặp .. được lồng nhau; vòng lặp For for .. đầu tiên đếm từ 1 đến X, vòng lặp thứ hai đếm ngược từ X thành 1. Đây là lần lặp lại quảng cáo vô hạn.VBA Excel: thực thi mã gián đoạn (không phải bằng cách nhấn 'thoát')

Bây giờ, tôi muốn người dùng có thể 'ngắt' vòng lặp vô hạn này và chương trình, khi gián đoạn vòng lặp, thực thi XYZ.

Tôi đã thử sử dụng nút chuyển đổi kết hợp với Do .. Trong khi vòng lặp, nhưng trong khi vòng lặp nói trên đang chạy, không có đầu vào nào được chấp nhận. Trạng thái của nút không thay đổi khi được nhấp nếu mã đang chạy vòng lặp.

Mọi đề xuất đều được đánh giá cao.

Trả lời

10

Điều quan trọng là bao gồm DoEvents trong các vòng lặp. Điều này cho phép Excel xử lý những thứ như nhấp vào nút trong khi chạy mã

Đây là một phác thảo. Gán macro ButtonClick cho nút. Main sẽ chạy không chính xác cho đến khi nút được nhấp.

Option Explicit 
Dim bBreak As Boolean 

Sub ButtonClick() 
    bBreak = True 

End Sub 

Sub Main() 
    Dim X As Long 
    Dim i As Long 
    bBreak = False 

    Do While True 
     X = 1000 
     For i = 1 To X 
      If bBreak Then 
       Exit Do 
      End If 
      DoEvents 
     Next 

     For i = X To 1 Step -1 
      If bBreak Then 
       Exit Do 
      End If 
      DoEvents 
     Next 
    Loop 
    If bBreak Then XYZ 
End Sub 
+0

Cảm ơn Chris, đã hoạt động như một sự quyến rũ! – Pieter