Leere Felder an Makros übergeben?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Falkan
Beiträge: 6
Registriert: So, 09.04.2006 20:48

Leere Felder an Makros übergeben?

Beitrag von Falkan »

Hallo,

wenn ich ein Makro aufrufe, bekommt dieses eine "0" übergeben, wenn das Feld leer ist. Wenn die Funktion mit Strings arbeiten soll, ist das nicht das gewünschte.

Beispiel:

Code: Alles auswählen

function zusammen( a as string, b as string ) as string
  zusammen = a & b
end function
Ich helfe mir momentan damit, dass ich in die Zelle anstatt:

Code: Alles auswählen

=zusammen(A1;A2)
das folgende schreibe

Code: Alles auswählen

=zusammen(isblank(a1;"";a1);isblank(a2;"";a2))
Geht das schöner?

Grüße
Falkan
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Falkan,

Geht das schöner?
Nein, nicht in deiner Konstellation. Eine Zelle kann 4 Inahltstypen aufnehmen: Texte (Strings), Werte (Zahlen, Datum- und Zeitwerte), Formeln und - eben nichts. Das "Nichts" wird intern als eigener Zustand verwaltet, als "leere" Zelle sozusagen.
Mit dem Zellbezug =A1 wird nun der interne Interpreter angewiesen, den Inhalt auszulesen und entsprechend aufzubereiten. Das "Nichts" ist eben auch ein Zustand. Im Makro selbst fragst du den Textzustand ab (a as string) - und der ist eben "0" - als Ergebnis der leeren Zelle.

Entweder fängst du das Ergebnis im Makro selbst ab oder eben so, wie du das gemacht hast. Wahrscheinlich wäre die Makrolösung bequemer.

Code: Alles auswählen

function zusammen( a as string, b as string ) as string
  if a = "0" then a = ""
  if b = "0" then b = ""
  zusammen = a & b
end function
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Verlege die Prüfung in die Funktion:

Code: Alles auswählen

function zusammen( a as string, b as string ) as string

if NOT ( a > "") then
  a = ""
end if
' .... more code to come
Ist das "schöner"?
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)
Falkan
Beiträge: 6
Registriert: So, 09.04.2006 20:48

Beitrag von Falkan »

Danke für die Antworten!

Ich hatte vergessen zu sagen, dass in meinem Anwendungsfall der String durchaus "0" sein kann, d.h. ich muss zwischen "0" und "" unterscheiden können.

Muss ich also bei meiner Krücke bleiben...

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

Beitrag von komma4 »

...wenn die Null als Eingabe vorkommen kann, dann zieht "meine" Prüfung aber korrekt.

Wenn eine Eingabe vorhanden ( a > "" ) , dann wird diese bearbeitet.
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)
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Wilfried,
dann zieht "meine" Prüfung aber korrekt.
Leider nicht. Die ist nämlich immer erfüllt! Lies noch mal den Thread von ganz vorne: Auch wenn die Zelle Leer ist, nimmt "a" den Wert "0" an, die Variable "a" ist also nie leer, wenn sie übergeben wird.

@ Falkan:

dann mussst du die Prüfung tatsächlich in die Tabelle verlegen. Mit der Funktion ISTLEER() oder eben ISBLANK(). Allerdings scheint mir dein Code nicht zu funktionieren:

Code: Alles auswählen

=zusammen(isblank(a1;"";a1);isblank(a2;"";a2))
die Funktion erwartet ja nur einen Parameter - nicht drei. funktionieren würde es mit einer "Wenn" Formel:

Code: Alles auswählen

=Zusammen(wenn(istleer(a1);"";A1);wenn(istLeer(a2);"";a2))
so sollte es funktionieren.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Mist, Thomas, da hast Du recht....
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)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ich möchte doch noch eine Alternative erwähnen(*):

man könnte auch so aufrufen:

=ZUSAMMEN("A1";"A2")

und die Funktion ZUSAMMEN() entsprechend gestalten, dann ließe sich der Inhaltstyp prüfen und ein Wert 0 richtig einordnen.
Natürlich besteht der Nachteil das die Zellbezüge beim Kopieren der Formel nicht angepasst werden, aber vielleicht würde 'Falkan' das ja akzeptieren wollen.

@Falkan
War DEine Frage eher grundsätzlicher Natur? Denn im Speziellen würde doch eine Zellformel:
=VERKETTEN(A1;A2)
oder
=A1&A2

das Gewünschte leisten.



Gruß
Stephan

(*)
Sorry, ich weiß das ihr (Thomas, Winfried) das wisst, nur vielleicht hättet ihr es erwähnen können, denn es könnte ja sein das die Lösung ggf. akzeptabel ist
Falkan
Beiträge: 6
Registriert: So, 09.04.2006 20:48

Beitrag von Falkan »

@toxitom: Klar, ich meinte natürlich

Code: Alles auswählen

if(isblank(a2);"";a2)
.Isblank alleine wäre noch nicht hässlich genug gewesen, um mich an das Forum zu wenden :-)

@stephan: Nee, ich wollte schon "Tabellenkalkulation" machen ;-)

Danke an alle.
-- Holger
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

@stephan: Nee, ich wollte schon "Tabellenkalkulation" machen
Ja, das war mir klar, meine Frage mit grundsätzlich bezog sich darauf ob Du grunsätzlich wissen wolltest wie Du in einer benutzerdefinierten Funktion feststellst ob eine Zelle leer oder 0 ist.

Geht es hingegen nur um die spezielle benutzerdefinierte Funktion ZUSAMMEN() frage ich mich nach wie vor warum Du nicht VERKETTEN() verwendest, denn das erfüllt genau Deine Anforderungen.

Gruß
Stephan
Antworten