Makro in einer wenn-Funktion aufrufen
Moderator: Moderatoren
Makro in einer wenn-Funktion aufrufen
Hallo,
ich habe bisher mit eurer Hilfe geschafft, ein Makro einzurichten, das mir das aktuelle Datum in eine Zelle schreibt und es dort unverändert behält.
Nun möchte ich erreichen, dass dieses Datum nur dann erscheint, wenn in einer anderen Zelle eine Eingabe gemacht wird.
Das Datum soll also in A1 erscheinen, wenn in A2 ein 'x' geschrieben wird:
=wenn(A2=x;makro_ausführen;A1=""). Geht das?
Vielen Dank schon mal
Wolfgang
ich habe bisher mit eurer Hilfe geschafft, ein Makro einzurichten, das mir das aktuelle Datum in eine Zelle schreibt und es dort unverändert behält.
Nun möchte ich erreichen, dass dieses Datum nur dann erscheint, wenn in einer anderen Zelle eine Eingabe gemacht wird.
Das Datum soll also in A1 erscheinen, wenn in A2 ein 'x' geschrieben wird:
=wenn(A2=x;makro_ausführen;A1=""). Geht das?
Vielen Dank schon mal
Wolfgang
Hey Wolfgang,
hast du es denn mal ausprobiert? Das ist immer das einfachste - dann hättest du gesehen: natürlich geht es
Nur die Formel müsste lauten:
Gruss
Thomas
hast du es denn mal ausprobiert? Das ist immer das einfachste - dann hättest du gesehen: natürlich geht es

Nur die Formel müsste lauten:
Code: Alles auswählen
=wenn(A2="x";makro_ausführen;"")
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
@toxitom
Danke für deine schnelle Antwort.
Ich habe trotzdem noch ein Problem.
Mein Makro heißt 'aktuelles_datum' und ist in der Makro-Bibliothek in 'Meine Makros/Standard/Module1/aktuelles_datum' hinterlegt. Wie wird das jetzt in die Formel gebracht?
=WENN(A2="x";aktuelles_datum;"") funktioniert nicht, auch alle anderen Kombinationen, die ich versucht habe, klappen nicht.
Beseitige doch bitte mein Brett vor dem Kopf.
Danke
Wolfgang
Danke für deine schnelle Antwort.
Ich habe trotzdem noch ein Problem.
Mein Makro heißt 'aktuelles_datum' und ist in der Makro-Bibliothek in 'Meine Makros/Standard/Module1/aktuelles_datum' hinterlegt. Wie wird das jetzt in die Formel gebracht?
=WENN(A2="x";aktuelles_datum;"") funktioniert nicht, auch alle anderen Kombinationen, die ich versucht habe, klappen nicht.
Beseitige doch bitte mein Brett vor dem Kopf.
Danke
Wolfgang
Hey Wolfgang,
was heissgt "klappt nicht"? Was steht denn in der Zelle?
Funktioniert das Makro, wenn du es mit "=aktuelles_datum()" direkt in einer Zelle ausführst?
Ahh, hast du auch die Klammern gesetzt? sonst vermutet OOo einen Bereichsnamen - und in der Zelle steht "Name?"
Also, genauer beschreiben, wo es hängt, Screenshots zur Verfügung stellen, zur Not Datei zum Download anbieten... dann finden wir den Fehler
Gruss
Thomas
was heissgt "klappt nicht"? Was steht denn in der Zelle?
Funktioniert das Makro, wenn du es mit "=aktuelles_datum()" direkt in einer Zelle ausführst?
Ahh, hast du auch die Klammern gesetzt? sonst vermutet OOo einen Bereichsnamen - und in der Zelle steht "Name?"
Also, genauer beschreiben, wo es hängt, Screenshots zur Verfügung stellen, zur Not Datei zum Download anbieten... dann finden wir den Fehler

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
ich schaffe es nicht
@toxitom
Ich glaube, ich werde deine Hilfe noch mal brauchen.
Die Klammern hatte ich tatsächlich nicht benutzt, habe sie jetzt eingefügt, in der Zelle steht dann '#NAME?' und unten rechts in der Statuszeile 'Fehler:ungültiger Name'.
Habe leider keine Möglichkeit einen Screenshot ins Netz zu stellen, deswegen hier eine möglichst geneue Beschreibung der Situation.
Ich habe, wie in meinem ersten Beitrag geschrieben, ein Makro mit dem Namen 'aktuelles_datum' in der Makro-Bibliothek in 'Meine Makros/Standard/Module1/aktuelles_datum'.
Wenn ich in einer Zelle dieses Makro ausführe über Extras/Makros/Makros verwalten/... usw., dann bekomme ich das Datum in die Zelle.
Wenn ich in die Zelle schreibe '=aktuelles_datum()', dann erscheint in der Zelle nur '#NAME?', ebenso wenn ich in die Zelle die Bedingung =WENN(A2="x";aktuelles_datum();"") schreibe.
Ich kann nur vermuten, dass Calc das Makro nicht findet, habe auch schon probiert, das Makro in der Makrobibliothek in dem Pfad des betreffenden Dokumentes abzulegen, hat aber nichts verändert.
Wenn mir noch mal jemand einen Tipp geben könnte, wäre ich sehr dankbar.
Wolfgang
Ich glaube, ich werde deine Hilfe noch mal brauchen.
Die Klammern hatte ich tatsächlich nicht benutzt, habe sie jetzt eingefügt, in der Zelle steht dann '#NAME?' und unten rechts in der Statuszeile 'Fehler:ungültiger Name'.
Habe leider keine Möglichkeit einen Screenshot ins Netz zu stellen, deswegen hier eine möglichst geneue Beschreibung der Situation.
Ich habe, wie in meinem ersten Beitrag geschrieben, ein Makro mit dem Namen 'aktuelles_datum' in der Makro-Bibliothek in 'Meine Makros/Standard/Module1/aktuelles_datum'.
Wenn ich in einer Zelle dieses Makro ausführe über Extras/Makros/Makros verwalten/... usw., dann bekomme ich das Datum in die Zelle.
Wenn ich in die Zelle schreibe '=aktuelles_datum()', dann erscheint in der Zelle nur '#NAME?', ebenso wenn ich in die Zelle die Bedingung =WENN(A2="x";aktuelles_datum();"") schreibe.
Ich kann nur vermuten, dass Calc das Makro nicht findet, habe auch schon probiert, das Makro in der Makrobibliothek in dem Pfad des betreffenden Dokumentes abzulegen, hat aber nichts verändert.
Wenn mir noch mal jemand einen Tipp geben könnte, wäre ich sehr dankbar.
Wolfgang
Hey Wolfgang,
poste bitte mal den Makrocode des Makros "aktuelles_Datum".
Also, ich hatte das mal kurz nachgestellt - hier funktioniert es ohne Probleme. Sicher, dass du keine Rechtschreibfehler drin hast?
Die Bibliothek ist OK, die wird üblicherweise automatisch geladen....
Gruss
Thomas
poste bitte mal den Makrocode des Makros "aktuelles_Datum".
Also, ich hatte das mal kurz nachgestellt - hier funktioniert es ohne Probleme. Sicher, dass du keine Rechtschreibfehler drin hast?
Die Bibliothek ist OK, die wird üblicherweise automatisch geladen....
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo
folgendes Makro habe ich aus den Untiefen des Forums und, wie gesagt, es funktioniert, wenn ich auf 'Makro ausführen' klicke.
sub aktuelles_datum
odoc=thisComponent
oZelle=oDoc.getCurrentSelection()
' Prüfen ob es sich um eine Zelle oder einen Bereich handelt
checkzelle=HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if checkzelle then
oZelle.string=date
else
msgbox "Mehrere Zellen markiert"
end if
end sub
Ich habe es sogar geschafft, eine Tastenkombination und einen Button zu erstellen. Eigentlich reicht das für meine Zwecke, aber jetzt ist mein sportlicher Ehrgeiz erwacht. Das Aufrufen in einer 'wenn-Funktion' muss doch irgendwie klappen. Tippfehler sind keine drin, definitiv.
@toxitom
Eigentlich hoffe ich ja auf deine sportliche Leistung.
Wenn du mir weiterhin helfen willst, fände ich das natürlich klasse, aber wie gesagt, kann ich auch mit dem bisher Erreichten leben.
Vielen Dank
Wolfgang
folgendes Makro habe ich aus den Untiefen des Forums und, wie gesagt, es funktioniert, wenn ich auf 'Makro ausführen' klicke.
sub aktuelles_datum
odoc=thisComponent
oZelle=oDoc.getCurrentSelection()
' Prüfen ob es sich um eine Zelle oder einen Bereich handelt
checkzelle=HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if checkzelle then
oZelle.string=date
else
msgbox "Mehrere Zellen markiert"
end if
end sub
Ich habe es sogar geschafft, eine Tastenkombination und einen Button zu erstellen. Eigentlich reicht das für meine Zwecke, aber jetzt ist mein sportlicher Ehrgeiz erwacht. Das Aufrufen in einer 'wenn-Funktion' muss doch irgendwie klappen. Tippfehler sind keine drin, definitiv.
@toxitom
Eigentlich hoffe ich ja auf deine sportliche Leistung.
Wenn du mir weiterhin helfen willst, fände ich das natürlich klasse, aber wie gesagt, kann ich auch mit dem bisher Erreichten leben.
Vielen Dank
Wolfgang
Naja, nun ist zugegeben zwar im ganzen Thread die Rede von "Makro", nur weder ich, noch nehme ich an Thomas meinte das im Wortsinn, weil doch klar war das es um eine benutzerdefinierte Funktion geht.sub aktuelles_datum
odoc=thisComponent
oZelle=oDoc.getCurrentSelection()
' Prüfen ob es sich um eine Zelle oder einen Bereich handelt
checkzelle=HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if checkzelle then
oZelle.string=date
else
msgbox "Mehrere Zellen markiert"
end if
end sub
Nennst Du das im Code selbst Funktion, sollte doch alles 'klar' sein, zumindest sehe ich weiter nichts.
Also:
Function aktuelles_datum
odoc=thisComponent
oZelle=oDoc.getCurrentSelection()
' Prüfen ob es sich um eine Zelle oder einen Bereich handelt
checkzelle=HasUnoInterfaces( oZelle, "com.sun.star.table.XCell" )
if checkzelle then
oZelle.string=date
else
msgbox "Mehrere Zellen markiert"
end if
end Function
Gruß
Stephan
Hallo Wolfgang,
nein, das funktioniert nicht! Das, was du postest, ist ein Makro, keine eigene Funktion. Mit der Funktion bekommst du das Datum nicht rein.
Nutze die einfachste Varainte:
Das sollte funktionieren, auch in deiner Wenn-Formel 
Gruss
Thomas
nein, das funktioniert nicht! Das, was du postest, ist ein Makro, keine eigene Funktion. Mit der Funktion bekommst du das Datum nicht rein.
Nutze die einfachste Varainte:
Code: Alles auswählen
function aktuelles_Datum
aktuelles_Datum = date()
end function

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Mit der Funktion bekommst du das Datum nicht rein.
Ja, das hatte ich übersehen.
@Wolfgang
Aber ich verstehe nun nicht worum es geht:
Du willst so aufrufen:
die Fehlermeldung:=WENN(A2="x";aktuelles_datum();"")
erscheint meines Erachtens wegen Sub statt Function, nur frage ich mich worum es Dir geht, weil:#NAME?
das was Thomas schreibt:
Mit der Funktion bekommst du das Datum nicht rein.
ist völlig korrekt, weil das:
Code: Alles auswählen
oZelle.string=date
Code: Alles auswählen
function aktuelles_Datum
aktuelles_Datum = date()
end function
Falls es hingegen nicht so gemeint war verstehe ich den ganzen Aufwand nicht, da doch eine benutzedefinierte Funktion nicht nötig ist, es reicht doch dann HEUTE().
Oder was übersehe ich?
Gruß
Stephan
Hallo
So, da haben wir uns aber im Kreis gedreht. Ich schrieb 'Makro' und meinte 'Makro', ihr habt 'Makro' geschrieben und meintet 'Funktion'.
Ich habe in meiner Formel also versucht eine Funktion mit einem Makro zu verbinden und das geht nicht.
Nun gut, bleib ich bei meiner Tastenkombination.
@toxitom
Dein letzter Vorschlag funktioniert ja wie 'heute()', verändert also beim nächsten Öffnen der Datei das Datum wieder auf den aktuellen Wert. Ich möchte aber, wie in meinem ersten Beitrag geschrieben, dass die Zelle A1 zB. das Datum 1. 5.2007 enthält, wenn ich in A2 ein "x" reinschreibe und dass auch noch Tage später, zB am 4. 5.2007, das Datum 1. 5.2007 stehenbleibt. Mit dem Makro und der Tastenkombination schaffe ich genau das.
Vielen Dank für Eure Mühen
Wolfgang
So, da haben wir uns aber im Kreis gedreht. Ich schrieb 'Makro' und meinte 'Makro', ihr habt 'Makro' geschrieben und meintet 'Funktion'.
Ich habe in meiner Formel also versucht eine Funktion mit einem Makro zu verbinden und das geht nicht.
Nun gut, bleib ich bei meiner Tastenkombination.
@toxitom
Dein letzter Vorschlag funktioniert ja wie 'heute()', verändert also beim nächsten Öffnen der Datei das Datum wieder auf den aktuellen Wert. Ich möchte aber, wie in meinem ersten Beitrag geschrieben, dass die Zelle A1 zB. das Datum 1. 5.2007 enthält, wenn ich in A2 ein "x" reinschreibe und dass auch noch Tage später, zB am 4. 5.2007, das Datum 1. 5.2007 stehenbleibt. Mit dem Makro und der Tastenkombination schaffe ich genau das.
Vielen Dank für Eure Mühen
Wolfgang
Gibt es noch andere Wege, aber verwende doch folgenden 'Trick':Ich möchte aber, wie in meinem ersten Beitrag geschrieben, dass die Zelle A1 zB. das Datum 1. 5.2007 enthält, wenn ich in A2 ein "x" reinschreibe und dass auch noch Tage später, zB am 4. 5.2007, das Datum 1. 5.2007 stehenbleibt.
Makro ist z.B.:
Code: Alles auswählen
Sub schreiben
zelle = ThisComponent.Sheets(0).GetCellByPosition(0,0)
If zelle.string = "" Then zelle.string = date()
End Sub
Zulassen: Textlänge
Daten: gleich
Wert 3
Wähle im Register "Fehlermeldung" unter Aktion Makro aus und weise obenstehendes Makro zu.
Sollte tun was Du willst.
Gruß
Stephan
Hallo Wolfgang,
ja, sorry, so entwickelt sich manchmal ein eigenes Leben im Thread
Also: Dein Vorhaben ist so nicht realisierbar. Alle Funktionen in einer Tabellenkalkulation sind immer relativ- d.h., sie werden immer neu berechnet. Das könntest du zwar ausschalten - nur dann geht auch sonst nichts mehr. Zu den Funktionen zählen dann auch benutzerdefinierte Funktionen.
Mit Makros kannst du Zellwerte schreiben - absolut. Aber eben nicht als Funktion! Also musst du deine Tabelle vom Arbeitsfluss umbauen. Muss es ein "x" in einer Zelle sein? Würde nicht es nicht auch ein Button tun? Dem Buton kannst du ein Ereignis zuordnen - z.B. beim Auslösen, führe Makro xy aus. Das Makro dann prüft, ob deine Datumszelle noch leer ist und schreibt das aktuelle Datum rein , wenn sie schon belegt ist, dann schreibt sie eben nix rein.
Vom Aufwand ist es das gleiche ("x" eintragen oder Button drücken - jeweils eine Aktion) Falls du das "x" noch wo anders brauchst, könnte das natürlich vom Makro auch gleich eingetragen werden.
Also, so würde ich wohl eine Lösung sehen.
Viele Grüße
Thomas
ja, sorry, so entwickelt sich manchmal ein eigenes Leben im Thread

Also: Dein Vorhaben ist so nicht realisierbar. Alle Funktionen in einer Tabellenkalkulation sind immer relativ- d.h., sie werden immer neu berechnet. Das könntest du zwar ausschalten - nur dann geht auch sonst nichts mehr. Zu den Funktionen zählen dann auch benutzerdefinierte Funktionen.
Mit Makros kannst du Zellwerte schreiben - absolut. Aber eben nicht als Funktion! Also musst du deine Tabelle vom Arbeitsfluss umbauen. Muss es ein "x" in einer Zelle sein? Würde nicht es nicht auch ein Button tun? Dem Buton kannst du ein Ereignis zuordnen - z.B. beim Auslösen, führe Makro xy aus. Das Makro dann prüft, ob deine Datumszelle noch leer ist und schreibt das aktuelle Datum rein , wenn sie schon belegt ist, dann schreibt sie eben nix rein.
Vom Aufwand ist es das gleiche ("x" eintragen oder Button drücken - jeweils eine Aktion) Falls du das "x" noch wo anders brauchst, könnte das natürlich vom Makro auch gleich eingetragen werden.
Also, so würde ich wohl eine Lösung sehen.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic