Seite 1 von 1
[gelöst] Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Fr, 03.06.2016 14:20
von junmod
Hallo Forum,
ich habe mir bereits die Finger wund gesucht und einiges ausprobiert, aber ich komme nicht weiter.
Ich hoffe Ihr könnt mir den entscheidenden Tipp geben.
Folgendes würde ich gerne in OO Calc mit einem Makro realisieren:
Ich habe z.B. die Zelle A1, die über die Funktion VERWEIS mit Text befüllt wird,
dann gibt es eine weitere Zelle, z.B. A2, die abhängig vom Text in Zelle A1 eine 1 oder 0 enthält,
wenn jetzt in Zelle A2 z.B die 1 erscheint soll automatisch ein Makro den Text aus A1 in eine andere Zelle, z.B. A3 schreiben, bei 0 soll die Zelle A3 leer und beschreibbar bleiben.
Ich hatte schonmal diverse Versuche gestartet, aber entweder war es nicht in Echtzeit, d.h. der Text wurde erst eine Eingabe später in A3 geschrieben oder es kam die Fehlermeldung dass die Zelle angeblich geschützt sei.
Ich würde mich freuen wenn mir jemand helfen könnte.
Gruß
Dirk
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Sa, 04.06.2016 07:21
von Stephan
ordne z.B. folgendes Makro:
Code: Alles auswählen
Sub Main(a)
blatt = ThisComponent.CurrentConTroller.ActiveSheet
tmp = Split(a.AbsoluteName,".")
If (tmp(1) = "$A$1" OR tmp(1) = "$A$2") AND blatt.getCellRangeByName("A2").Value = 1 Then
blatt.getCellRangeByName("A3").String = blatt.getCellRangeByName("A1").String
ElseIf (tmp(1) = "$A$1" OR tmp(1) = "$A$2") AND blatt.getCellRangeByName("A2").Value = 0 Then
blatt.getCellRangeByName("A3").String = ""
End if
End Sub
dem Ereignis "Inhalt geändert" des Tabellenblattes zu (Rechtsklick auf Reiter des Tabellenblattes und Menüpunkt "Ereignisse...)
Gruß
Stephan
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Mo, 06.06.2016 13:14
von junmod
Danke Stephan!
Es funktioniert soweit ganz gut, allerdings nur wenn ich die "1" oder "0" direkt eingebe, sobald ich diese aber durch einen VERWEIS erzeuge, passiert nichts mehr. Ich habe schon gedacht es liegt an der Formatierung der Zelle, aber selbst wenn ich mit Buchstaben arbeite funktioniert es nicht.
Hättest du da vielleicht auch noch einen Tipp?
Gruß
Dirk
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Mo, 06.06.2016 20:07
von mikeleb
Hallo,
ich kann deine Beobachtung nicht bestätigen. Auch wenn ich die Zelle A2 per Formel mit 1 oder 0 fülle, arbeitet das Makro exakt.
Kann es sein, dass du anstelle der Zahlen 0 und 1 die Texte "0" und "1" in der Formel verarbeitest?
Poste mal deine konkrete Verweis()-Funktion.
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Di, 07.06.2016 07:30
von junmod
Hallo mikeleb,
hier ist mein Versuch.
Gruß
Dirk
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Di, 07.06.2016 08:23
von Stephan
Hättest du da vielleicht auch noch einen Tipp?
Nach Deiner jetzt übermittelten Beispieldatei am Einfachsten indem Du zusätzlich auf ein EReignis in ZElle H2 prüfst:
Code: Alles auswählen
Sub Main(a)
blatt = ThisComponent.CurrentConTroller.ActiveSheet
tmp = Split(a.AbsoluteName,".")
If (tmp(1) = "$A$1" OR tmp(1) = "$A$2" OR tmp(1) = "$H$2") AND blatt.getCellRangeByName("A2").Value = 1 Then
blatt.getCellRangeByName("A3").String = blatt.getCellRangeByName("A1").String
ElseIf (tmp(1) = "$A$1" OR tmp(1) = "$A$2" OR tmp(1) = "$H$2") AND blatt.getCellRangeByName("A2").Value = 0 Then
blatt.getCellRangeByName("A3").String = ""
End if
End Sub
strenggenommen ist die Prüfung überflüssig und es sollte genügen:
Code: Alles auswählen
Sub Main()
blatt = ThisComponent.CurrentConTroller.ActiveSheet
If blatt.getCellRangeByName("A2").Value = 1 Then
blatt.getCellRangeByName("A3").String = blatt.getCellRangeByName("A1").String
ElseIf blatt.getCellRangeByName("A2").Value = 0 Then
blatt.getCellRangeByName("A3").String = ""
End if
End Sub
Gruß
Stephan
Re: Wie kann man Zellinhalte in Echtzeit kopieren und schreiben?
Verfasst: Di, 07.06.2016 10:33
von junmod
Hallo Stephan,
dein Beispiel 2 ohne Prüfung macht genau das was ich mir vorgestellt habe. Super!
Dann lag es wohl nur an der Prüfung.
Vielen Dank!
Gruß
Dirk