[gelöst] Formularfelder verschieben sich eingenstaendig

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

[gelöst] Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Guten Abend,

seit mehreren Versionen von OpenOffice und auch von LibreOffice (einschließlich der aktuell neusten Versionen verschieben sich meine Formular-Felder in Calc eigenständig. Und zwar egal, ob ich die Position des Feldes fixiere oder nicht. Egal ob ich an die Zelle oder an die Seite binde. Oft sehe ich die Verschiebung nach dem Speichern und wieder Öffnen. Wenn man dann intensiv in einer Tabelle arbeitet, verschieben sich die Felder im Laufe der Zeit immer weiter. Auch das Zoomen scheint den Feldern nicht zu bekommen. Innerhalb kurzer Zeit (ein Tag drin arbeiten) macht oft schon 1 bis 3 Milimeter Verschiebung aus.
Habe im Netz nur Threads gefunden, die das Problem auch haben, aber keine echte Lösung.

Was ist da los und gibt es vielleicht ja doch eine Lösung?

Ich füge mal zwei Fotos mit an. Nach dem Ausrichten durch den Befehl "An Zellgröße Anpassen" (in libreOffice) stehen die Felder in Reih und Glied. Nach einer Weile, gibt es dann immer mehr Verschiebungen.
Nach dem korrekten Ausrichten der Felder.jpg
Nach dem korrekten Ausrichten der Felder.jpg (24.46 KiB) 3114 mal betrachtet
Nach einer Weile.jpg
Nach einer Weile.jpg (24.13 KiB) 3113 mal betrachtet
Das sieht jetzt nur nicht so schön aus, nach nem halben Jahr kann es dann Verschiebungen von mehreren Millimetern geben.

Beste Grüße

Rupp
Zuletzt geändert von Rupp am Sa, 03.04.2021 01:16, insgesamt 1-mal geändert.
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Jetzt sieht es schon so aus:
noch_weiter_verschoben.jpg
noch_weiter_verschoben.jpg (38.76 KiB) 3054 mal betrachtet
Hat niemand eine Idee dazu oder Erfahrungen?
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von mikeleb »

Hallo,
soweit ich mich erinnere taucht das Problem dann auf, wenn viele Formularelemente existieren.
Schwierig wird es, weil die Beobachtung "verschieben sich die Felder im Laufe der Zeit immer weiter" schwer nachvollziehbar sind. Wenn ich ein leeres Dokument hernehme und ein paar Listenfelder anlege beobachte ich es nicht.
Kannst du uns die Datei oder einen Teil daraus hier zum Testen zur Verfügung stellen?
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von mikeleb »

Hallo,
noch eine Ergänzung: Die Bilder zeigen Beispiel, in denen ich Dropdowns per Gültigkeit für sinnvoller halte. Die wären optisch "sicher". Das klärt zwar deine Frage nicht, würde aber helfen.
Gruß,
mikeleb
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Danke mikeleb,

ja das stimmt ... habe jetzt auch schon damit begonnen damit umzubauen. Da ich aber für Datums- und Zeiteingaben gerne Felder benutze (weil das die Eingabe sicherer und einfacher macht) hatte ich gedacht, das es besser sei alle Eingaben mit Feldern zu machen. Dann kann man schön mit der Tab-Taste von Feld zu Feld wechseln.

Wenn ich aber für die Verschiebungen keine Lösung finde, werde ich solch einer Hybridlösung (Felder nur für Datum und Zeit) arbeiten.

Rupp
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von mikeleb »

Hallo,
ich weiß, dass ich in einem ähnlichen Fall erst per Makro die Elemente exakt positionieren konnte und dann waren sie fixiert.
Gruß,
mikeleb
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

mikeleb :

OK - dann würde ich das gerne für die 4 Datums-Felder machen, die anderen Eingaben lasse ich dann über Gültigkeit direkt in den Zellen laufen.

Könntest Du mir exemplarisch schreiben, wie ich das mit Makro machen kann für die 4 Felder? Das Problem dabei könnte sein, dass sich die gleichen 4 Felder in vielen Sheets wiederholen. Ich habe ein Vorlage-Sheet, dass ich dann über ein Makro in ein neues Sheet kopiere. Und so kann es sein, dass es am Ende des Jahres 40 Sheets sind, die alle aus dem einen Vorlage-Sheet entstanden sind.

Müsste ich das Makro dann an jedes Sheet binden? Als Ereignis "Dokument aktivieren"?
Oder immer beim Speichern (oder Öffnen) einmal über alle Sheets laufen lassen?

Meine 4 Felder sind:

oActiveSheet = oDoc.currentController.ActiveSheet
oKontroll1 = oActiveSheet.Drawpage.Forms.getByName("Formular").getByName("Datumsfeld 1")
oKontroll2 = oActiveSheet.Drawpage.Forms.getByName("Formular").getByName("Zeitfeld 1")
oKontroll3 = oActiveSheet.Drawpage.Forms.getByName("Formular").getByName("Datumsfeld 2")
oKontroll4 = oActiveSheet.Drawpage.Forms.getByName("Formular").getByName("Zeitfeld 2")

Denn ich denke nicht, dass das Makro nur einmalig ausgeführt werden muss. Oder?

PS. Es ändert sich übrigens in machen Fälle nicht nur die Position sondern auch die Größe?
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von mikeleb »

Hallo,
das folgende Makro setzt alle Formularfelder, die an einer Zelle verankert sind, auf die Größe der Zelle und positioniert sie darin.

Code: Alles auswählen

sub formularfelder_einpassen
	odoc=thiscomponent
	otab=odoc.currentController.ActiveSheet
	oDrawPage = otab.getDrawPage()
	for i=0 to odrawpage.getcount()-1
		oObj=odrawpage.getByIndex(i)
		oAnker=oobj.anchor
		if oAnker.supportsservice("com.sun.star.table.Cell") then
			oSize=oObj.Size
			oSize.height=oAnker.size.height
			oSize.width=oAnker.size.width
			oObj.size=oSize
			oPos=oAnker.Position
			oObj.Position=oPos
					
		end if
	next
end sub
Denn ich denke nicht, dass das Makro nur einmalig ausgeführt werden muss.
Das kommt auf einen Test an. Ich würde es zunächst einmalig machen und sehen, ob es reicht. Ich bin fest davon überzeugt, dass es reicht.
Wenn nicht, kann man es immer noch an ein Tabellenereignis oder das Laden der Datei koppeln.
Gruß,
mikeleb
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Tolles Makro mikeleb,
läuft auf Anhieb gut wie es soll 8)
Aber es richtet auch nicht auf Dauer - warum auch immer das nicht geht (habs in neuster LO-Version und OO-Version probiert).
Wenn ich es dann dem Sheet als Ereignis zuweise, wird jedes Mal beim Aktivieren des Sheets alles gerade gerückt. Das ist gut so!
Habe jetzt trotzdem noch ein Problem. Ich arbeite ja mit einem Vorlage-Sheet, das ich dann immer wieder kopiere. Leider werden die zugewiesenen Ereignisse nicht mit kopiert. Daher müsste ich meinem Kopier-Makro noch die Möglichkeit geben, nach dem Kopieren des Vorlagesheets dem neuen Sheet per Makro auch noch das von Dir geschriebene Makro "Formularfelder_einpassen" als Ereignis (Dokument aktivieren) zuweisen.
Habe diese Möglichkeit leider weder hier noch bei Dannenhöfer gefunden. Eventuell hier: http://oooforum.de/viewtopic.php?t=73626 . Aber das verstehe ich nicht wirklich.
Könntest Du mir da auch noch mit helfen=
Beste Grüße
Rupp
Anbei zwei Screens, die die ungewollte Verschiebung und Größenänderung zeigen:
So sollte es sein.jpg
So sollte es sein.jpg (77.7 KiB) 2977 mal betrachtet
Verschoben.jpg
Verschoben.jpg (71.9 KiB) 2977 mal betrachtet
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Habe jetzt das Makro aus Thread http://oooforum.de/viewtopic.php?t=73626 fast anpassen können. Es ordnet dann das Makro wie in dem Thread gewünscht dem Ereignis "Inhalt geändert" ("OnChange") zu. Ich bräuchte dann das selbe für "Dokument aktivieren". Dafür fehlt mir dann die hier statt "OnChange" einzusetzende englische Bezeichnung.

Also statt "oDoc.Sheets.getByName(BlattName).Events.ReplaceByName("OnChange", Props())"
was?
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Juhu - jetzt habe ich es doch noch selbst gefunden. Für alle, die das vielleicht mal suchen hier alle Bezeichnungen für die verschiedenen Ereignisse:

Event names available: "OnFocus", "OnUnfocus", "OnSelect", "OnDoubleClick", "OnRightClick", "OnChange","OnCalculate"

Ich brauche davon: oDoc.Sheets.getByName(BlattName).Events.ReplaceByName("OnFocus", Props())
Rupp
**
Beiträge: 46
Registriert: Mi, 27.01.2010 08:33
Kontaktdaten:

Re: Formularfelder verschieben sich eingenstaendig

Beitrag von Rupp »

Das ganze Makro zum zuweisen sieht dann so aus:

Code: Alles auswählen

Sub Makro_als_Tabellen_Ereignis_zuweisen

	Dim Props(1) as new com.sun.star.beans.PropertyValue
	Props(0).Name = "EventType"
	Props(0).Value = "Script"
	Props(1).Name = "Script"
	Props(1).Value = "vnd.sun.star.script:DeinBibliothekName.DeinModuleName.DeinMakroName?language=Basic&location=document"

	odoc = ThisComponent
	oBlattname = "Dein Sheetname"
	
	oDoc.Sheets.getByName(oBlattName).Events.ReplaceByName("OnFocus", Props())

end sub
Antworten