Seite 1 von 1

Zeitfeld/Datumsfeld in Dialog Formatübertragung per Macro

Verfasst: Mo 28. Jan 2019, 17:22
von Rubert
Hi Leute,

Momentan arbeite ich an einer Tabelle mit einem Dialog und Macros dafür:

Siehe Anhang Bild

Mir ist etwas interesanntes aufgefallen:

Ich habe ein Zeitfeld erstellt. Egal ob ich ein falsches Zeitformat eingebe wie bsp. "18", zeigt es "18:00" an. Das ist soweit super, denn es soll ja ein Zeitfeld sein mit korrektem Zeitformat ( Formatcheck ist an auf dem Feld)

ABER: Wenn ich meinen Eintrag aus dem Dialog in das Sheet speichere, zeigt es wieder das falsche Format an. Hier mal Beispielcode:

Code: Alles auswählen

REM  *****  BASIC  *****
	
	Dim oDialog_new_entry As Object
	
	Sub Main()
		
	DialogLibraries.LoadLibrary("Standard")
	oDialog_new_entry = CreateUnoDialog(DialogLibraries.Standard.new_entry)
	
	oDialog_new_entry.Execute()
	oDialog_new_entry.dispose()
	
	End Sub
	
	
	Sub save_entry()

	ctl_date = oDialog_new_entry.GetControl("ctl_date")
	ctl_time = oDialog_new_entry.GetControl("ctl_time")
	
	cell_date = ThisComponent.Sheets(0).getCellRangeByName("A2")
	cell_time = ThisComponent.Sheets(0).getCellRangeByName("B2")
	
	cell_date.string = ctl_date.text
	cell_time.string = ctl_time.text
	
	oDialog_new_entry.endexecute()
	
	End Sub
	
	
	
	Sub abort_entry()
	
	oDialog_new_entry.endexecute()
	
	End Sub
Das gleiche passiert übrigens beim Datumsfeld, allerdings sind da die Restriktionen bei der Eingabe größer, dennoch wenn ich beispielsweise "22.02.2018" eingebe statt dem TT:MM:JJ Format passiert das gleiche Spiel, meine eigentliche Eingabe landet im Sheet und nicht das angezeigte im Dialog.
Meine Vermutung ist ja, es liegt an meiner Übergabe sprich: Cell.String = Control.text
Leider kann ich aber nichts richtiges dazu finden, wie ich beispielsweise sowas: Cell.String = Control.time
Vielleicht könnt ihr ja helfen :)
Bild und Sheet sind im Anhang.

LibreOffice Version 6.1.3.2(x64)

Re: Zeitfeld/Datumsfeld in Dialog Formatübertragung per Macro

Verfasst: Mo 28. Jan 2019, 22:30
von mikele
Hallo,
besser/sicherer wäre es, nicht den Text sondern den Wert auszulesen und in die Zelle zu schreiben.

Code: Alles auswählen

Sub save_entry()

Dim datum as double
Dim zeit as double

'saves the entries into Sheet
ctl_date = oDialog_new_entry.GetControl("ctl_date")
ctl_time = oDialog_new_entry.GetControl("ctl_time")

cell_date = ThisComponent.Sheets(0).getCellRangeByName("A2")
cell_time = ThisComponent.Sheets(0).getCellRangeByName("B2")

if ctl_date.text<>"" then
	datum=cdatefromunodate(ctl_date.date)
	cell_date.value = datum
else
	cell_date.clearcontents(7)
end if
if ctl_time.text<>"" then
	zeit=cdatefromunotime(ctl_time.time)
	cell_time.value = zeit
else
	cell_time.clearcontents(7)
end if


oDialog_new_entry.endexecute()

End Sub

Re: Zeitfeld/Datumsfeld in Dialog Formatübertragung per Macro

Verfasst: Mo 28. Jan 2019, 23:28
von Rubert
Hi Mikele,

Danke das hat funktioniert. Ich schaue mir mal diese cdatefromunodate genauer an.

Vielen Dank für deinen Rat!