Ist es möglich, ein Makro automatisch beim Verlassen einer Zelle in einem Calc-Dokument zu starten?
Ja, vorzugsweise über einen Listener.
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
Falls das möglich ist, wäre es weiterhin von Interesse, die "Koordinaten" der verlassenen Zelle verwenden zu können.
Diese Angabe steckt im Prinzip im automatisch übergebenen Parameter
ereignis (siehe oben) beispielsweise:
allerdings ist das jeweils die Zelle nach verlassen der ursprünglichen Zelle, so das man die ursprüngliche Zelle jeweils temporär speichern müßte und dann zurückgeben und durch die Werte der nächsten Zelle ersetzen, also ungefähr so:
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
Diese einfache Art der Auswertung funktioniert aber nur wenn Du die Zelle nicht mittels Maus wechselst, falls Du mit Maus arbeiten mußt wäre zusätzlicher Code nötig.
(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
[quote]Ist es möglich, ein Makro automatisch beim Verlassen einer Zelle in einem Calc-Dokument zu starten?[/quote]
Ja, vorzugsweise über einen Listener.
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]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[/code]
[quote]Falls das möglich ist, wäre es weiterhin von Interesse, die "Koordinaten" der verlassenen Zelle verwenden zu können.[/quote]
Diese Angabe steckt im Prinzip im automatisch übergebenen Parameter [i]ereignis [/i](siehe oben) beispielsweise:
[code]ereignis.source.selection.AbsoluteName[/code]
allerdings ist das jeweils die Zelle nach verlassen der ursprünglichen Zelle, so das man die ursprüngliche Zelle jeweils temporär speichern müßte und dann zurückgeben und durch die Werte der nächsten Zelle ersetzen, also ungefähr so:
[code]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[/code]
Diese einfache Art der Auswertung funktioniert aber nur wenn Du die Zelle nicht mittels Maus wechselst, falls Du mit Maus arbeiten mußt wäre zusätzlicher Code nötig.
[i](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.)[/i]
Gruß
Stephan