PDA

Vollständige Version anzeigen : vbModeless und vbModal


Reta
02.07.2015, 08:07
Hallo liebe Forum-Nutzer,

ich hätte eine Frage zur Anzeige von UserForms.

Ich habe einen Prozess, bei dem mehrere Tabellen erstellt werden. Eine dieser Tabellen soll während des Prozesses geändert werden können und die neuen Einträge werden dann weiter verwendet. Dazu muss der Prozess an dieser Stelle gestoppt werden.

Ist es nun möglich einen Prozess anzuhalten, so lange bis der Nutzer einen CommandButton klickt und dennoch die Tabellen die erstellt wurden zu verändern?
Ich habe den Befehl vbModal gefunden, um den Prozess anzuhalten, das klappt auch. Aber dann kann ich nichts mehr an meinen Tabellen verändern.
Mit vbModeless kann ich zwar was an den Tabellen ändern, aber der Prozess läuft einfach weiter.

Kann mir jemand helfen??

Vielen Dank und einen schönen Tag :sun: :sun:

Reta
02.07.2015, 08:10
Kleiner Zusatz:

Ich habe schon probiert beide anzugeben, aber dann kommen immer Fehlermeldungen... Geht das überhaupt, beide anzugeben? Wenn ja, wie?

Habe es bspw. so probiert:

UserForm.Show .vbModeless, .vbModal

Klappt nicht....

haklesoft
02.07.2015, 09:40
Hallo,

ein möglicher Ablauf könnte so aussehen:
Du teilst Deinen "Prozess" in zwei Prozesse auf.
Der erste Prozess macht die notwendigen Vorarbeiten und ruft dann UserForm.Show vbModeless.
Der zweite Prozess erledigt alle Arbeiten, die erst nach dem Schließen der UserForm gemacht werden sollen.
Den Aufruf des zweiten Prozesses hängst Du im Code des OK-Buttons oder im QueryClose-Event der UF ein.

Reta
02.07.2015, 09:46
Hi,

danke für den Tipp!!

Dann müsste ich aber alle Variablen als globale Variablen definieren, wenn ich diese in beiden Prozessen verwenden will, oder??

haklesoft
02.07.2015, 09:59
Eine Variable im Form einer Collection wäre durchaus geeignet, sämtliche relevanten Variablen aufzunehmen.

Noch eine andere Möglichkeit, den "Prozess" anzuhalten ohne dass Du mit den Variablen rumjonglieren musst:

In die UserForm hängst Du Code wie diesen ein:Option Explicit
Dim bWeiter As Boolean

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
bWeiter = True
End Sub

Public Function getWeiter() As Boolean
Me.Show vbModeless
Do While bWeiter <> True
DoEvents
Loop
getWeiter = True
End Function
Und Deinen Prozess gestaltest Du etwa so:Option Explicit

Public Sub meinProzess()
Dim bErg As Boolean
'mache Vorarbeiten

'jetzt auf die Rückkehr aus der UF warten
bErg = ufProzessablauf.getWeiter

'Prozess fortsetzen
MsgBox "weiter gehts im Prozessablauf!"
End Sub

Reta
02.07.2015, 11:30
Eine Frage dazu: Was ist ufProzessablauf??

haklesoft
02.07.2015, 12:50
Der freigewählte Name meiner UserForm. Benenne sie wie Du willst.

Reta
02.07.2015, 13:09
Ah alles klar. Ich probiers mal aus!
Dankeschön!