von peterschleif » Di, 23.02.2010 10:55
Hallo backin.
Du brauchst dazu einen Listener, der auf eine Änderung der Zell-Auswahl reagiert. Die Prozedur
AddListener() legt diesen Listener an. Du kannst sie zum Testen manuell ausführen und später automatisch beim Öffnen des Dokuments ausführen lassen. (Menü Extras | Anpassen -> Ereignisse -> "Dokument öffnen" -> Marko).
Der Listener ruft dann bei jeder neuen Auswahl die Prozedur
CurCtrl_selectionChanged(oEvent) auf. Dort wird geprüft, ob ...
- die neue Auswahl eine einzelne Zelle ist
- in Spalte B liegt
- unterhalb von Zeile 22 liegt.
Trifft das alles zu, werden die Daten aus der Zeile kopiert.
Peter
Code: Alles auswählen
Global oListener
Sub AddListener()
oListener = CreateUnoListener("CurCtrl_", "com.sun.star.view.XSelectionChangeListener")
ThisComponent.CurrentController.addSelectionChangeListener (oListener)
End Sub
Sub RemoveListener()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener (oListener)
End Sub
Sub CurCtrl_selectionChanged(oEvent)
Dim oCell As Object
Dim lRow As Long
oCell = oEvent.Source.Selection
If oCell.ImplementationName <> "ScCellObj" Then Exit Sub
lRow = oCell.RangeAddress.StartRow
If oCell.RangeAddress.StartColumn = 1 And lRow >= 21 Then 'Spalte B, ab Zeile 22
With oCell.spreadsheet
.getCellRangeByName("B3").String = .getCellByPosition(1, lRow).String
.getCellRangeByName("B4").String = .getCellByPosition(2, lRow).String
.getCellRangeByName("B5").String = .getCellByPosition(3, lRow).String & " " & .getCellByPosition(4, lRow).String
.getCellRangeByName("B6").String = .getCellByPosition(5, lRow).String
.getCellRangeByName("B8").String = .getCellByPosition(6, lRow).String
.getCellRangeByName("B9").FormulaLocal = .getCellByPosition(7, lRow).String
.getCellRangeByName("B10").String = .getCellByPosition(8, lRow).String
.getCellRangeByName("B11").FormulaLocal = .getCellByPosition(9, lRow).String
End With
End If
End Sub
Hallo backin.
Du brauchst dazu einen Listener, der auf eine Änderung der Zell-Auswahl reagiert. Die Prozedur [color=#008040][b]AddListener()[/b][/color] legt diesen Listener an. Du kannst sie zum Testen manuell ausführen und später automatisch beim Öffnen des Dokuments ausführen lassen. (Menü Extras | Anpassen -> Ereignisse -> "Dokument öffnen" -> Marko).
Der Listener ruft dann bei jeder neuen Auswahl die Prozedur [color=#008040][b]CurCtrl_selectionChanged(oEvent)[/b][/color] auf. Dort wird geprüft, ob ...
- die neue Auswahl eine einzelne Zelle ist
- in Spalte B liegt
- unterhalb von Zeile 22 liegt.
Trifft das alles zu, werden die Daten aus der Zeile kopiert.
Peter
[code]
Global oListener
Sub AddListener()
oListener = CreateUnoListener("CurCtrl_", "com.sun.star.view.XSelectionChangeListener")
ThisComponent.CurrentController.addSelectionChangeListener (oListener)
End Sub
Sub RemoveListener()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener (oListener)
End Sub
Sub CurCtrl_selectionChanged(oEvent)
Dim oCell As Object
Dim lRow As Long
oCell = oEvent.Source.Selection
If oCell.ImplementationName <> "ScCellObj" Then Exit Sub
lRow = oCell.RangeAddress.StartRow
If oCell.RangeAddress.StartColumn = 1 And lRow >= 21 Then 'Spalte B, ab Zeile 22
With oCell.spreadsheet
.getCellRangeByName("B3").String = .getCellByPosition(1, lRow).String
.getCellRangeByName("B4").String = .getCellByPosition(2, lRow).String
.getCellRangeByName("B5").String = .getCellByPosition(3, lRow).String & " " & .getCellByPosition(4, lRow).String
.getCellRangeByName("B6").String = .getCellByPosition(5, lRow).String
.getCellRangeByName("B8").String = .getCellByPosition(6, lRow).String
.getCellRangeByName("B9").FormulaLocal = .getCellByPosition(7, lRow).String
.getCellRangeByName("B10").String = .getCellByPosition(8, lRow).String
.getCellRangeByName("B11").FormulaLocal = .getCellByPosition(9, lRow).String
End With
End If
End Sub
[/code]