Hallo,
Ich rechne oefter manche Excel blaetter mit Varianten, und manchmal dauert das VBA zu lange, entweder ich machte einige Fehler in der Programmierung oder ich habe eine neue Idee und will das Programm unterbrechen. Wie geht das? Mausklick oder escape funktioniert nicht. Einst las ich irgendwo ueber ein „OnEvent“ command, d.h.ein Mausklick im spreadsheet und excel gets halted, aber kann mich nicht naeheres erinnern und weiss nicht mehr wie das geht. Bitte um Hilfe.
Danke, CD
Ich rechne oefter manche Excel blaetter mit Varianten, und
manchmal dauert das VBA zu lange, entweder ich machte einige
Fehler in der Programmierung oder ich habe eine neue Idee und
will das Programm unterbrechen. Wie geht das? Mausklick oder
escape funktioniert nicht. Einst las ich irgendwo ueber ein
„OnEvent“ command, d.h.ein Mausklick im spreadsheet und excel
gets halted, aber kann mich nicht naeheres erinnern und weiss
nicht mehr wie das geht. Bitte um Hilfe.
Hallo Cyber,
normal sollte ESC gehen, das machte ea ber nicht iommer k.A.
Ich breche immer ab mit Strg+Pause.
Gelegentlich mehrmals schnell nacheinander probieren.
Es gibt einen Codeberfehl mit dem kann man speziell nur die ESC-Taste aktivieren/deaktivieren, leider weiß ich den grad nicht
Ich glaub ESCAPE kam im Namen vor, bin aber nicht sicher.
Bei manchen Codes nutzt das aber alles nix, da ist Vba so beschäftigt man kommt damit nicht zum Stoppen.
Vielleicht hilft da der Einbau an kritischen Codestellen von DoEvents.
Oder/und, im Code an den Stellen etwas einbauen was prüft ob gerade eine bestimmte Taste gedrückt ist, dann kannste dir aussuchen welche Taste bei dem Code abbricht.
Vielleicht geht das mit OnKey, weiß grad nicht.
Probiere erstmal Strg+Pause und DoEvents.
Wenn das nicht hilft, meld dich nochmal hier, dann schau ich mal wie das ging mit Onkey oder was das genau war.
Gruß
Reinhard
Hi,
Strg & Pause
Gruß Rainer
Hallo Reinhard,
Bei manchen Codes nutzt das aber alles nix, da ist Vba so
beschäftigt man kommt damit nicht zum Stoppen.
hab’ ich gerade mal getestet …
Option Explicit
Private Sub CommandButton1\_Click()
Dim tm As Double
tm = Timer + 20
While tm \> Timer
Wend
End Sub
… lässt sich mit Strg & Pause unetrbrechen.
Gruß Rainer
Moin, Rainer,
Strg & Pause
nur gut, dass mein Schreibtisch bissfeste Kanten hat - seit 10 Jahren fluche ich immer wieder mal, weil ich zum Taskmanager greife (und somit meine Änderungen im Orkus verschwinden) ((
Besternten Dank & Gruß
Private Sub CommandButton1_Click()
Dim tm As Double
tm = Timer + 20
While tm > Timer
Wend
End Sub
… lässt sich mit Strg & Pause unetrbrechen.
Hallo Rainer,
ja, ich benutze es ja immer, auch wenn nachher behauptet wird Strg+Pause klappt IMMER, das stimmt so einfach nicht.
Oftmals ja, manchmal aber auch nein.
Und das nicht nur bei/innerhalb eines Einzelbefahls wie z.B. sort, der wenn er da mehrere Sortierkriterien hat, der Himmel weiß wieviele es da in Excel2007 gibt, naja, müßt ja nur nachschauen
und er sortiert da 1 Mio Zeilen und 16xxx Spalten, wenn man sowas abbrechen will wired das nicht gehen *denk*
Was ich aber meine sind durchaus Mehrere Befehle die in einer Schleife permanent nacheinander angearbeitet werden, da klappt Strg+Pause halt manchmal nicht.
In der nachfolgenden Antwort aus dem Internet sieht man den Escape-Befehl, den ich gemeint hatte mit seinen drei möglichen Argumenten.
Unbedingt die Hilfe zu Enablecancelkey durchlesen!
Ich hab geschaut, in VB5.0 gibt es Enablecancelkey nicht, was bietet denn VB um Code zu beenden.
Ohne jetzt VB oder Excel abzuschießen
Gruß
Reinhard
Ein Hansueli schrieb das Nachfolgende:
Ich glaube nicht, dass Dein Problem an der Citrix-Umgebung liegt. Ich
hab das jedensfalls getestet und festgestellt:
a) ESC funktioniert, aber nicht immer auf Anhieb. Es scheint, als ob
Citrix einiges an ESC „verschluckt“.
b) Ctrl-Break (dt. Strg-Pause ?) funktionier immer und effektiver.
c) Es gibt die Möglichkeit per VBA das Verhalten zu beieinflussen,
allerdings nicht das von Citrix
c1) Application.EnableCancelKey = xlDisabled (ESC oder Ctrl-Break
NICHT MÖGLICH)
c2) Application.EnableCancelKey = xlInterrupt (ESC oder Ctrl-Break
ERLAUBT)
c3) Application.EnableCancelKey = xlErrorHandler (ESC oder Ctrl-Break
verzweigen in Errot-Handler der Routine)
Strg & Pause
nur gut, dass mein Schreibtisch bissfeste Kanten hat - seit
10 Jahren fluche ich immer wieder mal, weil ich zum
Taskmanager greife (und somit meine Änderungen im Orkus
verschwinden) ((
*Menno* Ralf,
hättste doch mal in den 10 Jahren einfach hier gefragt.
Gruß
Reinhard
Hallo Reinhard,
ja, ich benutze es ja immer, auch wenn nachher behauptet wird
Strg+Pause klappt IMMER, das stimmt so einfach nicht.Oftmals ja, manchmal aber auch nein.
Und das nicht nur bei/innerhalb eines Einzelbefahls wie z.B.
sort, der wenn er da mehrere Sortierkriterien hat, der Himmel
weiß wieviele es da in Excel2007 gibt, naja, müßt ja nur
nachschauenund er sortiert da 1 Mio Zeilen und 16xxx Spalten, wenn man
sowas abbrechen will wired das nicht gehen *denk*
da kannst Du Recht haben, das ist dann ja kein VB-Code.
Wenn ich VB6 in der IDE unterbrechen will und der Code arbeitet einfach nur VB-Befehle ab, kann ich immer unterbrechen. Da ist kein DoEvents nötig. Unterbrechen klappt nur nicht, wenn VB an eine DLL abgibt, z.B.: Bei ServerConnect (FTP) Wenn VB da versucht den Server zu erreichen und hängt dabei, dann geht Strg & Pause nicht.
In Deinem Beispiel wird an Excel abgegeben, dann kann während des Sortierens, das man nicht selbst programmiert hat, Strg & Pause auch mal versagen. Das weiß ich aber nicht.
Was ich aber meine sind durchaus Mehrere Befehle die in einer
Schleife permanent nacheinander angearbeitet werden, da klappt
Strg+Pause halt manchmal nicht.
Wenn das wirklich nur VB-Befehle sind, dann klappt das Unterbrechen. Nur wenn VB arbeiten lässt und auch nur wartet, klappt die Unterbrechung in dieser Zeit nicht.
In der nachfolgenden Antwort aus dem Internet sieht man den
Escape-Befehl, den ich gemeint hatte mit seinen drei möglichen
Argumenten.Unbedingt die Hilfe zu Enablecancelkey durchlesen!
Hab’ ich mir angesehen.
Ich hab geschaut, in VB5.0 gibt es Enablecancelkey nicht, was
bietet denn VB um Code zu beenden.
In der IDE Strg & Pause.
Wenn Du ein kompiliertes Programm in VB5/6 abbrechen möchtest, musst Du das selbst programmieren.
Aber Excel Code läuft ja praktisch immer in der Entwicklungsumgebung, deshalb lässt er sich so schön leicht unterbrechen.
Gruß Rainer
Hallo Reinhard,
normal sollte ESC gehen, das machte ea ber nicht iommer k.A.
Ich breche immer ab mit Strg+Pause.
Funktioniert bei mir auch (fast) immer.
Es gibt einen Codeberfehl mit dem kann man speziell nur die
ESC-Taste aktivieren/deaktivieren, leider weiß ich den grad
nicht
Bei mir - Visual Basic 6.5 in Office 2003 - geht das mit
Application.OnKey "{ESC}", "Makroname"
Ausgeschaltet wird’s dann wieder mit
Application.OnKey "{ESC}"
Meinst Du das?
Gruss
Laika
Hallo Laika,
normal sollte ESC gehen, das machte ea ber nicht iommer k.A.
Ich breche immer ab mit Strg+Pause.Funktioniert bei mir auch (fast) immer.
ja, dann kenne wir beide Strg+Pause, Ralf und der Anfrager scheints nicht, insoweit ist die Anfrage gelöst zu 98%
Denn manchmal geht kein Abbrechen egal Esc Strg+Pause. Davon schrieb ich.
Es gibt einen Codeberfehl mit dem kann man speziell nur die
ESC-Taste aktivieren/deaktivieren, leider weiß ich den grad
nichtBei mir - Visual Basic 6.5 in Office 2003 - geht das mit
Application.OnKey „{ESC}“, „Makroname“
Ausgeschaltet wird’s
dann wieder mitApplication.OnKey „{ESC}“
Meinst Du das?
Leider nein. Damit weist du der Esc-Taste ein makro zu, das wird aber nie gestartet weil das grad laufende Makro so mit/in sich beschäftigt ist, oder so, kenn mich da auch nicht so aus, jedenfalls auf Esc wird dann sowieso nicht reagiert, also auch nicht das der Esc-Taste zugewiesene Makro ausgeführt.
Gruß
Reinhard
Ich danke euch allen fuer die Antworten, ctrl+pause arbeitet super und somit ist mein Problem geloest. Trotzdem wuerde ich gerne wissen, ob es ein VBA Befehl gibt, welches ich mich als „OnEvent“ oder aehnliches erinnere. Charakteristisch bei diesem Kommand war, waerend excel versucht die richtigen Varianten zu finden, ich kann zwischen den Blaettern wechseln und so den Verlauf beobachten. Bei zwei clicken, wird das Programm unterbrochen und gefragt ob ich es beenden will. Es kann aber auch sein, das alles ist ein Hirngespinst von mir und mein Gedaechtnis teuscht mich.
Grüezi ‚Sternenstaub‘
Trotzdem wuerde ich
gerne wissen, ob es ein VBA Befehl gibt, welches ich mich als
„OnEvent“ oder aehnliches erinnere. Charakteristisch bei
diesem Kommand war, waerend excel versucht die richtigen
Varianten zu finden, ich kann zwischen den Blaettern wechseln
und so den Verlauf beobachten.
Reinhard hat das in einem der Beiträge hier schon genannt:
DoEvents
Die Online-Hilfe sagt dazu:
Übergibt die Steuerung an das Betriebssystem, damit es andere Ereignisse verarbeiten kann.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Hallo,
„DOEvents“, aha. Obwohl ich den Beitrag von Reinhard mehrmals gelesen habe, das ist mir dummerweise entgangen. Danke an euch allen.
Gruss, CD
DoEvents
Die Online-Hilfe sagt dazu:
Übergibt die Steuerung an das Betriebssystem, damit es andere
Ereignisse verarbeiten kann.
Grüezi Thomas,
ich habe eben spontan beschlossen, ich leg mir einen Ordner an mit Namen Probleme. (Korrektur, habe es grad eben getan)
Ein Unterordner wird heißen: Abbrechen
Ein anderer DoEvents.
Und, oha, da gäbs noch viele Namen Probleme die mir einfallen.
Denn ich würde sehr gerne untermauern mit jeweils einem konkreten Beispiel daß Strg+Pause oder auch das DoEvents nix bringt in dem konkreten Code.
Denn so, auch wenn ich davon ausgehe daß ihr mir glaubt wenn ich was sage habt ihr natürlich nix um zu schauen an was da was liegt.
Gruß
Reinhard
Moin Reinhard,
Denn manchmal geht kein Abbrechen egal Esc Strg+Pause. Davon
schrieb ich.
Strg+Pause hat bei mir immer funktioniert, vielleicht manchmal nicht, habe ich nicht so genau gezählt.
Meinst Du das?
Leider nein. Damit weist du der Esc-Taste ein makro zu, das
wird aber nie gestartet weil das grad laufende Makro so mit/in
sich beschäftigt ist, …
Du hast recht, hatte die ESC-Taste in diesem Zusammenhang bisher noch nicht betrachtet. Eigentlich ist sie ja dafür gedacht: ESCape - „entkomme“ aus dem, wo du gerade bist.
Ich bin nicht sicher, aber ich meine, Strg+Pause funktioniert nicht, wenn VBA in einer Endlos-Schleife läuft - man kann ja mal vergessen, die Schleifen-Abbruchbedingung richtig zu setzen.
Weiterhin funktioniert Strg+Pause nicht, wenn ich eine Prozedur mit
Application.OnTime Now + TimeValue("0:00:01"), "empfangs\_zyklus"
zyklisch laufen lasse. Dann MUSS ich vorher die ESC-Taste scharf machen, sonst geht nix mehr …
Gruss
Laika
Hi,
Ich bin nicht sicher, aber ich meine, Strg+Pause funktioniert
nicht, wenn VBA in einer Endlos-Schleife läuft - man kann ja
mal vergessen, die Schleifen-Abbruchbedingung richtig zu
setzen.
genau das habe ich getestet.
Option Explicit
Private Sub CommandButton1\_Click()
Dim tm As Double
tm = Timer + 20
While tm \> Timer
Wend
End Sub
in der While - Wend Schleife ist kein DoEvents, das Programm hängt für 20 Sekunden fest. Läuft der Code in VB6 meldet der Taskmanager ‚Keine Rückmeldung‘ und auch das Fenster lässt sich nicht verschieben. Der Task friert für 20 Sekunden ein.
Strg & Pause funktioniert aber.
Gruß Rainer
Tach,
in der While - Wend Schleife ist kein DoEvents, das Programm
hängt für 20 Sekunden fest.
Das habe ich noch nicht getestet. Irgendwo habe ich aber gelesen, dass „DoEvents“ schon lange nicht mehr erforderlich ist.
Laika
Hallo,
Irgendwo habe ich aber gelesen, dass „DoEvents“ schon lange
nicht mehr erforderlich ist.
das wird schon noch gebraucht, es kommt nur darauf an wofür.
Wenn Du eine sehr lange Berechnung hast und in der Zwischenzeit ein Timer seine Arbeit verrichten soll, muss in die Rechenschleife ein DoEvents, sonst wird der Timer nicht ausgelöst … Nur mal als ein Beispiel.
Gruß Rainer
Hallo Rainer,
Hallo,
Irgendwo habe ich aber gelesen, dass „DoEvents“ schon lange
nicht mehr erforderlich ist.das wird schon noch gebraucht, es kommt nur darauf an wofür.
Wenn Du eine sehr lange Berechnung hast und in der
Zwischenzeit ein Timer seine Arbeit verrichten soll, muss in
die Rechenschleife ein DoEvents, sonst wird der Timer nicht
ausgelöst … Nur mal als ein Beispiel.
Und genau das ist der Grund, weswegen man solche Aktionen in Threads legen sollte. Denn genau dann bleibt die GUI aktiv und kann auf Benutzereingaben agieren
Gruß Rainer
MfG Alex