Seite 1 von 1

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

Verfasst: Mo, 28.04.2008 17:57
von komma4
Willkommen im Forum.

Das geht auch in Calc mit einem Listener.

Sieh Dir mal mein Beispiel onColumnChange an.

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

Verfasst: Mo, 28.04.2008 22:10
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?

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

Verfasst: Di, 29.04.2008 14:45
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.

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

Verfasst: Di, 29.04.2008 22:19
von komma4
Nein.
Nehme eine der Schaltflächen "PM" oder "eMail" unter dem Profil neben einem Posting von mir.

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

Verfasst: Fr, 29.01.2016 16:39
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!

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

Verfasst: Fr, 29.01.2016 17:04
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

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

Verfasst: Sa, 30.01.2016 18:29
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

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

Verfasst: Sa, 30.01.2016 21:20
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

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

Verfasst: Sa, 30.01.2016 21:23
von skl
Super, vielen Dank!!

Stefan