Seite 1 von 1
Makro in einer wenn-Funktion aufrufen
Verfasst: Fr, 27.04.2007 15:59
von matlat
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
Verfasst: Fr, 27.04.2007 17:44
von Toxitom
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
Verfasst: Fr, 27.04.2007 19:41
von matlat
@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
Verfasst: Sa, 28.04.2007 20:09
von Toxitom
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
ich schaffe es nicht
Verfasst: So, 29.04.2007 21:41
von matlat
@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
Verfasst: Mo, 30.04.2007 19:54
von Toxitom
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
Verfasst: Di, 01.05.2007 20:01
von matlat
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
Verfasst: Di, 01.05.2007 20:47
von Stephan
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
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.
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
Verfasst: Di, 01.05.2007 21:02
von Toxitom
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:
Code: Alles auswählen
function aktuelles_Datum
aktuelles_Datum = date()
end function
Das sollte funktionieren, auch in deiner Wenn-Formel
Gruss
Thomas
Verfasst: Di, 01.05.2007 21:19
von Stephan
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:
=WENN(A2="x";aktuelles_datum();"")
die Fehlermeldung:
#NAME?
erscheint meines Erachtens wegen Sub statt Function, nur frage ich mich worum es Dir geht, weil:
das was Thomas schreibt:
Mit der Funktion bekommst du das Datum nicht rein.
ist völlig korrekt, weil das:
so nicht geht. Bloß falls es so gemeint war nutzt dann auch:
Code: Alles auswählen
function aktuelles_Datum
aktuelles_Datum = date()
end function
nichts, denn das gibt ja das Datum in die Zelle zurück in der die Funktion steht und
nicht in die selektierte Zelle, wie es Dein Makro versucht.
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
Verfasst: Di, 01.05.2007 23:40
von matlat
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
Verfasst: Di, 01.05.2007 23:57
von Stephan
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.
Gibt es noch andere Wege, aber verwende doch folgenden 'Trick':
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
markiere Zelle A2 und wähle Daten-Gültigkeit. Trage im register "Kriterien" z.B. ein:
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
Verfasst: Mi, 02.05.2007 08:14
von Toxitom
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