Listener-Aktion bei Zelländerung

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

ooodoc
Beiträge: 9
Registriert: Sa, 17.12.2005 17:45

Listener-Aktion bei Zelländerung

Beitrag 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
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Listener-Aktion bei Zelländerung

Beitrag 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
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Listener-Aktion bei Zelländerung

Beitrag 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 ...
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
ooodoc
Beiträge: 9
Registriert: Sa, 17.12.2005 17:45

Re: Listener-Aktion bei Zelländerung

Beitrag 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.
Antworten