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