DAYSINMONTH mit FunctionAccess funktioniert nicht.

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

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von balu »

Ich Grüße euch alle.

Bitte nich rummosern wegen dem Betreff, aber die Betreffzeile ist nun mal halt nicht endlos lang.

Also, ich wollt mir eigentlich mit folgendem Code die Anzahl an Tage des aktuellen Monats ausgeben lassen.

Code: Alles auswählen

Sub Main
Dim args(0) As Date
Dim oFunctionAccess as Object
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	opi = Date()
	args(0) = opi
'    print args(0)
	iTage = oFunctionAccess.callFunction( "DAYSINMONTH", args() ) ' <- Hier Fehlermeldung
		print iTage
End Sub
Das Ergebnis ist: Objektvariable nicht belegt. Die Fehlerzeile habe ich Kommentiert.
Mit der PRINT-Anweisung wird das aktuelle Datum ordnungsgemäß angezeigt. Jedoch kann ich momentan machen was ich will, es wird immer die gleiche Zeile mit Fehlermeldung markiert.

Irgendwo/irgendwie muss ich da noch nen Fehler drin haben, da ich selbst mit anderen Datums-Funktionen anstelle von DAYSINMONTH immer wieder die gleiche Fehlermeldung bekomme. Hier mal ne kleine auswahl derer die ich stattdessen genommen hatte.
EASTERSUNDAY
MONTH
ISLEAPYEAR
Ach ja! Auch die deutsche Bezeichnung für DAYSINMONTH hatt ich probiert. Funzt aber auch nicht.

Auch bei Dim hatte ich einiges probiert. Statt Date; Variant, String, hat aber nix gebracht.

Auch die Variable opi hatte ich versucht zu konvertieren.
CDate(opi)
CDateToIso(opi)
Datevalue(opi)

Nichts, aber auch gar nichts will funktionieren. Ich komme mir so langsam aber sicher echt doof vor.

Wer erlöst mich von meinem Dilemma?
Freue mich auf eure Antworten, und bedanke mich schon mal für eure Bemühungen.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von komma4 »

balu hat geschrieben:Ach ja! Auch die deutsche Bezeichnung für DAYSINMONTH hatt ich probiert. Funzt aber auch nicht.

Mmmh, naja :)

Was funktioniert, ist den deutschen Funktionsnamen zu verwenden, mit dem erwarteten Datumsformat.

Das ist nicht das Datum, wie es von Date() zurück gegeben wird (03/04/2012), sondern ein Datum im Format JJJJ-MM-TT

aus meiner Extension DateTime2:

Code: Alles auswählen

  sDateTime_DATE = CDateToISO( Now )
' now: jjjjmmtt 20051121'
' use this variable if needed

' compose a ISO formatted date
sDateTime_FISO = _
 Left( sDateTime_DATE, 4 ) & _
 cDateTime_TRENNER & _
 Mid( sDateTime_DATE, 5 , 2 ) & _
 cDateTime_TRENNER & _
 Right( sDateTime_DATE, 2 )

und dann

Code: Alles auswählen

   iTage = oFunctionAccess.callFunction( "TAGEIMMONAT", Array( sDateTime_FISO  ) )
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)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von DPunch »

Servus

Noch einfacher, ohne Stringverkettungen:

Code: Alles auswählen

	oFunctionAccess = CreateUnoService("com.sun.star.sheet.FunctionAccess")
	iTage = oFunctionAccess.callFunction( "TAGEIMMONAT", Array(CLng(Now)))
	MsgBox iTage
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von balu »

Hallo Winfried und DPunch.

Erstmal ein Danke schön für eure Ideen und Vorschläge.

komma4 hat geschrieben: Das ist nicht das Datum, wie es von Date() zurück gegeben wird (03/04/2012), sondern ein Datum im Format JJJJ-MM-TT
Das hatte ich mir auch schon so überlegt. Deshalb hatte ich ja versucht das zu konvertieren. Jedoch fehlte mir der zündende Gedanke. War einfach zu gefrustet um das zu verstehen was ich bei Dannenhöfer gelesen hatte.

DPunch hat geschrieben: Noch einfacher, ohne Stringverkettungen:
Oh ja! Da kommt Freude auf :D.
Diesen Teil Array(CLng(Now)) hatte ich so ähnlich versucht. Aber leider waren meine Versuche kläglich gescheitert, da ich nicht CLng, sondern es z.B. mit CDateToIso versuchte. Ich weiß das dies wohl blödsinn war, aber ich hatte da mittlerweile den Status erreicht "Ich bin zu doof um so etwas simples hinzubekommen". Also echt verzweifelt.

Eine winzige Änderung habe ich aber jetzt dennoch vorgenommen. Und zwar setze ich jetzt Date anstatt Now ein. Aber das dürfte ja wohl Geschmacksache sein, da in beiden Fällen die korrekte Zahl dabei rauskommt.

Aber was ja wieder echt interessant ist, dass es mit den deutschen Namen geht. Damit hatte ich nun wirklich nicht gerechnet. Auch wenn ich es versucht hatte. Das war aber mehr eine Verzweiflungstat gewesen, mehr nicht.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von DPunch »

Servus

Da z.B. Kontrollfelder ihre Date-Property in aller Regel nach dem ISO-Format beschreiben, war der Gedanke mit CDateToIso gar nicht so abwegig, zumindest auf keinen Fall Blödsinn.
Mit dem Wissen, wie Daten intern gespeichert werden (heute = 40002), liegt die Umwandlung mit CLng bzw CDbl allerdings etwas näher.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: DAYSINMONTH mit FunctionAccess funktioniert nicht.

Beitrag von balu »

Mahlzeit DPunch,
Da z.B. Kontrollfelder ihre Date-Property in aller Regel nach dem ISO-Format beschreiben, war der Gedanke mit CDateToIso gar nicht so abwegig, zumindest auf keinen Fall Blödsinn.
Danke für deine aufmunternde Worte :). Das tut mir jetzt doch gut, das ich doch nicht so total falsch gedenkt habe.

Mit dem Wissen, wie Daten intern gespeichert werden (heute = 40002), liegt die Umwandlung mit CLng bzw CDbl allerdings etwas näher.
Hast recht. Hatte mich zu sehr auf das Format des Datums konzentriert, was natürlich unter den gegebenen Umständen halt nicht ganz korrekt war.

Na ja, ich bin halt noch am lernen, und da bleiben solche "Missverständnisse" für mich halt nicht aus. Aber das wird schon noch besser werden, hoffe ich zumindest.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten