[gelöst] Formularfelder verschieben sich eingenstaendig
Moderator: Moderatoren
[gelöst] Formularfelder verschieben sich eingenstaendig
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.
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
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.
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.
Re: Formularfelder verschieben sich eingenstaendig
Jetzt sieht es schon so aus:
Hat niemand eine Idee dazu oder Erfahrungen?
Hat niemand eine Idee dazu oder Erfahrungen?
Re: Formularfelder verschieben sich eingenstaendig
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?
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
Re: Formularfelder verschieben sich eingenstaendig
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.
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
mikeleb
Re: Formularfelder verschieben sich eingenstaendig
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
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
Re: Formularfelder verschieben sich eingenstaendig
Hallo,
ich weiß, dass ich in einem ähnlichen Fall erst per Makro die Elemente exakt positionieren konnte und dann waren sie fixiert.
ich weiß, dass ich in einem ähnlichen Fall erst per Makro die Elemente exakt positionieren konnte und dann waren sie fixiert.
Gruß,
mikeleb
mikeleb
Re: Formularfelder verschieben sich eingenstaendig
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?
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?
Re: Formularfelder verschieben sich eingenstaendig
Hallo,
das folgende Makro setzt alle Formularfelder, die an einer Zelle verankert sind, auf die Größe der Zelle und positioniert sie darin.
Wenn nicht, kann man es immer noch an ein Tabellenereignis oder das Laden der Datei koppeln.
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
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.Denn ich denke nicht, dass das Makro nur einmalig ausgeführt werden muss.
Wenn nicht, kann man es immer noch an ein Tabellenereignis oder das Laden der Datei koppeln.
Gruß,
mikeleb
mikeleb
Re: Formularfelder verschieben sich eingenstaendig
Tolles Makro mikeleb,
läuft auf Anhieb gut wie es soll
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:
läuft auf Anhieb gut wie es soll

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:
Re: Formularfelder verschieben sich eingenstaendig
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?
Also statt "oDoc.Sheets.getByName(BlattName).Events.ReplaceByName("OnChange", Props())"
was?
Re: Formularfelder verschieben sich eingenstaendig
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())
Event names available: "OnFocus", "OnUnfocus", "OnSelect", "OnDoubleClick", "OnRightClick", "OnChange","OnCalculate"
Ich brauche davon: oDoc.Sheets.getByName(BlattName).Events.ReplaceByName("OnFocus", Props())
Re: Formularfelder verschieben sich eingenstaendig
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