Folgendes möchte ich erreichen:
Wenn in einem festgelegtem Sheet in Spalte A ein zusammenhängender Bereich markiert wird, soll eine Prozedur gestartet werden.
Nun habe ich das mit dem XSelectionChangeListener versucht, aber ich scheitere daran, dass die Prozedur gestartet wird bevor ich beim Selektieren die Maustaste loslasse. Die Prozedur sollte erst starten, wenn der gewünschte Bereich markiert ist. Muss ich da vielleicht einen anderen Listener nehmen?
Weiteres Problem: es scheint, dass ich mit dem XSelectionChangeListener alle Sheets überwache, eine Eingrenzung für einen festgelegten Bereich habe ich nicht gefunden. Das könnte ich zwar in meiner Sub selectionCheck_selectionChanged abfangen, aber das scheint auf die Performance zu gehen.
Noch ein Problem: das mit dem Anhalten des Listeners funktioniert nach dem Öffnen der Datei, aber nach bisschen rumspielen irgendwann nicht mehr. Ist der Code nicht sauber?
HIer mein Code:
Code: Alles auswählen
Global selChange as Object 'Der Listener
Global ListenerAlreadyAdded as Boolean 'Listener nicht mehrmals starten
Sub start_listener
If ListenerAlreadyAdded Then Exit Sub
selChange = createUnoListener("selectionCheck_", "com.sun.star.view.XSelectionChangeListener")
oDoc = ThisComponent
oDoc.getCurrentController.addSelectionChangeListener(selChange)
ListenerAlreadyAdded = True
MsgBox "Listener added"
End Sub
Sub stop_listener
If isNull(selChange) Then Exit Sub
oDoc = ThisComponent
oDoc.getCurrentController.removeSelectionChangeListener(selChange)
MsgBox "Listener removed"
ListenerAlreadyAdded = False
End Sub
Sub selectionCheck_selectionChanged(oEvent)
oDoc = ThisComponent
oSel = oDoc.getCurrentSelection()
If oSel.supportsService("com.sun.star.sheet.SheetCell") Then
'MsgBox "Eine Zelle markiert"
Elseif oSel.supportsService("com.sun.star.sheet.SheetCellRange") Then
'MsgBox "Ein Bereich wurde markiert"
If oSel.RangeAddress.StartColumn = 0 And oSel.RangeAddress.EndColumn = 0 Then
exportHTML()
End If
Elseif oSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
'MsgBox "Mehrere Bereiche wurden markiert"
End If
End Sub
Sub exportHTML
MsgBox "Prozedur gestartet"
End Sub