Löschen mit SetzeZelle funktioniert nicht logisch

Hallo allerseits,

ich habe beim Versuch, eine Zelle mit Hilfe der Funktion 'SetzeZelle' zu löschen, ein merkwürdiges Phänomen entdeckt:
Wenn ich eine Zelle A1, die als 'Mehrzeiler' definiert ist, lösche mit SetzeZelle("";A1), dann ist sie optisch tatsächlich leer, aber in ihrer Statusanzeige steht nach wie vor 'Mehrzeiler'. Dies hat aber für das Sortieren eines Bereichs fatale Folgen:
Wenn diese Zelle (und alle anderen in der Zeile) leer ist, wird beim (aufsteigendem) Sortieren eines diese Zelle beinhaltenden Bereichs diese Zeile als erste Leerzeile erhalten, was ja nicht gewünscht ist.
Lösche ich allerdings die Mehrzeiler-Zelle per Hand mit der Rückschritt-Taste, dann steht im Status statt 'Mehrzeiler' 'Leer' und die betreffende Zeile wird nicht als Leerzeile vorangestellt.
Ich habe mir jetzt so beholfen,d ass ich das Löschen über ein AppleScript mache. Ich weiß auch, dass MartinsPower-Functions mit der Formel LöscheBereich' ebenfalls das gewünschte Ergebnis liefern, da ich aber mit Kollegen zusammenarbeite, die diese nicht unbedingt haben, wollte ich das Problem mit Bordmitteln lösen.
Frage: Ist das geschilderte Verhalten ein Bug oder ein Feature, dessen Sinnhaftigkeit mir lediglich entgeht...? ;-)
- Jörg Bornemann

Re: Löschen mit SetzeZelle funktioniert nicht logisch

#9525 On 25 Mai, 2010 10:30 Thomas Kaegi said,

Hallo Jörg

Mit "SetzeZelle" überschreibst du den Inhalt der Zelle, nicht die Eigenschaften der Zelle. Ich kenne viele Anwendungen (Kataloge etc.), in welchen in einer Spalte mit lauter Mehrzeilerzellen mal eine Zelle leer bleiben muss, das nächste Mal aber wieder einen mehrzeiligen Text aufnehmen soll. Es wäre verheerend, wenn mit "SetzeZelle('';xx)" die Eigenschaften der Zelle beeinflusst würden.

Entgegen deiner Annahme lässt sich dein Problem auch mit Martin's Power Functions nicht lösen. Weder "LöscheBereich" noch "KopiereBereich" änderten in meinem Test an den Eigenschaften der Zelle etwas - sie beeinflussten nur den Inhalt.

Deine Beobachtung, dass Löschen per Hand (mit der Rückschritttaste) funktioniere, kann ich ebenfalls nicht bestätigen. Es steht dann zwar nach dem Löschen "Leer" in der Werkzeugleiste, aber das Mehrzeilersymbol ist noch ausgewählt und beim Schreiben in die Zelle wird der Text wie erwartet umgebrochen.

Es geht meines Erachtens nur mit manuellem Kopieren/Einsetzen einer leeren Zelle, die auf "Automatisch" gestellt ist, oder mit einem AppleScript.

Etwas dubios verhält sich RagTime beim Sortieren. Ohne zusätzliche Optionen wird die Mehrzeilerzelle beim Sortieren mal zu einer "Auto-Zelle", mal nicht. Sie wird aber nach meiner Feststellung dabei immer am korrekten Ort eingereiht (also entgegen deiner Feststellung), d.h. gleich wie die anderen Leerzellen behandelt. Das habe ich so festgestellt: In Spalte B aufsteigende Ziffern eingesetzt und beide Spalten nach Spalte A sortiert. War die Mehrzeilerzelle die letzte leere Zelle im sortierten Bereich der Spalte A, so blieb sie eine Mehrzeilerzelle, sonst nicht. Mit der Option "auch Zellformate" beim Sortieren, lässt sich das konsistente Verhalten (Zelleigenschaften bleiben beim Sortieren erhalten) erzwingen.

Das Verhalten von RagTime bei "SetzeZelle" ist meiner Meinung nach somit kein Bug, sondern ein unbedingt erforderliches "Feature"!

Gruss, Thomas

Re: Löschen mit SetzeZelle funktioniert nicht logisch

#9527 On 25 Mai, 2010 11:39 Jörg Bornemann said,
Hallo Thomas,

ich hatte mich unverständlich ausgedrückt - natürlich kann die Eigenschaft der Mehrzeiler-Zelle erhalten bleiben.

Ich verstehe aber nicht, warum die Zelle, wenn der Inhalt der Zelle mit Hilfe einer setzeZelle-Funktion gelöscht wird, dann diese Zelle dazu führt, dass die Zeile, in der sie steht (alle weiteren Zellen der Zeile sind leer) als Leerzeile vor den ersten Datensatz geschoben wird. Das passiert nämlich nicht, wenn man die Zelle 'hart' löscht.

Um das nachzuvollziehen, musst du nur folgendes machen:

1. schreibe in A1 - A3 beliebige Zeichen - die Zellen haben die Eigenschaft 'Mehrzeiler'
2. Lösche dann den Inhalt der letzten Zeile A3 (sie muss Mehrzeiler sein!) mit Hilfe der SetzeZelle-Funktion --> A3 ist leer, hat aber natürlich noch die Eigenschaft Mehrzeiler, was ja auch OK ist.
3. Nun sortiere beispielsweise den Bereich A1-A3 - wichtig ist, dass A3 (und damit die Leerzeile) noch in der Selektion ist.
4. Sie schiebt sich nach dem Sortieren an A1 --> eine Leerzeile entsteht vor den weiteren Datensätzen. Das erscheint mir nach wie vor nicht so brauchbar.
Es würde bedeuten, dass das Sortierverhalten zwischen einer dem Inhalt nach leeren und einer gelöschten Zelle unterscheidet.
Das Phänomen tritt nicht auf, wenn Zelle A3 kein Mehrzeiler ist und mit SetzeZelle glöscht wird. Dann ist das Sortierergebnis 'normal'

- Jörg


Am 25.05.2010 um 11:31 schrieb Thomas Kaegi:

Hallo Jörg

Mit "SetzeZelle" überschreibst du den Inhalt der Zelle, nicht die Eigenschaften der Zelle. Ich kenne viele Anwendungen (Kataloge etc.), in welchen in einer Spalte mit lauter Mehrzeilerzellen mal eine Zelle leer bleiben muss, das nächste Mal aber weder einen mehrzeiligen Text aufnehmen soll. Es wäre verheerend, wenn mit "SetzeZelle('';xx)" die Eigenschaften der Zelle beeinflusst würden.

Entgegen deiner Annahme lässt sich dein Problem auch mit Martin's Power Functions nicht lösen. Weder "LöscheBereich" noch "KopiereBereich" änderten in meinem Test an den Eigenschaften der Zelle etwas - sie beeinflussten nur den Inhalt.

Deine Beobachtung, dass Löschen per Hand (mit der Rückschritttaste) funktioniere, kann ich ebenfalls nicht bestätigen. Es steht dann zwar nach dem Löschen "Leer" in der Werkzeugleiste, aber das Mehrzeilersymbol ist noch ausgewählt und beim Schreiben in die Zelle wird der Text wie erwartet umgebrochen.

Es geht meines Erachtens nur mit manuellem Kopieren/Einsetzen einer leeren Zelle, die auf "Automatisch" gestellt ist, oder mit einem AppleScript.

Etwas dubios verhält sich RagTime beim Sortieren. Ohne zusätzliche Optionen wird die Mehrzeilerzelle beim Sortieren mal zu einer "Auto-Zelle", mal nicht. Sie wird aber nach meiner Feststellung dabei immer am korrekten Ort eingereiht (also entgegen deiner Feststellung), d.h. gleich wie die anderen Leerzellen behandelt. Das habe ich so festgestellt: In Spalte B aufsteigende Ziffern eingesetzt und beide Spalten nach Spalte A sortiert. War die Mehrzeilerzelle die letzte leere Zelle im sortierten Bereich der Spalte A, so blieb sie eine Mehrzeilerzelle, sonst nicht. Mit der Option "auch Zellformate" beim Sortieren, lässt sich das konsistente Verhalten (Zelleigenschaften bleiben beim Sortieren erhalten) erzwingen.

Das Verhalten von RagTime bei "SetzeZelle" ist meiner Meinung nach somit kein Bug, sondern ein unbedingt erforderliches "Feature"!

Gruss, Thomas


the mailing list <ragtime@macnews.de>. To unsubscribe, E-mail to: <ragtime-off@macnews.de> To switch to the DIGEST mode, E-mail to <ragtime-digest@macnews.de> To switch to the INDEX mode, E-mail to <ragtime-index@macnews.de> Send administrative queries to <ragtime-request@macnews.de>

Re: Löschen mit SetzeZelle funktioniert nicht logisch

#9528 On 25 Mai, 2010 13:31 Thomas Kaegi said,

Hallo Jörg

Vorerst das: Bitte lösch jeweils das erhaltene Mail beim Antworten. Im Webforum stehen sonst mehrmals die genau gleichen Texte untereinander und das macht die Geschichte furchtbar unübersichtlich. Natürlich kannst du einen Satz als Zitat drin lassen, wenn das zum Verständnis hilft.

Ich muss dir Recht geben!
Wenn der Inhalt einer Zelle manuell gelöscht wird, so heisst es nachher in der Werkzeugleiste "Leer" (mit aktivem Mehrzeilerzeichen), egal ob die ganze Zelle beim Betätigen der Löschtaste ausgewählt ist, oder der gesamte darin enthaltene Text. - Wird dagegen mit "SetzeZelle('';xx)" gelöscht, dann bleiben "Mehrzeiler" und das ebenfalls aktive Mehrzeilerzeichen angezeigt. Das Sortierverhalten ist dann verständlicherweise unterschiedlich, weil ein leerer Text (im Unterschied zu einer leeren Zelle) vor dem A eingereiht wird. Wenn dem nicht so wäre, dann würde ja z.B. beim Sortieren Meierhofer vor Meier eingereiht, was natürlich nicht sein darf.

Dieses inkonsequente Verhalten riecht schon ein wenig nach Bug. - Aber es gibt auch eine einfachere Abhilfe als ein AppleScript: Schreib den Befehl so: "SetzeZelle(yy;xx)", wobei yy die Referenz zu einer Zelle ist, die eben Leer ist.

Gruss, Thomas

Re: Löschen mit SetzeZelle funktioniert nicht logisch

#9531 On 25 Mai, 2010 16:24 Jörg Bornemann said,

Hallo Thomas,
danke für den Tipp!
- Jörg