Frage von PatrickakaDora, 45

Wie kann ich in VBA das Programm dazu bringen, zu pausieren, bis der Nutzer eine Eingabe gemacht hat?

Hallo liebe Community,

ich habe mal wieder eine Frage zu VBA. Ich möchte jetzt, dass mein Programm, nachdem es eine Prozedur (an deren Ende zwei neue Zellen erzeugt werden) ausgeführt hat, pausiert. Die Pause soll solange sein, bis der Nutzer in diese zwei Zellen Werte eingetragen hat, und dann an der selben Stelle weiterlaufen.

Ich habe mir schon überlegt, das Hauptprogramm in zwei Teile zu trennen und nach dieser Prozedur dann den ersten Teil zu beenden und den zweiten Teil dann mit einem Button oder Enter zu starten. Es muss doch aber eine schönere Alternative dafür geben. Ich bin dankbar für alle Ratschläge. Ich würde dazu mal keine Screenshots vom Code hochladen, da es ja eher eine prinzipielle Fragestellung ist.

Vielen Dank im Voraus.

MfG Patrick.

Antwort
von Garfield0001, 30

Pausieren kannst du den Code nur über einen Timer (oder so) oder indem du eine MsgBox oder InputBox einbaust.
Du musst ansonsten den Code teilen.
Auch Excel - Tabellen haben Ereignisse, die programmiert werden können. Zb das Change-Ereignis. Dort kannst du dann prüfen, ob eben in die gewollten Zellen Werte ein getragen werden und nur dann lässt du den folgenden Code ausführen.
Dh dass das Ereignis zwar bei jeder Veränderung in der Tabelle ausgeführt wird, aber eben nur wenn die Wenn-Bedingung (die du selbst erstellen musst was da kochen konkret erfüllt sein muss) erfüllt ist, läuft dein Code durch

Kommentar von Ninombre ,

Bist Du bei diesem Vorgang auch mit der Userform unterwegs (wg. der anderen Fragen)? Ich würde es dann vermeiden zwischen Userform und Tabellenblatt hin- und herzuwechsel und es durchgängig in der Userform bzw. ergänzt um Inputboxen zu erfassen. Damit kannst Du den Ablauf und Plausibilitäten besser steuern.

Um durch Worksheet_change u.ä. Events den Vorgang fortzusetzen, wirst Du vermutlich globale Variablen brauchen, um zu erkennen, ob der erste Teil des Scrips durchlaufen wurde (d.h. das erste Script setzt einen bestimmten Wert für die public, ggf. muss man dort auch festhalten, welche Zeilen neu eingefügt wurden, um bei einer Änderung gezielt prüfen zu können, ob diese Zeilen bearbeitet wurden)

Antwort
von daCypher, 30

Es gibt die Möglichkeit, dass du ein weiteres Formular als Dialog öffnest, wo dann halt die beiden Werte eingetragen werden können. Der Code vom aufrufenden Formular würde dann so lange stehen bleiben. Allerdings musst du dich dann darum kümmern, dass du irgendwie mit public-Variablen die Daten aus dem Dialogformular ins andere Formular kriegst.

DoCmd.OpenForm "Formularname", WindowMode:=acDialog

Wenn du alles in einem Formular machst, fällt mir keine andere Lösung ein, als das wirklich in zwei getrennten Prozeduren zu machen.

Antwort
von geri3d, 33

Vielleicht jetzt auch nicht das Wahre, wenn du die Werte über Inputboxen abfragst und diese VBA-technisch in die Zellen schreibst, dann kannst du das script weiterlaufen lassen, die Inputbox pausiert automatisch dein script bis zur nächsten Zeile.

Antwort
von Kiboman, 20

ich kenne deine aufbau nicht aber bei einem console.read... Pausiert/wartet ja schon mal der hauptthread

die anderen threads kannst du davor ja schlafen legen und danach fortsetzten, sollte ja nicht das problem sein.

Kommentar von Garfield0001 ,

Wo gibt's in vba das Objekt 'console'?

Kommentar von Kiboman ,

dann eben äquivalent zu c# der funktions umfang ist quasi gleich.

und vom logischem ist es fast egal welche hochsprache es ist

Kommentar von Garfield0001 ,

Aber ein vba gibt's das nicht :)

Kommentar von Kiboman ,

ach Mensch vb vba vb.net da kann man sich ja mal vertun :)

Keine passende Antwort gefunden?

Fragen Sie die Community