von Scalaia990 » Do, 01.04.2010 12:38
Hallo Karo,
vielen Dank für Deinen Tipp, auf diese Idee bin ich gar nicht gekommen. Manchmal übersieht man die naheliegendsten Dinge. Habe mir lange überlegt ob ein Listener oder Die Variante es generell zu ändern die Sinnvollere Alternative ist.
Bei meinen weiteren Recherchen bin ich auf verschiedene Listener gestoßen, diese habe ich so umgeschrieben, dass ich nun einen Listener habe der nur im Falle das das Tabellenblatt geschützt is Aktiv wird. und verhindert dass geschützte Zellen oder Bereiche ausgewählt werden können.
Bin mir momentan noch nicht schlüssig welche Variante ich einsetzen werde, tendiere momentan mehr zum Listener, da es sich die Änderung der Tastenkombi auch auf all die anderen Dokumente auswirkt, und ich mich damit vom Standard wegbewege. Die Funktion wird werde ich wohl auch nur bei einer Handvoll Dokumente wirklich brauchen.
Gruss und Dank
Scalaia990
Für alle die an diesem Thema interessiert sind hier der Code meines Listeners
Code: Alles auswählen
Global oListener
Sub AddListener()
oListener = CreateUnoListener("Selection_", "com.sun.star.view.XSelectionChangeListener")
oDoc = ThisComponent
oController = ThisComponent.CurrentController
oSheet = oDoc.currentcontroller.activesheet
oController.addSelectionChangeListener(oListener)
End Sub
Sub RemoveListener()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener (oListener)
End Sub
Sub Selection_selectionChanged(oEvent)
oDoc = ThisComponent
oController = oDoc.CurrentController
oSheet = oController.activesheet
if oSheet.isprotected = FALSE then EXIT SUB
oZelle = oDoc.getCurrentSelection()
bCheckzelle = HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if bCheckzelle then
oCelle = oDoc.getCurrentSelection().getCellAddress()
oRow = oCelle.Row
oColumn = oCelle.column
oCelle = oSheet.getCellByPosition(ocolumn,orow)
oColumnname = ocelle.getColumns.getByIndex(0).getName()
oCellSchutz = oCelle.CellProtection 'das Zellschutzobjekt
if oCellSchutz.IsLocked = true then
'msgbox "gesperrt"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:JumpToNextUnprotected", "", 0, Array())
endif
else
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oCurrentSelection = oDoc.CurrentSelection
oSelect=oCurrentSelection.getRangeAddress
oSelectColumn=oCurrentSelection.Columns
oSelectSC=oSelectColumn.getByIndex(0).getName
oSelectSR=oSelect.StartRow+1
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$" & oSelectSC & "$" & oSelectSR
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
exit sub
end if
End Sub
Hallo Karo,
vielen Dank für Deinen Tipp, auf diese Idee bin ich gar nicht gekommen. Manchmal übersieht man die naheliegendsten Dinge. Habe mir lange überlegt ob ein Listener oder Die Variante es generell zu ändern die Sinnvollere Alternative ist.
Bei meinen weiteren Recherchen bin ich auf verschiedene Listener gestoßen, diese habe ich so umgeschrieben, dass ich nun einen Listener habe der nur im Falle das das Tabellenblatt geschützt is Aktiv wird. und verhindert dass geschützte Zellen oder Bereiche ausgewählt werden können.
Bin mir momentan noch nicht schlüssig welche Variante ich einsetzen werde, tendiere momentan mehr zum Listener, da es sich die Änderung der Tastenkombi auch auf all die anderen Dokumente auswirkt, und ich mich damit vom Standard wegbewege. Die Funktion wird werde ich wohl auch nur bei einer Handvoll Dokumente wirklich brauchen.
Gruss und Dank
Scalaia990
Für alle die an diesem Thema interessiert sind hier der Code meines Listeners
[code]
Global oListener
Sub AddListener()
oListener = CreateUnoListener("Selection_", "com.sun.star.view.XSelectionChangeListener")
oDoc = ThisComponent
oController = ThisComponent.CurrentController
oSheet = oDoc.currentcontroller.activesheet
oController.addSelectionChangeListener(oListener)
End Sub
Sub RemoveListener()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener (oListener)
End Sub
Sub Selection_selectionChanged(oEvent)
oDoc = ThisComponent
oController = oDoc.CurrentController
oSheet = oController.activesheet
if oSheet.isprotected = FALSE then EXIT SUB
oZelle = oDoc.getCurrentSelection()
bCheckzelle = HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if bCheckzelle then
oCelle = oDoc.getCurrentSelection().getCellAddress()
oRow = oCelle.Row
oColumn = oCelle.column
oCelle = oSheet.getCellByPosition(ocolumn,orow)
oColumnname = ocelle.getColumns.getByIndex(0).getName()
oCellSchutz = oCelle.CellProtection 'das Zellschutzobjekt
if oCellSchutz.IsLocked = true then
'msgbox "gesperrt"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:JumpToNextUnprotected", "", 0, Array())
endif
else
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oCurrentSelection = oDoc.CurrentSelection
oSelect=oCurrentSelection.getRangeAddress
oSelectColumn=oCurrentSelection.Columns
oSelectSC=oSelectColumn.getByIndex(0).getName
oSelectSR=oSelect.StartRow+1
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$" & oSelectSC & "$" & oSelectSR
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
exit sub
end if
End Sub
[/code]