Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von komma4 »

Willkommen im Forum.

Das geht auch in Calc mit einem Listener.

Sieh Dir mal mein Beispiel onColumnChange an.
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von komma4 »

Achim,

das ist eine *.odt-Datei mit der Dokumentation und den angehängten Makros...

Also: rechtsklick im Browser, speichern, mit OOo öffnen.
Konnte sie gerade erfolgreich laden...

Klappt das, oder brauchst Du eine PM mit attachment?
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von komma4 »

Habe keine Probleme mit 2.4 die Datei zu öffnen (direkt, oder von HD).

Schicke mir eine eMail-Adresse per PM, dann kommt sie als attachment.
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von komma4 »

Nein.
Nehme eine der Schaltflächen "PM" oder "eMail" unter dem Profil neben einem Posting von mir.
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)
skl
*
Beiträge: 10
Registriert: Fr, 29.01.2016 16:13

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von skl »

Hallo,

das ist genau das, was ich brauche! Ich habe eine Tabelle, in der ich in verschiedenen Zellen Nachnamen eintrage. Auf einem zweiten Tabellenblatt berechne (gewichtet nach Position auf Blatt 1), wie oft der Nachname bereits in der Tabelle steht. Diese Information hätte ich gerne bei der Eingabe auf dem ersten Blatt.

Meine Idee:
Ich schreibe in eine freie Zelle den Inhalt (Nachname) der aktiven Zelle und hole mir den Zahlenwert vom 2. Blatt. Aber wie bekomme ich den Inhalt der Aktiven Zelle dynamisch in eine andere geschrieben???

Vielen Dank
Stefan

PS: Der in diesem Thread angegebene Link ist leider TOT!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von komma4 »

onColumnChange hat geschrieben:Dieses Code-Beispiel beobachtet auf Eingaben (in der Spalte A auf einem Tabellenblatt "Tabelle1") und setzt daraufhin einen Zeitstempel in die korrespondierende Zeile der Spalte B.

Zur Installation: lege den Code (im angehängten Modul) in ein Modul des Dokument, wo es wirken soll, oder in die STANDARD-Bibliothek von "Meine Makros"

Anmerkung: die verwendeten Variablen im Code sind GLOBAL definiert, was bedeutet, dass sie während der gesamten OOo-Sitzung Gültigkeit haben (ihre "Lebensdauer" haben); die Verwendung von gleichnamigen Variablen in anderen Makros verbietet sich deshalb!
Aktivieren des Codes bspw. durch Zuweisen des Makros SetListeners zum Dokument-Öffnen-Ereignis (Anpassen>Ereignisse)

Deaktivieren des Listeners daselbst beim Dokument>Schliessen-Ereignis mittels des Makros RemoveListener
Dieses Wegnehmen des Listeners ist unbedingt notwendig, um die Stabilität von OOo nicht zu beeinflussen

Code: Alles auswählen

REM  *****  BASIC  *****
'Copyright (c) 2008 Winfried Rohr, re-Solutions Software Test Engineering

'This program is free software; you can redistribute it and/or modify it under 
'the terms of the GNU General Public License as published by the Free Software
'Foundation; either version 2 of the License, or (at your option) any later 
'version.

'This program is distributed in the hope that it will be useful, but WITHOUT 
'ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
'FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

'You should have received a copy of the GNU General Public License along with 
'this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
'Place, Suite 330, Boston, MA 02111-1307 USA
' ========================================================================
    ' http://www.oooforum.org/forum/viewtopic.phtml?t=27026
    ' ms777 Posted: Sat Nov 19, 2005 3:30 pm
    ' angepasst 2007-10-17
    ' http://de.openoffice.info/viewtopic.php?f=2&t=14347

    global lastCol as long
    global lastRow as Long
    global actCol as long
    global actRow as Long

    Global oRange
    Global oContr
    Global oDatChangeListener
    Global oSelChangeListener


    Sub RemoveListener
    oRange.removeChartDataChangeEventListener(oDatChangeListener)
    oContr.removeSelectionChangeListener(oSelChangeListener)
    End Sub

    Sub SetListeners()
    oSelChangeListener = createUnoListener("O1_","com.sun.star.view.XSelectionChangeListener")
    oDatChangeListener = createUnoListener("O2_","com.sun.star.chart.XChartDataChangeEventListener")
    ' Tabellen-Index
    ' oSheet = ThisComponent.sheets.getByIndex(0)
    oSheet = ThisComponent.Sheets.getByName( "Tabelle1" )
    oContr = ThisComponent.CurrentController

    ' zu beobachtender Bereich
    ' Angabe der Zellen
    ' Null-basiert: A1=0,0  B1=1,0   C4=3,3
    ' Links, Oben, Rechts, Unten
    ' hier: gesamte Spalte A, OOo Version 2
    oRange = oSheet.getCellRangeByPosition(0,0,0,65535)

    lastRow = 0
    lastCol = 0

    oContr.addSelectionChangeListener(oSelChangeListener)
    oRange.addChartDataChangeEventListener(oDatChangeListener)

    ' ausgelagert !
    ' oRange.removeChartDataChangeEventListener(oDatChangeListener)
    ' oContr.removeSelectionChangeListener(oSelChangeListener)

    End Sub

    Sub O1_selectionChanged(aEvent as com.sun.star.lang.EventObject)
    'xray.xray aEvent
    oSel = aEvent.Source.Selection
    if HasUnoInterfaces(oSel, "com.sun.star.sheet.XCellAddressable") then
      oCA = oSel.CellAddress
      actCol = lastCol
      actRow = lastRow
      lastCol = oCA.Column
      lastRow = oCA.Row
      endif
    end sub


    Sub O2_chartDataChanged(a as com.sun.star.chart.ChartDataChangeEvent)
    ' Spaltenangabe: B
    oDateCell=ThisComponent.CurrentController.ActiveSheet.getCellByPosition(1, actRow)
    oDateCell.SetString(Now)
    End Sub
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)
skl
*
Beiträge: 10
Registriert: Fr, 29.01.2016 16:13

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von skl »

Danke, mit Eurer Hilfe habe ich jetzt ein Makro zusammen geschustert, das halbwegs macht, was es soll:

Option Explicit
DIM meinText As String
DIM meineCalcDatei
DIM meineTabelle
DIM meineZelleJ3

Sub Soll_Ist()

meinText = ThisComponent.getCurrentSelection().String
meineCalcDatei = thisComponent
meineTabelle = meineCalcDatei.Sheets.getbyname("Aufsichten")
meineZelleJ3 = meineTabelle.getcellrangebyname("J3")
'in J3 schreiben
meineZelleJ3.String = meinText

End Sub


Allerdings muss ich das Makro immer von Hand starten. Weiß jemand, wie die Zelle J3 automatisch aktualisiert wird, wenn ich eine neue Zelle auswähle?

Viele Grüße
Stefan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von Stephan »

Weiß jemand, wie die Zelle J3 automatisch aktualisiert wird, wenn ich eine neue Zelle auswähle?
Indem Du das Makro dem entsprechenden Ereignis zuweist:

-Klick auf den Tabellenreiter mit rechter Maustaste um Kontextmenü zu erzeugen
-"Tabellenereignisse...." wählen
-im erscheinenden Dialog das Makro dem Ereignis "Auswahl geändert" zuweisen


Gruß
Stephan
skl
*
Beiträge: 10
Registriert: Fr, 29.01.2016 16:13

Re: Zelle A1 immer der Inhalt der gerade markierten (aktiven) Ze

Beitrag von skl »

Super, vielen Dank!!

Stefan
Antworten