Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
192to196
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
192to196
192to196
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ActiveX-Dll: Funktion von außen stoppen

ActiveX-Dll: Funktion von außen stoppen
13.12.2002 10:25:55
Georg
Hallo,

Ich programmiere eine ActiveX-Dll, die in einem Excel-ComAddIn verwendet wird.

Mit dem DoEvents-aufruf ist es möglich, das bei Formularen im ComAddIn trotz Aufruf einer länger andauerenden Rechenoperation, der User mit der Oberfläche kommunizieren kann.

Nun möchte ich, wenn der Stoppbutton gedrückt wird, das die aufgerufenene Funktion gestoppt wird und nicht brutal mit set obj = nothing zerstört wird.

Ich dachte an eine Stopp-Funktion in der Dll und eine Memebervariable, welche zyklisch von der ersten Funktion abgefragt wird und bei True aus der
Funktion herausgeht.

Leider funktioniert das nicht wirklich.

Zusätzlich: Die Stoppfunktion sollte erst dann beendet werden, wenn die andere Funktion fertig ist, damit alles geordnet abläuft.

Wer weiß eine Lösung!

Vielen Dank im Voraus!

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: ActiveX-Dll: Funktion von außen stoppen
13.12.2002 12:43:47
Hans W. Hofmann
Da Du zu den Interna der DLL nix gesagt hast, würde ich empfehlen ein Flag zu setzen. Das kann eine Datei sein (eine Übergabevariable), deren Existenz (deren Inhalt) abgeprüft wird und die über die Laufzeit der DLL entscheidet...


Gruß HW

Re: ActiveX-Dll: Funktion von außen stoppen
15.12.2002 09:43:17
Georg
Hallo!

Weiter unten der Code (symbolisch)
Wenn man auf den OK button drückt, damit das Programm rechnet, kann der User nun auf Abbrechen drücken und das Programm kommt auch in die Stoppfunktion hinein.
Dort kann man sich auch die Membervariablen der ActiveX-Dll anschauen, welche korrekt sind.
Die Rechnungsfunktion macht aber nix mehr. Wird bewiesen in der Rechnungsfunktion durch eine Msgbox funktion bzw. debug.print

Die ActiveX-Dll (Name zB cUmsaezte) sieht in etwa so aus:

private m_bStopp as Boolean
private m_bIsStopped as boolean
public event Fortschritt(Prozent as integer)

public sub RechneUmsaetze(Parameter) as ADODB.Recordset

Schleifenbeginn
if m_bStopp then
m_bIsStopped = true ' Stopp funktion darf erst jetzt beendet werden
' Beweis für Ende
msgbox "ende!"
Aufräumaktionen
exit sub
endif
... mache kalkulation
raiseevent fortschritt(prozent)
Schleifenende
end sub

public sub Stopp
m_bStopp = true
while m_bIsStopped = false
doevents
do
end sub

Im Formular des Excel-ComAddIn:

private WITHEVENTS objUmsaetze as cUmsaetze
private m_bInArbeit as boolean ' Wird in form_load auf false gesetzt

private sub btnOK_Click
dim rst as adodb.recordset
set rst = objUmsaetze.RechneUmsaezte(Parameter)

' Recordset ins Excle schreiben
do while not rst.eof
... ins excel-zellen schreiben
loop
end sub

sub objUnsaetze_Fortschritt(Prozent as integer)
ctrProgressbar.Value = prozent
doevents
m_bInArbeit = true
end sub

private sub btnAbbrechen_Click

if m_bInArbeit then
if objUmsaezte.Stopp then
set objUmsaetze = nothing
unload me
endif
end if
end sub



Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige