BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 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) 149-mal heruntergeladen
timedatenew.GIF
timedatenew.GIF (55.34 KiB) 1500 mal betrachtet

mikele
Beiträge: 1642
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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten