Am 07. Januar fragte ich schon mal
>>Ich habe folgendes Problem
>>Ein Excel -Makro wird aus einer Tabelle heraus über einen
>>Command-Button gestartet
>>Dieses Makro soll nun quasi in einer Endlos-Schleife solange arbeiten,
>>bis es mittels eines anderen Commandbuttons auf derselben
>>Tabellenseite abgebrochen wird.
>>
>>Wie programmiert man sowas am geschicktesten
>>(Excel 97)
und hatte freundlicherweise von Rita Herzog folgende Info bekommen:
>Mit einer Variablen
>Global run As Boolean
>
>Sub Tuwas
> run = True
> Do
> ..
> DoEvents
> Loop While run
>End Sub
>
> Sub Tunixme()
> run = False
> End Sub
Da ich leider erst jetzt (nach Erledigung alle der anderen Probleme ,
die das Projekt verzögert haben) soweit bin, dass ich die Funktion
prüfen kann, stelle ich fest, dass da irgendetwas nicht so läuft wie
ich mir das dachte.
Ich gehe davon aus, dass immer dann wenn im DoEvents-Makro
(das übrigens auch schon über einen CommandButton gestartet worden
war)
das Programm über DoEvents kommt, abgeprüft wird, ob ein Event
vorliegt, (Tastendruck, Mouseclick, Refresh, oder was auch immer).
D.h. sobald ein Mouse-Click erfolgt, wird diese Information in einem
Zwischenbuffer gespeichert und dann ausgewertet, sobald irgendein
Programm über DoEvents läuft.
weshalb DoEvents immer dort (ggf auch mehrfach) im Programmtext stehen
sollte, dass die Intervalle zischen den aufeinenrfolgenden DoEvents
nicht zu lang werden.
(also beispielsweise bei ineinander geschachelten Schleifen in der
innersten).
Kommt das Programm über DoEvents, wird abgeprüft, ob für jeden der
eingetretenen Events auch eine Routine vorliegt,
will heißen
OHNE
Sub Mouseover
EndSub
passiert nichts weiter, wenn nur die Maus bewegt wurde.
Mit
Sub CommandButton5_Click ()
Anweisung 1
Anweisung 2
Anweisung 3
End
wird die Ablaufsteuerung im DoEvents Makro
unterbrochen und an Sub CommandButton5-Click übergeben, das die
Anweisungen 1 bis 3 aus führt
========================================
und kehrt dann zum DoEvents-Makro zurückkehrt und
setzt dort mit der der Ausführung der Programmzeile
hinter DoEvents fort.
========================================
STIMMT DAS??
Dann muesste im Vorschlag von Rita Herzog
die Sub Tunixme eigentlich in einer Sub
CommandButtonX_Click- oder CommandButtonX_MouseDown- Routine stehen,
damit das ganze funzt, oder habe ich da was falsch verstanden?
Oder wie sonst wird das Ereignis MausKlick im Beispiel von Rita
Herzog mit der Sub Tunixme verknüpft.
Dann müsste ich durch Setzen einer Globale Variable in der
SubCommandButton5_Click ()-Routine oder SubCommandButton5_MoueDown
()-Routine sicherstellen,
dass daraufhin das Makro , in dem DoEvents steht,
anschließend auch abgebrochen oder regulaer beendet wird.
Braucht man darüberhinaus wirklich nichts zu tun
wie beispielsweise WithEvents oder Application Events
oder sonst was weiß der Teufel zu vereinbaren ????.
Soweit so gut
Genau das habe ich versucht und dabei folgendes beobachtet:
Während das Makro mit dem DoEvents läuft,
hat der Mauszeiger die Form der Sanduhr (busy)
wechselt aber hin und wieder auf die Form "Pfeil",
solange die Maus auf einem CommandButton positioniert ist
Auf Drücken der Maustaste tut sich aber herzlich wenig
Ich konnte prüfen, dass die Ablaufsteuerung NIEMALS an eine der
CommandButtonX_Click oder CommandButtonX_MouseDown Routinen
übergeben wurde.
Wer kann eine kleines Licht
(kann auch ein Großes sein, nur wage ich nicht darum zu bitten)
in die Dunkelkammer meines kümmerliches Wissen werfen? :-)))
Herzlichen Dank im Voraus
Klaus
(Klaus Kaltenmaier = Realname)
--
Du nix meckern, weil nix Realname in Header von diese Posting
Dies sein Firmenrechner mit viel Users, wo nix kennen haben inddifiduelles Header,
Du verschtehn
Nachdem ich schon mals geschrieben hatte
<fore...@ansyco.info> wrote:
>
>Auf Drücken der Maustaste tut sich aber herzlich wenig
>Ich konnte prüfen, dass die Ablaufsteuerung NIEMALS an eine der
>CommandButtonX_Click oder CommandButtonX_MouseDown Routinen
>übergeben wurde.
wollte ich noch ergänzen,
dass ich den Eindruck habe, als ob es gar keinen Buffer für
Mouse-Clicks gäbe, d.h. man klickt und gar nichts passiert, obwohl das
Programm mittlerweile bestimmt schon mal über DoEvents marschierte.
und ein anderes mal trifft man dann den richtigen Zeitpunkt und der
Abbruch erfolgt sofort.
> > Do
> > ..
> > DoEvents
> > Loop While run
> >End Sub
doEvents hat VIEL zu tun, gib ihm etwas mehr ZEIT zur Reaktion probiere
> > Do
> > ..
for i=1 to 100
> > DoEvents
next i
On Wed, 23 Jan 2002 16:52:50 +0100, "Wolf.W.Radzinski"
<Wolf.W.R...@onlinehome.de>
ergänzte das Makro von Rita Herzog an manchen Stellen:
(sorry aber wie ich anders das Newsgoup-korrekt quoten soll,
weiß ich nun wirklich nicht :-)))
>doEvents hat VIEL zu tun, gib ihm etwas mehr ZEIT zur Reaktion probiere
>
>for i=1 to 100
>
>> > DoEvents
>
>next i
>
>> > Loop While run
>> >End Sub
Sorry, das hat die Sache nicht besser gemacht
schlimm ist nur:
wenn ich allzuhäufig die Maustaste klicke, hängt sich Excel auf.
Gruß Klaus