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.we...@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+unsubscr...@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+unsubscr...@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