Excel VBA - Makro soll warten, ohne den Nutzer zu behindern

Hallo liebe Gemeinde,

ich habe ein Makro erstellt, welches nach Eingabe von Daten an bestimmter Stelle, automatisch die Ergebnisse in die Zwischenablage kopiert, damit diese im anderen Programm vom Benutzer weiter verarbeitet werden. Zusätzlich hat das Blatt eine Schaltfläche, nach dessen Klick das Blatt an den entsprechenden Stellen wieder leer ist. Dies sind also 2 Subs. Nun hatte ich gedacht, da dies immer wieder gemacht werden muss, wenn der Benutzer neue Daten einfügen will, dass ich die/das 2. sub aus der ersten aufrufe, mit einer Zeitverzögerung von 10 Sekunden.
Verwendet habe ich dafür
Application.Wait (Now + TimeValue(„0:00:10“))
Das funktioniert so an sich, allerdings ist in der Wartezeit Excel blockiert mit der „Sanduhr“, so dass der Benutzer nicht noch was an dem Blatt machen kann.

Gibt es eine Möglichkeit, eine Routine im Hintergrund ablaufen zu lassen, so dass nach dem 1. Event, der das Kopieren in die Zwischenablage ausführt, Excel 10 Sekunden wartet und dann das Blatt löscht, der Benutzer aber noch die Gelegenheit hat was zu korrigieren?

Vielen Dank für eure Hilfe
FrankFurter

Ich kann zwar die Frage nicht beantworten, fände das aber generell ungünstig.
Die Zeitmessung müsste ja nach der letzten Eingabe (neu) starten. Man gibt also Daten ein, schaut sie sich nochmal an, und wenn das länger als zehn Sekunden dauert, ist alles wieder weg?
Dann doch lieber eine Schaltfläche (oder Tastenkombination) zum Leeren der Zellen. Der Mehraufwand für den Benutzer dürfte doch gegenüber der Dateneingabe vernachlässigbar sein, oder?

Gruß,

Kannitverstan

1 Like

Hallo,

dies war natürlich nur die Kurzversion. Die Langversion ist, der Benutzer kann an zwei Stellen Daten eingeben (a/b) und an drei Stellen Ergebnisse kopieren (a1/a2 /b1). a1 und b1 bekommt er automatisch in die Zwischenlage kopiert, je nachdem ob er in a und b was eingibt. Nun kann aber gelegentlich auch vorkommen, dass er nicht a1 sondern a2 kopieren muss. Daher gibt es schon eine Schaltfläche a2 kopieren und eine Schaltfläche Blatt leeren. Er arbeitet dann mit den Daten in SAP weiter und beim nächsten Beleg muss er wieder Daten eintragen. Also das Blatt löschen und neue Daten rein.
Daher braucht der Benutzer 10 (real werden es eher 30 oder so) Sekunden, um nach Eingabe von A unter Umständen nicht die automatischen a1 Werte sondern manuell die a2 Werte zu kopieren) und während er dann in SAP die Werte einpflegt und den nächsten Beleg bearbeitet , soll das Blatt wieder leer werden (ja sicher ist das nur ein Klick, aber wofür gibts denn Makros, wenn man nicht alles was geht automatisieren kann :wink: ).
Und das mit der Zeitmessung ist kein Problem, weil halt nach „Enter“ in einen bestimmten Feld, dass aufjedenfall (zuletzt) befüllt wird das Kopieren erst gestartet wird. Es werden also nicht noch Daten eingegeben oder vielleicht korrigiert, sondern mit dem automatischen Kopieren der berechneten Daten ist das auch abgeschlossen.

Danke FrankFurter

Schon mal überlegt, was passiert, wenn die Daten nochmal korrigiert werden sollen?

Das erinnert mich an die Anektode aus der chinesischen Qualitätssicherung in einem Werk, das keinen Ausschuss produzierte: Der Mitarbeiter hatte automatische Messprotokolle, und er hatte manuell ausgefüllte.
Auf die Frage, was denn die manuellen zu bedeuten hätten, sagte er stolz: „Das machen wir, wenn die Werte nicht im gewünschten Bereich sind“.
Aber das nur nebenbei :wink:

Also wenn schon automatisieren, dann würd ich mal recherchieren, welche Möglichkeiten es gibt, Excel und SAP über irgendwelche Add-Ons zu verbinden.
Es könnte dann zwei Buttons „in SAP übernehmen“ geben, einen hinter a1, einen hinter a2. b1 wäre immer mit dabei.
Danach könnten die Werte automatisch gelöscht werden. So hätte man vor dem Klick genügend Zeit, das Ganze nochmal zu kontrollieren, und es gäbe weniger Möglichkeiten, Fehler zu machen.

Aber wenn du die Zeitgeschichte immer noch besser findest: Schau dir mal die hier https://www.online-excel.de/excel/singsel_vba.php?f=133 beschriebene Funktion Application.OnTime an.

Gruß,

Kannitverstan

1 Like

Hallo Kannitverstan,

vielen Dank, das ist die Lösung und funktioniert so, wie es soll.
@anderen Vielen Dank für eure Anregungen, aber es geht hier wirklich nur um einen einfachen Saldenrechner, man kopiert die Spalte mit den Beträgen (keine Fehlerquelle), dann tippt man den Saldo ein (klar, könnte man sich da vertippen) und drückt Enter, dann laufen die Subs, also nicht so viele Was wäre Wenn Phantasien ausleben :wink:

Danke FrankFurter

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Nachrichten mehr erlaubt.