Hallo,
eine kleine Frage hab ich da mal:
Ist es möglich, ein Makro automatisch beim Verlassen einer Zelle in einem Calc-Dokument zu starten?
Der Makro-Code soll also gestartet werden, wenn ich Return, die Cursor-Steuerung betätige oder in eine andere Zelle klicke.
Falls das möglich ist, wäre es weiterhin von Interesse, die "Koordinaten" der verlassenen Zelle verwenden zu können.
Danke für die Antwort.
Friedhelm
Makro automatisch starten
Moderator: Moderatoren
-
- ****
- Beiträge: 119
- Registriert: Di, 28.11.2006 19:44
- Wohnort: Meppen
Re: Makro automatisch starten
hallo,
das liest sich, wie das, was ich haben wollte
viewtopic.php?f=2&t=20882
ich bin mir sicher, du brauchst einen 'listener'
ich habe es verworfen, weil es mir zu kompliziert aussah
das liest sich, wie das, was ich haben wollte
viewtopic.php?f=2&t=20882
ich bin mir sicher, du brauchst einen 'listener'
ich habe es verworfen, weil es mir zu kompliziert aussah

oo4.1.2 in winxp pro mit sp3
Re: Makro automatisch starten
Ja, vorzugsweise über einen Listener.Ist es möglich, ein Makro automatisch beim Verlassen einer Zelle in einem Calc-Dokument zu starten?
Am Einfachsten ist es einen SelectionChange-Listener zu verwenden und diesen über ein Autostartmakro beim Öffnen der Datei automatisch zu registrieren und beim Schliessen der Datei ebenso zu entfernen.
Folgender Code erledigt das:
Code: Alles auswählen
Global oListener As Object
Sub registrieren()
oListener = CreateUnoListener( "xxx_", "com.sun.star.view.XSelectionChangeListener" )
ThisComponent.getCurrentController.addSelectionChangeListener(oListener)
End Sub
Sub entfernen()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener(oListener)
End Sub
Sub xxx_selectionChanged(ereignis)
'hier der auszuführende Code
End Sub
Diese Angabe steckt im Prinzip im automatisch übergebenen Parameter ereignis (siehe oben) beispielsweise:Falls das möglich ist, wäre es weiterhin von Interesse, die "Koordinaten" der verlassenen Zelle verwenden zu können.
Code: Alles auswählen
ereignis.source.selection.AbsoluteName
Code: Alles auswählen
Global tmp_sel
Global oListener As Object
Sub xxx_selectionChanged(ereignis)
'hier der auszuführende Code unter Verwendung der Info des im vorherigen Durchlaufs gespeicherten 'Koordinatenwerts' tmp_sel
tmp_sel = ereignis.source.selection.AbsoluteName
End Sub
(Im Prinzip weil ein Fehler vorliegt der bewirkt das beim mouse-move auch eine Änderung der Selektion erfolgt trotzdem keine Mausetaste gedrückt ist, das müßte abgefangen werden. Ich kann auf die Schnelle nicht sagen wie man das am Zweckmäßigsten machen sollte, da es sicher mehrere Wege gäbe.)
Gruß
Stephan