Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index


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.weydt@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+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.