Warum Zeigt eine UserForm als Modal Stop-Code Ausführung?

Den folgenden VBA-code Stoppt bei Me.Show. Aus meinen tests, es scheint, dass Me.Show Stoppt die Ausführung von code, auch wenn der code innerhalb der UserForm.

Dieser Teil ist außerhalb der UserForm:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    objProgress.ShowProgress
    Unload objProgress
End Sub

Dieser Teil ist innerhalb der UserForm:

Private Sub ShowProgress()
    Me.Show vbModal
    Dim intSecond As Integer
    For intSecond = 1 To 5
        Application.Wait Now + TimeValue("0:00:01")
        Me.ProgressBar1.Value = intSecond / 5 * 100
    Next intSecond
    Me.Hide
End Sub

Stoppt der code bei Me.Show, nachdem die UserForm angezeigt wird. Es gibt keine Fehler, nur es Stoppt die Ausführung von code. Es scheint, dass der einzige Weg, um die Ausführung von code innerhalb einer modalen UserForm in VBA ist es in der UserForm_Activate-Prozedur wie diese:

Dieser Teil ist außerhalb der UserForm:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    Load objProgress
    Unload objProgress
End Sub

Dieser Teil ist innerhalb der UserForm:

Private Sub UserForm_Initialize()
    Me.Show vbModal
End Sub

Private Sub UserForm_Activate()
    Dim intSecond As Integer
    For intSecond = 1 To 5
        Application.Wait Now + TimeValue("0:00:01")
        Me.ProgressBar1.Value = intSecond / 5 * 100
    Next intSecond
    Me.Hide
End Sub

Natürlich, ich kann nicht Me.Show innen UserForm_Activate denn das Verfahren wird nur ausgelöst, nachdem die UserForm Anzeigen, Ereignis.

In der Dokumentation für UserForm.ShowModal sagt ", Wenn eine UserForm modal ist, muss der Benutzer Informationen liefern oder die UserForm zu schließen, bevor Sie mit irgendeinem anderen Teil der Anwendung. Kein nachfolgender code ausgeführt, bis das UserForm ausgeblendet oder entladen wird."

Ich bin versucht, einen modal UseForm wie ein Fortschrittsbalken, um zu verhindern, dass der Nutzer die Interaktion mit der Anwendung, während ein Prozess ausgeführt wird. Aber dies wird schwierig sein, zu erreichen, wenn alle meine code im UserForm_Activate-Prozedur.

Bin ich hier etwas fehlt? Warum nicht alle code-Ausführung stoppen Sie am Me.Show?

InformationsquelleAutor Kuyenda | 2009-11-23
Schreibe einen Kommentar