附加的VBA過程用於進度條用戶窗體。一切正常,除了取消按鈕是間歇性地沒有反應。用戶表單取消按鈕_Intermittently_沒有響應?
我說間歇性地說,因爲95%的時間我必須在程序停止前多次單擊取消按鈕。我可以看到按鈕點擊事件是動畫的,但程序沒有被中斷。它看起來好像在按鈕向下事件發生之前某些東西正在從取消按鈕中竊取焦點。
逃逸和窗口關閉按鈕按照預期一鍵響應。
我需要做些什麼才能使取消按鈕正確響應?謝謝!
更新:我注意到,當我點擊並按住取消按鈕,而不是按鈕保持「向下」時,它會被踢回來。所以顯然有些東西會將按鈕狀態重置爲快,以至於該過程不會捕獲關閉狀態以觸發單擊事件。
下面是用戶窗體模塊(UserForm名)中的代碼:調用UserForm1
Private mbooUserCancel As Boolean
Public Property Get UserCancel() As Boolean
UserCancel = mbooUserCancel
End Property
Private Property Let UserCancel(ByVal booUserCancel As Boolean)
mbooUserCancel = booUserCancel
End Property
Public Sub UpdateProgress(CountTotal As Long, CountProgress As Long)
On Error GoTo Error_Handler
ProgressBar1.Value = CountProgress/CountTotal * 100
DoEvents
Error_Handler:
If Err.Number = 18 Then CommandButton1_Click
End Sub
Private Sub CommandButton1_Click()
Hide
UserCancel = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
CommandButton1_Click
End Sub
Private Sub UserForm_Activate()
With Application
.Interactive = False
.EnableCancelKey = xlErrorHandler
End With
End Sub
Private Sub UserForm_Terminate()
Application.Interactive = True
End Sub
下面是模塊(命名爲模塊)的代碼:
Sub TestProgress()
On Error GoTo Error_Handler
Dim objUserForm As New UserForm1
Dim lngCounter As Long
Dim lngSubCounter As Long
With objUserForm
.Show vbModeless
DoEvents
For lngCounter = 1 To 5
If .UserCancel Then GoTo Exit_Sub
For lngSubCounter = 1 To 100000000
Next lngSubCounter
.UpdateProgress 5, lngCounter
Next lngCounter
Application.Wait Now + TimeValue("0:00:02")
.Hide
End With
Exit_Sub:
If objUserForm.UserCancel Then
MsgBox "User Cancelled from UserForm1"
End If
Exit Sub
Error_Handler:
If Err.Number = 18 Then
Unload objUserForm
MsgBox "User Cancelled from Module1"
End If
End Sub
我更新了模塊中調用UserForm1來測試調用者中的錯誤處理的代碼。進度條應該是可重用的(xlModeless),所以調用過程就是動作發生的地方,並且可能在取消時發生。我認爲發生的事情是在處理調用者中的代碼期間發生了click事件,並且UserForm1沒有拾取click事件。我仍然不知道如何解決這個問題。 – Kuyenda 2010-01-30 22:51:37