Guten Morgen Gerhard & *,
das, was Du schreibst, habe ich ja auch letztendlich in meiner Mail
(s.u.) festgestellt:
"[...] [1.3] Verwendet man in Deinem Makro den Office-FilePicker
("com.sun.star.ui.dialogs.OfficeFilePicker"), hat dies keine Auswirkung
auf das Hängenbleiben bei dem MsgBox-Aufruf. Ich spekuliere mal, dass da
wohl vielleicht noch andere ungünstige Randbedingungen auftreten, die
den FilePicker-Fehler kaschieren oder auch der FilePicker-Fehler selbst
andere Fehler verursacht. [...]"
Es kann ja auch sein, dass in Juergens Makro 2 Probleme auftreten, ein
"noch unbekanntes Problem" und das "FilePicker-Problem" (letzteres ist
mittlerweile bestätigt (s.u.)).
Ich versuche mal zusammenzufassen, was man bis jetzt weiß:
[1] Startet man Juergens Makro (intern) aus der BASIC-IDE heraus, tritt
kein Fehler auf.
[2] Startet man Juergens Makro (extern) über Juergens Schaltfläche,
tritt der Fehler auf.
[3] Startet man das "eingedampfte Makro", welches keinen
FilePicker-Aufruf beinhaltet, gemäß [1] bzw. [2], tritt der Fehler
entsprechend auf.
[4] Startet man das "eingedampfte Makro", welches keinen
FilePicker-Aufruf beinhaltet, gemäß [1] bzw. [2], mit einer neuen
WRITER-Datei, tritt der Fehler nicht auf.
[5] Schreibt man Juergens Makro neu (Siehe:
https://www.magentacloud.de/share/r8eyn.v.s0 ), wobei sich das "neu"
hauptsächlich auf das Weglassen der DIALOG-Code-Zeilen bezieht, und
benutzt man dabei Juergens WRITER-Datei, tritt nur der (Betriebssystem)
FilePicker-Fehler auf, wenn man dieses neue Makro extern über eine
Windows-CMD startet, nicht aber, wenn man es intern über die BASIC-IDE
startet.
[6] Verwendet man den (Betriebsystem) FilePicker und FolderPicker in
einem Makro und startet man dieses Makro extern über ein Windows-CMD,
tritt der Picker-Fehler auf, jedoch nicht, wen man dieses Makro intern
über die BASIC-IDE startet.
[7] Verwendet man den (LibreOffice) OfficeFilePicker und
OfficeFolderPicker wie unter [6] beschrieben, treten keinerlei
Fehlfunktionen auf.
[8] Zu dem "noch unbekannten Problem" kann ich keine Aussagen machen, da
ich in der Nutzung der BASIC-Dialog-Software zu unerfahren bin.
[9] Zu dem (Betriebssystem) FilePicker und FolderPicker kann ich
mittlerweile eine klare Aussage machen - da ist offensichtlich ein BUG
enthalten:
[9.1] Bein internem Aufruf des File/FolderPicker tritt kein Fehler auf.
Bei externem Aufruf (Windows-CMD), bleibt das Makro hängen.
[9.2] Unter https://www.magentacloud.de/share/w-aqlynr70 kann man die
Dateien "TestPickerSW.cmd" und "TestPickerSW.txt" herunterladen. Mit
diesem "TestPickerSW"-Makro kann man das Fehler-Verhalten der
Picker-Software auf einfache Weise testen, wenn man dieses Makro
(extern) über das Windows-CMD (TestPickerSW.cmd) startet.
[9.3] Wenn jemand mit der Software von [9.2] den Picker-Fehler ebenso
reproduzieren könnte, würde ich Olivers BugReport (
https://bugs.documentfoundation.org/show_bug.cgi?id=123502#c15 )
entsprechend ergänzen.
==>> WICHTIG
==>> Ich lese gerade in Olivers BugReport, dass das Picker-Problem
bestätigt und gelöst ist - ab LO 6.1.6 und 6.2.4. <<==
[9.4] Nun gut, trotzdem, wenn jemand den sinnvollen Gebrauch der
Test-Software [9.2] zum Test der Picker-Software bestätigen könnte,
würde ich ich diese Test-Software über einen "Comment" Olivers BugReport
hinzufügen.
Viele Grüße
Hans-Werner
Picker-Test-Software ( https://www.magentacloud.de/share/w-aqlynr70 )
+ TestPickerSW.txt
Sub TestPickerSW
Dim oP as Object ' object Picker
Dim aP() as String ' array Pickers
Dim aF() as String ' array Files
Dim D as String ' Digit
Dim F as String ' Folder
Dim US as String ' Uno Service
aP = Array("com.sun.star.ui.dialogs.OfficeFilePicker" , _
"com.sun.star.ui.dialogs.OfficeFolderPicker", _
"com.sun.star.ui.dialogs.FilePicker" , _
"com.sun.star.ui.dialogs.FolderPicker")
D = InputBox("1 = Test: " & aP(0) & Chr(10) &_
"2 = Test: " & aP(1) & Chr(10) &_
"3 = Test: " & aP(2) & Chr(10) &_
"4 = Test: " & aP(3) & Chr(10), _
"Please enter digit:")
Select Case D
Case "1","3"
US = IIf(D="1",aP(0),aP(2))
oP = createUnoService(US)
oP.setTitle("Please select a FILE ...")
If (oP.execute() = 1) Then
aF = oP.getFiles()
MsgBox("File selected: " & aF(0))
Else
MsgBox("No file selected." & Chr(10) & "Exit Macro ...")
End If
Case "2","4"
US = IIf(D="2",aP(1),aP(3))
oP = createUnoService(US)
oP.setTitle("Please select a FOLDER ...")
If (oP.execute() = 1) Then
F = oP.getDirectory()
MsgBox("Folder selected: " & F)
Else
MsgBox("No folder selected." & Chr(10) & "Exit Macro ...")
End If
Case ""
End
Case Else
MsgBox("Wrong input: " & D & Chr(10) & "Exit macro ...")
End
End Select
MsgBox ("Last code line of macro ...")
End Sub
+ TestPickerSW.cmd
SET L="C:/Program Files/LibreOffice/program/soffice.exe"
SET M="macro:///Standard.Test.TestPickerSW()"
%L% --nologo %M%
REM Please notice:
REM
REM L="C:/Program Files/LibreOffice/program/soffice.exe"
REM
REM May be that this path of "soffice.exe" has to be modified due to
your installation of Libre Office.
REM
REM M="macro:///Standard.Test.TestPickerSW()"
REM
REM "Standard" = User's library (BASIC-IDE).
REM "Test" = Module "Test" in the user's library.
REM If not existing, please create such a module.
REM "TestPickerSW" = Macro "Sub TestPickerSW" (File: TestPickerSW.txt).
REM Please copy this macro in the module "Test".
------ Originalnachricht ------
Von: "Gerhard Weydt" <gerhard.we...@t-online.de>
An: users@de.libreoffice.org
Gesendet: 06.04.2019 00:05:31
Betreff: Re: [de-users] Versionsabhängiges Einfrieren von LibreOffice
nach Makrodurchlauf
Hallo Jürgen, Hans-Werner,
das "eingedampfte" Makro, das ich in meiner Mail vom 3.4. mitgeteilt habe,
zeigt das Phänomen, bei Aufruf per Schaltfläche hängenzubleiben, aber bei direktem Aufruf
durchzulaufen, enthält aber gar keine File Picker! Daher kann ich mir nicht vorstellen,
dass es am File Picker liegen sollte.
Was ich allerdings nun nicht mehr nachvollziehen kann, ist das mein neu
aufgebautes Dokument den Fehler nicht mehr produzieren soll, nun verhält es
sich genauso wie das von Jürgen erhaltene Dokument, beide mit dem reduzierten
Code. Da ich aber doch darauf schwören möchte, dass ich mich nicht getäuscht
habe, weckt das meinen Jagdinstinkt, und ich werde weiter rumprobieren.
Aber diese beiden Bemerkiungen wollte ich doch gleich nach dem Lesen der
Nachricht loslassen.
Gruß
Gerhard
Am 05.04.2019 um 13:37 schrieb OoOHWHOoO:
Hallo Juergen & *,
nachdem Gerhard festgestellt hatte (https://listarchives.libreoffice.org/de/users/msg21491.html), dass Dein
Makro bei direktem Start von "StartKopfzeile" in der BASIC-IDE (interner Start) fehlerfrei läuft im
Gegensatz zum Start über die Schaltfläche "Start Texte eintragen" in der Datei "Musterbuch mit
Makro_06.odt" (externer Start), habe ich mir überlegt zu schauen, was passiert, wenn man Dein Makro über
ein Windows-CMD extern startet, was ja auch eine Form des externen Makro-Starts darstellt.
Da mir Dein Makro (für eventuelle Fehlersuche) durch die vielen SUBs und
FUNCTIONs zu unübersichtlich ist, habe ich es mal neu geschrieben auf Basis des
von Dir verwendeten Algorithmus.
Das (neue) Makro läuft fehlerhaft, wenn man den Betriebssystem-FilePicker
"com.sun.star.ui.dialogs.FilePicker" auswählt.
Im Kontext der von Oliver und mir festgestellten Probleme mit dem
Betriebssystem-FolderPicker "com.sun.star.ui.dialogs.FolderPicker" scheint es
mir doch nun sehr wahrscheinlich, dass da ein Problem mit der Picker-Software vorliegt,
wenn man die Betriebssystem-Versionen der Picker-Software verwendet - also auch Deine
Probleme mit Deinem Makro wohl damit zusammenhängen.
Gruß
Hans-Werner
[1] Ergebnis (Systemumgebung: LO 6.2.2.2 (x64) @ Windows 7 Home Premium 64-bit)
[1.1] Verwendet man für die Dateiauswahl den Betriebssystem-FilePicker
("com.sun.star.ui.dialogs.FilePicker"), bleibt das Makro nach der Dateiauswahl
hängen.
[1.2] Verwendet man für die Dateiauswahl den Office-FilePicker
("com.sun.star.ui.dialogs.OfficeFilePicker"), läuft das Makro fehlerfrei durch.
[1.3] Verwendet man in Deinem Makro den Office-FilePicker
("com.sun.star.ui.dialogs.OfficeFilePicker"), hat dies keine Auswirkung auf das
Hängenbleiben bei dem MsgBox-Aufruf. Ich spekuliere mal, dass da wohl vielleicht noch
andere ungünstige Randbedingungen auftreten, die den FilePicker-Fehler kaschieren oder
auch der FilePicker-Fehler selbst andere Fehler verursacht.
[2] Das "neue" Makro
[2.1] Die Dialog-Sachen (Schaltfläche "Start Texte eintragen") habe ich durch
eine einfache InputBox ersetzt.
[2.2] Die Datei "CALC.ods" ist eine unveränderte Kopie Deiner Datei
"Kopfzeilen_Texte.ods".
[2.3] Die Datei "WRITER.odt" ist eine Kopie Deiner Datei "Musterbuch mit
Makro_06.odt", wobei ich lediglich
+ Dein Makro "modKopfzeile" entfernt habe.
+ die Schaltfläche "Start Texte eintragen" entfernt habe.
[2.4] Soweit ich es überschaut habe, liefert mein Makro das gleiche Ergebnis
wie Dein Makro (identische Seitenzahl von 249 Seiten und entsprechende
Kopfzeilen-Einträge, aber auf der letzten Seite (249) gibt es eine (kleine)
Abweichung:
+ Dein Makro: "Mein Text Links 10" und "Mein Text Rechts 10Mein Text Rechts 10Mein
Text Rechts 10"
+ Mein Makro: "Mein Text Links 10" und "Mein Text Rechts 10"
[2.5] Falls Du weitere Abweichungen oder Fehlfunktionen in dem (neuen) Makro
feststellen solltest, so melde Dich bitte.
[3] Hinweise:
[3.1] Makro (Download-Datei: Kopfzeilen.txt)
Das (neue) Makro besteht aus der "Sub Kopfzeilen" und der "Function
DateiAuswahl".
[3.2] Windows-CMD (Download-Datei: Kopfzeilen.cmd)
Damit kann man das Makro (unter Windows) extern starten (für Linux entsprechend
BASH-Syntax):
SET L="C:/Program Files/LibreOffice/program/soffice.exe"
SET M="macro:///Standard.Kopfzeilen.Kopfzeilen()"
%L% --nologo %M%
Mit:
+ Der Speicherpfad von "soffice.exe", muss gegebenenfalls angepasst werden:
SET L="C:/Program Files/LibreOffice/program/soffice.exe"
+ Der Speicherpfad des Makros:
SET M="macro:///Standard.Kopfzeilen.Kopfzeilen()"
+ Standard = Bibliothek = "[Meine Makros & Dialoge].Standard"
+ Kopfzeilen = Modul = "Kopfzeilen"
+ Kopfzeilen() = Makro (im Modul "Kopfzeilen")
Wenn Du das Makro in der BASIC-IDE nicht in einem Modul abspeicherst, dann nur: SET
M="macro:///Standard.Kopfzeilen()"
[3.3] CALC.ods
Siehe [2.2] !
[3.4] WRITER.odt
Siehe [3.2] !
[3.5] Download-Link
https://www.magentacloud.de/share/r8eyn.v.s0
enthält:
Kopfzeilen.txt
Kopzeilen.cmd
WRITER.odt
CALC.ods
[4] Marko-Code
Dies nur zur Vorschau. Der eMail-Server wird wohl wieder aufeinanderfolgende Leerzeichen
reduzieren, wodurch die Struktur vermurkst wird. Deshalb besser
"Kopfzeilen.txt" anschauen und nutzen, aber für einen ersten Einblick reicht
das schon:
Sub Kopfzeilen
Dim AAM as Integer ' Anzahl Arrayelemente Maximum
Dim ASM as Integer ' Anzahl Seiten Maximum
Dim AFGR as String ' Absatz Formatierung Gerade Rechtsbündig
Dim AFUL as String ' Absatz Formatierung Ungerade Linksbündig
Dim DAC as String ' Datei Art CALC
Dim DAW as String ' Datei Art WRITER
Dim DC as String ' Document CALC: "" = interaktive
Dateiauswahl
' "/'pfad'/'datei'" = keine ineraktive
Dateiauswahl
Dim DF as String ' Dialog Form: "B" = Betriebssystem
' "O" = Office
Dim DTC as String ' Dialog Text CALC
Dim DTW as String ' Dialog Text WRITER
Dim DW as String ' Document WRITER: "" = interaktive
Dateiauswahl
' "/'pfad'/'datei'" = keine
ineraktive Dateiauswahl
AAM = 10
ASM = 240
AFGR = "_Gl_Text-8_pt_Kopf_Gerade_Rechts bündig"
AFUL = "_Gl_Text-8_pt Kopf_Ungerade_Links bündig"
DAC = "ods"
DAW = "odt"
DC = ""
DF = "O"
DTC = "Bitte die Datei ""CALC.ods"" auswählen ..."
DTW = "Bitte die Datei ""WRITER.odt"" auswählen ..."
DW = ""
Dim oDC as Object ' [object] Document CALC
Dim oDW as Object ' [object] Document WRITER
Dim oCC as Object ' [object] Current Controller
Dim oVC as Object ' [object] View Cursor
Dim aKTLS ' [array] Kopfzeilen Texte Linke Seite
Dim aKTRS ' [array] Kopfzeilen Texte Rechte Seite
Dim idxA as Integer ' [index] A
Dim idxB as Integer ' [index] B
Dim AAF as String ' Aktuelles Absatz Format
Dim BE as String ' Benutzer Eingabe
Dim KT as String ' Kopfzeilen Text
Dim aPVDW(0) as New com.sun.star.beans.PropertyValue ' [array] Property
Value Document WRITER
Dim aPVDC(0) as New com.sun.star.beans.PropertyValue ' [array] Property
Value Document CALC
' Nur für Testzwecke zur interaktiven Festlegung der Dateiauswahl-Dialogform
============
BE = UCase(InputBox("B = Dateiauswahl-Dialogform Betriebssystem" & Chr(10)
&_
"O = Dateiauswahl-Dialogform Office" & Chr(10)
&_
" " & Chr(10)
&_
"Bitte Eingabe:"))
If ((BE = "B") Or (BE = "O")) Then
DF = BE
Else
MsgBox ("Die Dateiauswahl-Dialogform """ & BE & """ ist nicht erlaubt." &
Chr(10) &_
"Das Makro wird beendet.")
End
End If
'
=======================================================================================
BE = InputBox("1 = Kopfzeilen erstellen" & Chr(10) &_
"2 = Kopfzeilen löschen" & Chr(10) &_
"3 = Makro abbrechen" & Chr(10) &_
" " & Chr(10) &_
"Bitte Eingabe:")
Select Case BE
' Kopfzeilen bearbeiten:
Case "1","2"
' Dateiauswahl anzeigen, da kein Pfad/Datei wurde vorbelegt (s.o.):
If (DW = "") Then
DW = DateiAuswahl(DTW,DAW,DF)
End If
aPVDW(0).name = "Hidden"
aPVDW(0).value = False
oDW =
StarDesktop.loadComponentFromURL(ConvertToURL(DW),"_blank",0,aPVDW())
oDW = ThisComponent
oCC = oDW.CurrentController
oVC = oCC.getViewCursor
oVC.jumpToPage(2)
' Kopfzeilen erstellen
If (BE = "1") Then
' Dateiauswahl anzeigen, da kein Pfad/Datei vorbelegt Wurde (s.o.):
If (DC = "") Then
DC = DateiAuswahl(DTC,DAC,DF)
End If
aPVDC(0).name = "Hidden"
aPVDC(0).value = False
oDC =
StarDesktop.loadComponentFromURL(ConvertToURL(DC),"_blank",0,aPVDC())
aKTRS() =
oDC.Sheets().getByName("KopfZeilenTexte").getCellRangeByName("A1:B10").getDataArray()
aKTLS() =
oDC.Sheets().getByName("KopfZeilenTexte").getCellRangeByName("A11:B20").getDataArray()
oDC.Close(True)
For idxA = 0 To AAM-1 Step 1
For idxB = 0 to ASM/AAM Step 1
AAF = IIf(oVC.Page Mod 2 = 0,AFGR,AFUL)
KT = IIf(oVC.Page Mod 2 = 0, aKTRS(idxA)(1),aKTLS(idxA)(1))
With oVC
.jumpToStartOfPage(False)
.ParaStyleName = AAF
.gotoEndOfLine(true)
.String = KT
.collapseToEnd
.collapseToStart
.jumpToNextPage
End With
Next idxB
Next idxA
' Kopfzeilen löschen:
Else
For idxA = 0 To AAM-1 Step 1
For idxB = 0 to ASM/AAM Step 1
AAF = IIf(oVC.Page Mod 2 = 0,AFGR,AFUL)
With oVC
.jumpToStartOfPage(False)
.ParaStyleName = AAF
.gotoEndOfLine(true)
.String = ""
.collapseToEnd
.collapseToStart
.jumpToNextPage
End With
Next idxB
Next idxA
End If
' Makro abbrechen:
Case "3"
End
' Nicht erlaubte Benutzereingabe:
Case Else
MsgBox("Die Eingabe """ & BE & """ ist nicht erlaubt." & Chr(10) &_
"Das Makro wird beendet.")
End
End Select
End Sub
Function DateiAuswahl(DT as String,DA as String,DF as String) as String
' DT = Dialog Titel | beliebiger Text
' DA = Datei Art | "odt" = WRITER-Datei
' | "ods" = CALC -Datei
' DF = DialogForm | "B" = Betriebssystem [
"com.sun.star.ui.dialogs.FilePicker" ]
' | "O" = Office [
"com.sun.star.ui.dialogs.OfficeFilePicker" ]
Dim oFP as Object ' [object] File Picker
Dim aD() as String ' [array] Dateien
Dim US as String ' Uno Service
If (DF = "B") Then
US = "com.sun.star.ui.dialogs.FilePicker"
ElseIf (DF = "O") Then
US = "com.sun.star.ui.dialogs.OfficeFilePicker"
Else
MsgBox("Die Dialogart """ & DF & """ ist nicht erlaubt." & Chr(10) &_
"Das Makro wird beendet.")
End
End If
oFP = createUnoService(US)
oFP.Title = DT
If (oFP.execute() = 1) Then
aD = oFP.getFiles()
DateiAuswahl = aD(0)
If (Mid(DateiAuswahl,Len(DateiAuswahl)-2,3) <> DA) Then
MsgBox("Sie haben keine Datei mit der Endung """ & DA & """ ausgewählt:"
& Chr(10) &_
"Ausgewählte Datei: " & DateiAuswahl
& Chr(10) &_
"Das Makro wird beendet.")
End
End If
Else
MsgBox("Sie haben keine Datei ausgewählt." & Chr(10) &_
"Das Makro wird beendet.")
End
End If
End Function
-- 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