Function EDATE

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Function EDATE

Beitrag von Gino »

Hallo Experten,

kann mir bitte einer sagen wie ich die Function "EDATE" ans Laufen bekomme.

Code: Alles auswählen

Sub Example_Edate
Dim lDate as Long

	lDate = DateSerial(2009, 4, 9)
	oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	result = oFunctionAccess.callFunction("EDATE",array(lDate,2)
end Sub
Bei obigem Code kommt die Fehlermeldung:
Basic Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.container.noSuchElementException
Ich habe schon einiges versucht, aber es will einfach nicht.
Auch die Suche hier im Forum noch mit Google konnte mir nicht weiterhelfen.

Es geht mir einfach darum ein Datum ein paar Monate weiter auszugeben.

Ich würde mir freuen, wenn mir jemand weiterhelfen könnte. :D
Vielen Dank im voraus.

Gino
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Function EDATE

Beitrag von Charly »

Hallo Gino!

Ich glaube die Funktion EDATE (auf Deutsch Edatum) lässt sich nicht mit dem FunctionAcces abbilden. Wenn ich nämlich die deutsche Funktion in eine Zelle eingebe und die Formel mit dem Befehl zelle.formula abfrage erhalte ich als Antwort: "=com.sun.star.sheet.addin.analysis.getEdate". Das steht bei den normalen Funktionen nicht so da.

Aber die Monatsverschiebung könntest du auch folgendermaßen programmieren.

Code: Alles auswählen

Sub Example_Edate
Dim lDate as Long

   lDate = DateSerial(2009, 4, 9)
   
   result = DateSerial(Year(lDate),Month(lDate)+2,Day(lDate)
   MSGBox(result)
end Sub
Vielleicht hilft dir das weiter.

Gruß
Charly
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Function EDATE

Beitrag von Gino »

Hallo Charly,

erstmal Danke für die schnelle Antwort.

Die Grundidee von Dir ist wirklich gut. Sie hat aber leider einen Haken. Der Code berücksichtigt leider keinen Jahreswechsel.
Somit funktioniert:

Code: Alles auswählen

Sub Example_Edate
Dim lDate as Long

   lDate = DateSerial(2009, 12, 9)
   
   result = DateSerial(Year(lDate),Month(lDate)+2,Day(lDate)
   MSGBox(result)
end Sub
leider nicht. :(

Ich denke jetzt wird es kompliziert.

Nochmals Danke.

Gino
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Function EDATE

Beitrag von Charly »

Hallo Gino!

Ich habe mein Makro noch ausgebaut, damit auch jahresübergreifende Verschiebungen möglich sind. Zum Testen habe ich es als Funktion geschrieben.

Code: Alles auswählen

Function Monatsverschiebung(Datum,Zahl)

Jahr = Year(Datum)
Monat = Month(Datum)
Tag = Day(Datum)

Monat = Monat + Zahl

If Monat < 1 then 
Monat = Monat + 12
Jahr = Jahr - 1
end if

If Monat > 12 then
Monat = Monat - 12
Jahr = Jahr + 1
end if

result = DateSerial(Jahr,Monat,Tag)

Monatsverschiebung = result

end function
Gruß
Charly
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Function EDATE

Beitrag von Gino »

Hi Charly,

Das funktioniert ja prächtig. Tausend Dank.
Das bringt mich wieder einen Riesenschritt weiter. :D

Ich habe es noch auf meien Bedürfnisse angepasst (15 Monate):

Code: Alles auswählen

Function Monatsverschiebung(Datum,Zahl)

Jahr = Year(Datum)
Monat = Month(Datum)
Tag = Day(Datum)

Monat = Monat + Zahl

If Monat < 1 then
Monat = Monat + 12
Jahr = Jahr - 1
end if

If Monat > 25 then
Monat = Monat - 24
Jahr = Jahr + 2
end if

result = DateSerial(Jahr,Monat,Tag)

Monatsverschiebung = result

end function
Schönen Abend noch.

Gino
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: Function EDATE

Beitrag von Charly »

Hallo Gino!

Ich war gestern etwas voreilig damit zu schreiben, dass die Funktion EDATE in Starbasic nicht geht. Ich habe es nochmals getestet. Die englische Bezeichnung für EDatum ist nur anders als du programmiert hast. Mit der vollständigen Bezeichnung geht es.

Code: Alles auswählen

Sub Example_Edate
Dim lDate as long

   lDate = DateSerial(2009, 4, 9)
   oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
   result = oFunctionAccess.callFunction("com.sun.star.sheet.addin.Analysis.getEdate",array(lDate,2))
   MSGBOX(format(result,"DD.MM.YY"))

end Sub
Gruß
Charly
Gino
*
Beiträge: 12
Registriert: Sa, 04.10.2008 12:43

Re: Function EDATE

Beitrag von Gino »

Guten Morgen Charly,

das ist klasse das die Function doch funktioniert.

Vielen Dank für Deinen Geistestblitz. :lol:
Da muss man erstmal drauf kommen.

Einen schönen Tag wünsche ich Dir.

Gino
Antworten