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
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das Formular angezeigt wird mit
vbModal
wird der code Ausführung unterbrechen, und warten Sie für Benutzer-Interaktion mit dem Formular. Zum Beispiel klicken auf eine Schaltfläche oder mit einem dropdown.Wenn Sie aktualisieren Sie die Formular-Eigenschaft
und entfernen
vbModal
aus dem code. Dies wird die Ausführung von code ermöglichen, um fortzufahren, wenn das Formular angezeigt wird.sub
hat weiter ausgeführt, aber absolut keine Komponenten gerendert werden, nicht einfach selbst ein label.War ich auf der Suche nach einer Antwort, warum ich immer die folgende Fehlermeldung:
beim ausführen dieser Zeile code:
obwohl diese Zeile funktioniert:
Natürlich. Wahr ist nicht das gleiche wie vbModal! So ist die einfache Antwort ist, um die richtige Aufzählungen:
Ich denke, ich habe dies aus.
Nach
Me.Show
das Ereignis UserForm_Activate feuert. Wenn es keinen code in der UserForm_Activate-Prozedur wird nichts passieren, da VBA wartetMe.Hide
.Also die Reihenfolge der Ereignisse ist:
Me.Show
>UserForm_Activate
>Me.Hide
Jeder code, den ich ausführen will, muss in der UserForm_Activate-Prozedur und muss vor
Me.Hide
.Die Struktur ist sehr streng, aber ich mag in der Lage sein zu verwenden, die Struktur zu meinem Vorteil zu nutzen.
userform.show vbModeless
.Ich denke, dass ich es herausgefunden
Versuchen Sie diesen einfachen Schritt
In bilden Sie einen Rechtsklick auf die bank Teil und klicken Sie auf Eigenschaften
Ändern Sie die "ShowModal" auf False
oder im VBA-code beim anzeigen der userform mit dem folgenden code:
UserForm1.Zeigen False
Ich weiß wirklich nicht, was Los ist in deinem Geist, denn es gibt eine Vielzahl von code für das, was Ihre Fragen sind, aber ich hoffe, dass dies helfen kann,
Private Sub cmdSwitch_Click()
UserForm1.Ausblenden
UserForm2.Zeigen
End Sub