Seite 1 von 1

Listener-Aktion bei Zelländerung

Verfasst: Mi, 17.06.2009 12:08
von ooodoc
Moin

Habe ein Problem mit dem Listener, bei einer Änderung des Zellinhalts (Tabelle2; ZelleA1) soll eine Aktion ausgeführt werden in diesem Fall das kopieren eines Wertes. Ausführung = 0
Wo ist das Problem?

Code: Alles auswählen

Sub Listener_registrieren()
objekt = ThisComponent.Sheets(1).GetCellRangeByName("a1")
oCrngData = CreateUnoListener("CopLi_","com.sun.star.util.XModifyListener")
objekt.addModifyListener(oCrngData)
End Sub

Sub Listener_entfernen()
On Error Resume Next
ThisComponent.CurrentController.removeSelectionChangeListener(oListener)
End Sub 

sub CopLi

	Dim oDoc as Object
	Dim oSheetQuelle as Object, oSheetZiel as Object
	Dim oZiel as Object , oQuelle as Object

	oDoc = ThisComponent
	oSheetQuelle = oDoc.sheets(0)
	oSheetZiel = ODoc.sheets(2)
	oQuelle = oSheetQuelle.getCellRangeByName("A1").RangeAddress	
	oZiel = oSheetZiel.getCellRangeByName("C1").CellAddress
	oSheetQuelle.copyRange(oZiel,oQuelle)

end sub
Gruß ooodoc

Re: Listener-Aktion bei Zelländerung

Verfasst: Mi, 17.06.2009 13:44
von turtle47
Hi ooodoc,

Hast Du hier nicht was vergessen?

Code: Alles auswählen

oDoc = ThisComponent
   oSheetQuelle = oDoc.sheets(0)
   oSheetZiel = ODoc.sheets(2)
   oQuelle = oSheetQuelle.getCellRangeByName("A1").RangeAddress   
   oZiel = oSheetZiel.getCellRangeByName("C1").CellAddress
   oSheetQuelle.copyRange(oZiel,oQuelle)
Vergleiche hier.

Der von Dir verwendetet Listener funktioniert bei mir nicht.

Hier mal ein funktionierender Code:

Code: Alles auswählen

Global oDatChangeListener As Object
Global oListener As Object
Global oCell As Object

Sub addeventlistener
	oDoc = thisComponent
	oSheets = oDoc.getSheets()
	oSheet = oSheets.getByName("Tabelle2")
	oCell = oSheet.getCellRangeByName("A1")
	oListener = CreateUnoListener( "CopLi_","com.sun.star.chart.XChartDataChangeEventListener" )
	oCell.addChartDataChangeEventListener(oListener)
End Sub

Sub EventListenerOff
	oCell.removeChartDataChangeEventListener(oListener) 
End Sub


sub CopLi_chartDataChanged
Dim oDoc as Object
Dim oSheetQuelle as Object, oSheetZiel as Object
Dim oZiel as Object , oQuelle as Object

   oDoc = ThisComponent
   oSheetQuelle = oDoc.sheets(0)
   oSheetZiel = oDoc.sheets(1)
   oQuelleRange=oSheetQuelle.getCellRangeByName("A1")
   oQuellRangeAddresse = oQuelleRange.getRangeAddress
   oZiel = oSheetZiel.getCellRangeByName("C1")
   oZielCellAdresse=oZiel.getCellAddress
   oSheetZiel.copyRange(oZielCellAdresse,oQuellRangeAddresse)
end sub
Jürgen

Re: Listener-Aktion bei Zelländerung

Verfasst: Mi, 17.06.2009 13:46
von komma4
Schau Dir mal andere Beispiele an...

Du initiierst einen MODIFY Listener, willst dann aber einen SELECTIONCHANGE Listener abbauen.
Und Du hast keine CopLi_modified() Routine ...

Re: Listener-Aktion bei Zelländerung

Verfasst: Mi, 17.06.2009 18:39
von ooodoc
Dank an Jürgen es funktioniert.

Allgemein
Als "gelernter Makroklicker" ist es nicht so einfach nun die Makros zu schreiben. Zum Listener, gibt es eine Übersicht darüber und deren Einsatzmöglichkeiten.

Hast Du hier nicht was vergessen?

Code: Alles auswählen

oDoc = ThisComponent
   oSheetQuelle = oDoc.sheets(0)
   oSheetZiel = ODoc.sheets(2)
   oQuelle = oSheetQuelle.getCellRangeByName("A1").RangeAddress   
   oZiel = oSheetZiel.getCellRangeByName("C1").CellAddress
   oSheetQuelle.copyRange(oZiel,oQuelle)
Nein 8)

Gruß ooodoc

PS:Habe leider in der falschen Rubrik gepostet Bitte verschieben.