Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
264to268
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
264to268
264to268
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Prozessunterbrechung

Prozessunterbrechung
04.06.2003 11:56:02
Peter M
Hallo, wer kann mir bitte helfen?
Auf Knopfdruck lasse ich ein Makro ablaufen,
das in einer Zelle eine Zahl "zeitgesteuert"
hochzählen soll. Die Zeitsteuerung soll über
einen Schieberegler erfolgen.
Mein Problem: Sobald das Makro läuft,
kann ich nicht mehr auf den Schieberegler zuzugreifen.
(Ich komme von Delphi, dort gibt es hierzu die Möglichkeit mit "Application.ProcessMessage" ...)
Im Voraus schon vielen Dank für die Hilfe!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Prozessunterbrechung
04.06.2003 11:57:56
L.Vira

VBA ist nun mal nicht multithreadfähig.

Re: Prozessunterbrechung
04.06.2003 12:04:19
Peter M

Vielen Dank, liebe(r) L.Vira, das hat mir
schon geholfen!

Re: Prozessunterbrechung
04.06.2003 14:08:14
ANdreas

Hallo Peter,

ich weiß zwar nicht was genau Du als Schieberegler verwendest, aber vielleicht funktioniert der Umweg über Application.Ontime. Damit sind allerdings nur Sekundenabstände machbar...

Hier mal der Code (alles in ein Modul):

Ein Aufruf der Sub HochZaehlenStarten starten den ganzen Prozess. Voreingestellt ist eine Sekunde Verzögerung. Jede Sekunde wird nun der Zellwert in A1 um 1 erhöht.
Das ganze wird mit dem Aufruf von HochZaehlenStoppen beendet.
Dein Schieberegler - was auch immer Du dafür verwendest - müßte nun die Funktion ZeitIntervall mit Parameter aufrufen.
So setzt zum Beispiel: ZeitIntervall 10, die Verzögerung auf 10 Sekunden.

Hoffe das hilft weiter,
Andreas

Anzeige
Re: Prozessunterbrechung
04.06.2003 14:14:29
Peter M

Danke Andreas,
ich probier's mal.

Re: Prozessunterbrechung
04.06.2003 14:32:42
Peter M

Prima Andreas - so klappt's!

Unter "Schieberegler" verstehe ich eine
Bildlaufleiste. Deren "Wert" habe ich testweise
in die Zelle 10,1 geschrieben. Und in deiner
function habe ich testweise diesen als Rückgabewert
verwendet:

Public Function ZeitIntervall(Optional intParam%) As Integer
Static intZeit%
If Not intParam = 0 Then intZeit = intParam
'ZeitIntervall = intZeit
ZeitIntervall = Cells(10, 1) '<---- Mein Test
End Function

Also meinen besten Dank!


Re: Prozessunterbrechung
04.06.2003 14:48:12
ANdreas

Hallo Peter,

wenn Du das so machst, funktioniert allerdings die Übergabe des Parameters per Makro (Bei Starten/Stoppen) nicht.
Es wird nun immer der Wert in der Zelle genommen. Aber wenn Du beachtest, das ein Integer Wert drinsteht und du für nen Abbruch ne -1 eintragen musst, läuft alles.

Gruß
Andreas

Anzeige
Re: Prozessunterbrechung
04.06.2003 14:59:14
Peter M

Alles klar! Schon probiert!
Primär war mir das Wichtigste,
dass die Buttons und die
Bildlaufleiste während des Zählvorgangs
(egal wie) ansprechbar sind.
Ich werd nun "weiterforschen", wie
ich einen Millisekunden-Zeitabstand
steuern kann.
Danke nochmal für deine super
Unterstützung!

Re: Prozessunterbrechung
04.06.2003 15:21:08
ANdreas

Hallo,

hab gerade nochmal eine andere Variante relativ erfolgreich getestet. Ist zwar nicht so performant, aber leistet das was Du suchst.

Wenn Du nun z.B. bei den Eigenschaften der Scrollbar (aus Steuerelemt-Toolbox) Min auf 1 und Max auf 1000 stellst, kannst Du damit ein Zeitintervall von 1ms bis hin zu 1000ms abbilden.
Einfach die Sub HochZaehlen aufrufen und es geht los. Am Besten vorher noch ein Button erstellen, der den Abbruch sicherstellt (s. Code)

Viel Spaß,
Andreas
http://www.bei-andi.de/excel

Anzeige
Re: Prozessunterbrechung
04.06.2003 15:31:32
Peter M

Hab's schon ausprobiert!
Funktioniert wunderbar!
Das bringt mich entschieden weiter.
Herzlichen Dank für diese
intensive Hilfe!
Viele Grüße
Peter

Re: Prozessunterbrechung
04.06.2003 15:40:29
ANdreas

Hallo Peter,

hier nochmal eine performantere Version der Sub. Durch die DoEvents, d.h. die Abarbeitung andere Events nebenbei, ist natürlich ein zeitlich absolut exakter Ablauf unmöglich. Geht es aber nur um den optischen Effekt, ist es hoffentlich ausreichend.
Du kannst in der Sub die Konstante noch ändern. Allgemein gilt: je höher der Wert um so länger dauert es, bis andere Events (z.B. SelectionChange) abgearbeitet werden. Je niedriger umso so öfter werden andere Events beachtet, darunter leidet dann aber die "Zeitgenauigkeit" des Hochzählens:

Viele Grüße,
Andreas

Anzeige
Re: Prozessunterbrechung
04.06.2003 15:45:55
Peter M

Danke Andreas!
Hab in der kurzen Zeit
ne Menge von Dir gelernt.

Re: Prozessunterbrechung
04.06.2003 16:45:22
Peter M

Falls Du nochmal reinschaust:

"DoEvents" war genau das, was ich gesucht habe!!!

In der Tat kommt es mir nicht so auf die
Genauigkeit der Zeitschritte an.

Ich hab's jetzt testweise wie folgt
mal umgesetzt (mit 3 Buttons, 1 Bildlaufleiste).

-----------------------------------------------
Dim blnAbbruch As Boolean

Sub HochZaehlen()
Dim dt As Double
blnAbbruch = False
While Not blnAbbruch
Range("A1").Value = Range("A1").Value + 1

dt = Range("B10").Value / 100 'In B10 akt. Wert der Bildlaufleiste

Sleep (dt)
DoEvents 'Das war die entscheidende Methode!!!! Danke, Andreas !!!!
Wend
End Sub

Sub Sleep(dt As Double)
Dim t, startzeit As Double
startzeit = Timer
Do
t = Timer
Loop While t - startzeit < dt
End Sub


Sub Stopp()
blnAbbruch = True
End Sub

Sub initA1()
Stopp
Range("A1").Value = 0
End Sub
--------------------------------------------

Ich wünsche Dir weiterhin einen
so "guten Daumen" im Programmieren.
Du bist eine echte Hilfe.

Viele Grüße
Peter






Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige