2014-01-27 19 views
1

我創建了一個工作在application.wait之外的狀態欄。從某種意義上說,這很有效。但是,我希望能夠在處理其他工作表時更新狀態欄。我無法找到合適的方法。以下是我到目前爲止。更好的方式來延遲除Application.Wait或Application.Sleep以外的宏?

Private i As Integer 
Private newHour 
Private newMinute 
Private newSecond 
Private waitTime 

Private Sub UserForm_Activate() 
For i = 1 To 10 
    UserForm1.Label1.Width = UserForm1.Label1.Width + 24 
    Application.Calculate 
    If Application.CalculationState = xlDone Then 
     newHour = Hour(Now()) 
     newMinute = Minute(Now()) 
     newSecond = Second(Now()) + 1 
     waitTime = TimeSerial(newHour, newMinute, newSecond) 
     Application.Wait waitTime 
    End If 
Next 
UserForm1.Hide 
End Sub 

注:對於一些奇怪的原因,我能得到的標籤不斷更新的唯一方法是使用Application.Calculate。否則,它會等待整整10秒,然後在隱藏用戶表單之前狀態欄會達到最大擴展。

回答

1

使用此延時功能,而不是Application.Wait

Private Sub delay(seconds As Long) 
    Dim endTime As Date 
    endTime = DateAdd("s", seconds, Now()) 
    Do While Now() < endTime 
     DoEvents 
    Loop 
End Sub