Hallo Hans-Werner,
wenn du die Bedingungen änderst, testest du aber etwas anderes! Schon
nur "zusätzlich" müsste man genau anschauen, aber du hast "stattdessen"
gemacht":
Gerade an der kniffligen Stelle, wo wir schon wissen, dass es mit dem
direkten Aufruf des Makro geht, aber nicht mit dessen Aufruf per
Schaltfläche, hast du eine dritte Variante getestet. Das ist ja nun
nicht per se falsch, man muss sich halt nur im Klaren sein, dass es
etwas anderes ist.
Dass deine Variante durchläuft, sagt ja jetzt nichts über meinen Fall:
ich habe bei deiner Datei die Schaltfläche ergänzt und den Aufruf
dorthin gelegt, und schon bleibt LibO wieder stecken. Der Aufruf über
das Dokumentereignis ist entweder dem direkten Aufruf ähnlicher, oder
das Problem hängt nicht prinzipiell am Aufruf von einer Schaltfläche
aus, sondern vielleicht, wie Jürgen wohl getestet hat, speziell am
Ereignis "Aktion auslösen" (was es ja auch beim Dokument logischerweise
nicht gibt).
Und zweitens hast du _gleichzeitig_ eine zweite Änderung gemacht, was
auch nicht zu empfehlen ist, wenn man ein Problem lokalisieren will. Die
Idee mit einer leeren Datei ist mir gestern beim Einschlafen auch
gekommen, weil mich die zweite Datei gestört hat, man kann das so
schlecht als Beispiel zur Verfügung stellen. Schön, dass du das schon
probiert hast, ich habe es nachvollzogen, in diesem Fall sind die
Reaktionen offenbar identisch, ob es nun eine bestehende oder neue Datei
ist.
Jetzt warte ich mal auf Jürgens Bug-Report und die Reaktion darauf.
Viele Grüße
Gerhard
Am 08.04.2019 um 09:10 schrieb OoOHWHOoO:
Guten Morgen Gerhard,
erst mal ganz herzlichen Dank für Dein ausführliches
Dialog-Anlegen-Tutorial :-)) !!!
Das habe ich, denke ich mal, hinbekommen.
Zusätzlich habe ich noch 2 Dinge gemacht:
[1] Via [Extras] > [Anpassen "Ereignisse"] > [Dokument öffnen] >
[Makro]: Dokument öffnen * Standard.Module.StartKopfzeile] das
Dokument so "eingestellt", dass beim Öffnen direkt der Dialog mit der
Schaltfläche "CommandButton1" angezeigt wird.
[2] In "Sub btnStart_actionPerformed(oEvent2)" wird eine neue
CALC-Datei geöffnet. Sollte eigentlich keinen Unterschied machen, ob
man eine bestehende oder eine neue CALC-Datei öffnet.
Dein von mir modifiziertes Makro schaut nun so aus:
Option Explicit
Sub StartKopfzeile
Dim oDlg as Object
DialogLibraries.LoadLibrary("Standard")
oDlg = createUnoDialog(DialogLibraries.Standard.Dialog1)
oDlg.execute
End Sub
Sub btnStart_actionPerformed(oEvent2)
Dim PV() As New com.sun.star.beans.PropertyValue
StarDesktop.loadComponentFromURL("private:factory/scalc",
"_blank",0,PV())
MsgBox("Last line of ""Sub btnStart_actionPerformed"" ...")
End Sub
Ich hoffe, das geht so in Ordnung, und ich habe nichts
"verschlimmbessert" durch meine (Mini-) Modifikationen Deines Makros
oder etwas entfernt, wodurch Deine Test-Ergebnisse verändert würden.
Test-Ergebnis: Läuft wir geschmiert (LO 6.2.2.2 (x64) @ Windows 7 Home
Premium 64-bit) - auch wenn ich den PC neu gestartet habe.
Aber ich kann ja viel behaupten, deshalb hier der DownloadLink von
"TestDialog.odt": https://www.magentacloud.de/share/npm0d3-mxx
Viele Grüße
Hans-Werner
------ Originalnachricht ------
Von: "Gerhard Weydt" <gerhard.weydt@t-online.de>
An: users@de.libreoffice.org
Gesendet: 07.04.2019 23:45:05
Betreff: Re: [de-users] Versionsabhängiges Einfrieren von LibreOffice
nach Makrodurchlauf
Hallo Hans-Werner,
deine Mail hattee ich heute früh noch gelesen, mir war klar, dass
hinter dem Syntaxfehler etwas anderes stecken müsse, das ist in x
Tests bei mir durchgelaufen und stammt auch aus Jürgens Code (bis auf
die Änderung von global zu dim, die schon Thomas angesprochen hat).
Der Dialog muss natürlich in jürgens Code fehlen, er hat ja den
Dialog mit vielen Statements selbst generiert und musste zusätzlich
Listener für seine Schaltflächen definieren und diese abfragen. Dafür
gibt es manchmal Gründe, und auch er scheint einen triftigen Grund
gehabt zu haben, aber meist ist es bequemer, den Dialog in der
Basic-IDE zu designen und im Dokument zu speichern. Die Listener
werden sicher auch dann gebraucht, bloß übernimmt das dann
LibreOffice im Hintergrund, man muss nur bei Dialog beim gewünschten
Ereignis das auszuführende Makro benennen.
Für unseren Zweck war mir ein möglichst kurzer Code wichtig, damit
ein Entwickler nicht abgeschreckt wird.
Und ein Rückgriff auf Jürgens Dokument ist auch nicht notwendig, der
Fehler tritt auch bei einem leeren Dokument auf, und auch, wenn man
ein anderes LibO-Dokument statt seines Calc-Dokuments lädt.
Da mir daran liegt, dass jemand anders das auch mit meinem Beispiel
bestätigt, bevor ich eine Bugmeldung aufmache, beschreibe ich dir die
nötigen Aktionen, es geht ziemlich schnell, das sieht nur in der
Beschreibung so groß aus.
Erzeuge ein neues Writer-Dokument (und speichere am besten gleich,
dann hasst du später nich die Unterbrechung durch den Speichern-Dialog).
Lege einen Makro-Modul an: Extras -> Makros -> Makros verwalten ->
LibreOffice Basic... -> im Explorer links deine Datei auswählen ->
New (so steht's in meiner Version) oder Neu; dann wird dir Module1
als Name vorgeschlagen, für unseren Test brauchen wir keinen anderen.
Nach Bestätigung erscheint die Basic-IDE, wo du den vollständigen
Code durch meine Makros ersetzt (und am besten statt dem Xray
irgendeine msgbox nimmst, das ist einfacher, da hast du recht).
Erzeuge den Dialog: Unten siehst du das Register "Module1".
Rechtsklicke rechts davon, wähle Einfügen -> Basic-Dialog. Dann wird
dir ein leerer Dialog angezeigt, Größe und Titel ist uns wurscht. Nun
musst du wahrscheinlich die Symbolleiste Formular-Steuerelemente
einblenden (du kannst sie dann gleich wieder ausblenden) und suchst
dort das Symbol für Schaltfläche, irgendwie wohl ein Rechteck, aber
das hängt vom Stil ab, der Tooltipp zeigt es dir aber, und klickst
drauf. Dann kannst du mit der Maus innerhalb der Dialogfläche ein
Rechteck für die Schaltfläche aufziehen, Größe und Position sind
irrelevant, auch der automatisch vergebene Name kann für unsern Zweck
bleiben.
Nun fehlt nur noch die Verknüpfung des zweiten Makros mit dem
Betätigen der Schaltfläche: Rechtsklick auf die gerade gezeichnete
Schaltfläche -> Eigenschaften -> im linken Teilfenster: Register
"Ereignisse" -> Schaltfläche mit den drei Punkten hinter dem Punkt
"Aktion ausführen" betätigen -> Makro... -> bei "Bibliothek" dein
Dokument auklappen, bis "Module1" erscheint, das anklicken -> rechts
"btnStart_actionPerformed" anklicken. Dann OK und nochmal OK und
speichern (das speichert den Dialog im Dokument und auch das Dokument
selbst im Dateisystem).
Dann kannst du testen. Bei mir funktionierte alles, auch nach
Schließen und Wiederöffnen von Libo, erst nach Runterfahren des
Rechners und Wiederstarten tritt der Fehler auf und bleibt dann auch.
Was zeigt, dass nicht etwas im Dokument durch das erstmalige
Ausführen geändert wird, sondern irgendwas Vages, für mich nicht
Erratbares im Zusammenspiel von BS, LibO und Dokument passiert.
Wenn ich das Dokument anschließend mit 5.3.3.1 öffne, läuft weiterhin
alles durch, mit 6.0.7.3 nicht; dazwischen habe ich derzeit keine
Version installiert. Das deckt sich mit Jürgens Feststellung, dass
sein Makro früher lief, wiewohl nicht exakt mit seiner Angabe, aber
darauf kommt es ja nicht an, wichtig ist, dass da was passiert ist,
was diesen Nebeneffekt hat. Ich werde das in nächster Zeit eingrenzen.
Grüße
Gerhard
Am 07.04.2019 um 18:43 schrieb OoOHWHOoO:
KORREKTUR zu
https://listarchives.libreoffice.org/de/users/msg21513.html
Da muss wohl beim Kopieren aus der Mail
https://listarchives.libreoffice.org/de/users/msg21512.html irgend
etwas in die Windows-Zwischenablage geraten sein.
Jetzt kommt kein Syntaxfehler mehr und LO stürzt auch nicht ab.
Jetzt bezüglich Zeile "oDlg =
createUnoDialog(DialogLibraries.Standard.Dialog1)" die Fehlermeldung:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Dialog1
Da fehlt wohl ein "Dialog1". Woher nehmen wenn nicht stehlen ...
jetzt mag ich nicht mehr mit meinem Makro-Dialog-Minimalwissen :-(( ...
Grüße
Hans-Werner ;-))
Gerhards Makro (
https://listarchives.libreoffice.org/de/users/msg21512.html ):
Option Explicit
Sub StartKopfzeile
dim oDlg as Object ' Dialogfenster
DialogLibraries.LoadLibrary("Standard") 'auch ein fester
Dialog bringt keine Änderung
oDlg = createUnoDialog(DialogLibraries.Standard.Dialog1)
oDlg.execute
End Sub
REM Aktion Pseudo-Kopfzeilen eintragen und formatieren
Sub btnStart_actionPerformed(oEvent2)
dim oDocC as Object
Dim sUrl as String
sUrl = converttoUrl("E:\TMP\Kopfzeilen_Texte.ods") ' MODIFIZIERT !
Dim zFileProperties() As New com.sun.star.beans.PropertyValue
oDocC = StarDesktop.loadComponentFromURL(sURL, "_blank", 0,
zFileProperties())
MsgBox("HALLO") ' MODIFIZIERT !
End Sub
-- Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.