Seite 1 von 1

CALC-Listener "Activate Document" in Endlosschleife

Verfasst: Sa, 24.08.2013 16:48
von CalcWeiss
Ich habe mir ein CALC-Macro an das Event "Activate Document" von Sheet1 gehängt und das läuft dummerweise in einer Endlosschleife und ich weiß nicht, wie ich das verhindern kann. Im Makro muss ich leider die Tabellenblätter wechseln und komme am Ende wieder auf Sheet1 zurück. Erschwert wird das Ganze dadurch, dass ich in VBA (Excel) programmiert habe. Das Makro läuft aber ansonsten sehr stabil und ich möchte es ungern auf OO-Basic umstellen, da doch einige Arbeit darin steckt. Hier mal ein Beispiel, das leichter verständlich ist:

Code: Alles auswählen

Option VBASupport 1
Sub Sh1Macro
	Application.EnableEvents = False                     ' Events verbieten
	Sheets("Sheet2").Activate                            ' Blatt wechseln
	msgbox "Now on Sheet2"
	Sheets("Sheet1").Activate                            ' Zurück auf das alte Blatt
	msgbox "Now on Sheet1"
	Application.EnableEvents = True                      ' Events wieder erlauben
End Sub
Nach Auslösen des Events (Wechseln auf Sheet1) wird Sheet2 aktiviert und eine Meldung ausgegeben. Dann wird wieder auf Sheet1 gewechselt, die zweite Meldung kommt aber nicht. Statt dessen wird wieder die erste Meldung ausgegeben, da ein neuer Event ausgelöst wurde. Unter Excel verhindert Application.EnableEvents = False geschachtelte Events. Was muss ich in CALC Basic schreiben, damit der Event nicht durch sich selbst unterbrochen wird?

Re: CALC-Listener "Activate Document" in Endlosschleife

Verfasst: Mi, 28.08.2013 06:02
von DPunch
Servus

Im Zweifelsfall kannst Du es mit einer globalen Variable versuchen, die bestimmt, ob das Makro bereits läuft oder nicht.

Code: Alles auswählen

Option VBASupport 1
Public isAlreadyRunning as Boolean
Sub Sh1Macro
   If isAlreadyRunning Then Exit Sub
   isAlreadyRunning = True
   REM do something
   isAlreadyRunning = False
End Sub

Re: CALC-Listener "Activate Document" in Endlosschleife

Verfasst: Mi, 28.08.2013 15:57
von CalcWeiss
Ja, ich habe jetzt auch Semaphoren verwendet. Ist alt bekannt und bewährt.