🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zeitfeld/Datumsfeld in Dialog Formatübertragung per Macro

Alles zur Programmierung im LibreOffice.
Antworten
Rubert
Beiträge: 4
Registriert: Mi 1. Nov 2017, 16:12

Zeitfeld/Datumsfeld in Dialog Formatübertragung per Macro

Beitrag von Rubert » Mo 28. Jan 2019, 17:22

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)
Dateianhänge
timedatenew.ods
(12.04 KiB) 164-mal heruntergeladen
timedatenew.GIF
timedatenew.GIF (55.34 KiB) 1798 mal betrachtet

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

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

Beitrag von mikele » Mo 28. Jan 2019, 22:30

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
Gruß,
mikele

Rubert
Beiträge: 4
Registriert: Mi 1. Nov 2017, 16:12

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

Beitrag von Rubert » Mo 28. Jan 2019, 23:28

Hi Mikele,

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

Vielen Dank für deinen Rat!


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten