Hallöchen Dirk,
lange nichts mehr voneinander gehört, schön mal wieder von Dir zu lesen.
Ja ja, meine Gesundheit zwingt mich momentan in andere Bahnen.
Aber dennoch habe ich mich heut mal bei diesem echt ekligen Wetter, hatte kurzzeitig sogar geschneit (oh welch schauderhafte Überraschung, kann momentan keinen Schnee gebrauchen *grrrrr*), mich mit deinem Problem befasst.
Also das mit der Batch-Datei, und was Du da beobachtet hast, ist nicht weiter tragisch. Wenn ich noch die Befehle wüsste wie man die Bildschirmausgabe unterdrücken kann, so würde ich sie dir sagen. Aber das spielt jetzt im Endeffekt auch überhaupt keine Rolle.
Um es schon mal in einer Kurzfassung vorweg zu nehmen: Du mustt leider einen anderen Weg gehen, den Du sogar schon selber genannt hattest.
Jetzt ausführlicher.
Um überhaupt festzustellen ob dein Makro wegen dem Dialog in deiner Datei *Test.ods* funzt, hatte ich Plöti natürlich nicht den einfachsten Weg gewählt

, sondern mich auf das aktuelle Problem konzentriert. Dabei störte mich aber das erstellen einer neuen und leeren Datei. Und dann eine kleine Batch für mich erstellt um deine Datei durch die Batch zu starten. Ergebnis war negativ. Im Makro hatte ich vor dem Dialog-Aufruf eine kleine MsgBox geschaltet, um zu sehen ob ich überhaupt bis dahin komme, doch nix dergleichen geschah.
Also Stephans Datei angeschaut, und da sah ich auch den Grund warum es bei dir nicht funzen kann. Und da kommt jetzt auch der von dir genannte Hinweis zu Dannenhöfer zum tragen. An dieser Stelle bedanke ich mich bei dir für den Hinweis. Danke schön! Prima gemacht
Uns dem Ereigniss "Dokument öffnen" habe ich in deiner Datei das dementsprechende Makro zugeordnet. Jetzt erschien auch die von mir eingefügte MsgBox. Na endlich ein Schritt weiter!
Doch mein mir vorgestelltes Ziel war noch nicht in Sicht. Also weiter im Text.
Jetzt habe ich von Stephan mir noch was abgeschaut, und zwar das hier,
Code: Alles auswählen
ThisComponent.CurrentController.Frame.ContainerWindow.Visible = False
Ah! Ja!
Schon besser.
Aber noch nicht wirklich gut. Denn ich sah für einen gaaaanz kurzen Augenblick das Tabellenblatt. Auch wenn es wirklich nur für den Bruchteil einer Sekunde war, so sah ich es halt leider. Und mein Rechensklave ist nicht grad der aller langsamste, aber auch nicht der aller schnellste (AMD FX 4300 Quad-Core 3,82 GHz). Und wenn ich das schon sehe, dann werden das noch langsamere erst recht sehen, und das für eine etwas längere Zeit.
Da fiel mir wieder ein, das man ja auch Dateien versteckt im Hintergrund öffnen kann. Das habe ich schon des öfteren praktiziert. Jedoch mit dem fetten Unterschied, eine Datei mit Makro öffnet eine andere Datei versteckt im Hintergrund. Also kann ICH dies Verfahren in diesem Falle nicht anwenden. Aber vielleicht gibts ja einen anderen Weg.
Na dann schmeißen wir doch mal kurzerhand XRAY an, und untersuchen den folgenden Zweig.
Ich hatte auch was gefunden, und zwar.
- toBack ()
- toFront ()
Dumm nur das XRAY mir nix weiter dazu sagt, wie z.B. bei
- setVisible ( Visible as boolean )
Aber dennoch hatte ich es mal so rum versucht.
Code: Alles auswählen
ThisComponent.CurrentController.Frame.ContainerWindow.toBack()
Ja Okay, funzt, und funzt nicht. Abwechselnd. Der Grund ist ja auch klar. Denn wenn etwas im Hintergrund versteckt wird, muss es ja auch wieder von dort hervorgeholt werden. Also wenn ich toBack sagew muss ich auch toFront sagen.
Also sah jetzt zu guter letzt "dein Makro"

wie folgt aus.
Code: Alles auswählen
Sub Main
ThisComponent.CurrentController.Frame.ContainerWindow.toBack()
Msgbox "KLICK MICH UND DER DIALOG ERSCHEINT"
ThisComponent.CurrentController.Frame.ContainerWindow.toFront()
Dialoglibraries.Loadlibrary("Standard")
MyDlg= CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
MyDlg.execute()
End Sub
Und das Ergebnis lässt sich jetzt wie folgt beschreiben.
- Office geschlossen.
- Auf die dementsprechende Batch geklickt.
- Das DOS-Fenster poppt auf.
- Office Startlogo erscheint sehr kurz.
- Bruchteil einer Sekunde das Tabellenblatt gesehen.
- Die Msgbox erscheint.
- In der Taskleiste ist aber sonst nix vom Office zu sehen, und zwar absolut gar nix.
- Klick auf Okay in der MsgBox und der Dialog erscheint.
- In der Taskleiste ist immer noch nix vom Office zu sehen, und zwar absolut gar nix.
- Auf das X oben rechts im Dialog klicken, der Dialog verschwindet und Office samt Tabellenblatt erscheinen.
Eigentlich wäre das ja ein Grund zum Freuen. Doch da ja bei mir das Tabellenblatt sehr kurz zu sehen ist, sind wir so gesehen eigentlich wieder am Anfang. Der Testkandidat, die Datei samt Makro, ist ja so gesehen eigentlich Leer. Wenn jetzt aber die eigentliche Datei auf einem langsamen Rechner sagen wir mal so ca. 3 Sekunden zum öffnen braucht, dann wird auch für diese Zeit das Tabellenblatt in meiner Beobachtungsliste zu sehen seien.
Noch ein wichtiger Punkt zu der Beobachtung.
Ist das Office schon geöffnet, auch ohne eine Datei, dann funktionierrt das ganze nicht mehr so wirklich.
Kommen wir also zu Plan B, den Du schon selber angesprochen hattest.
Es wäre vorteilhaft wenn Du mit einem 2 Dateien-System arbeitest.
Die erste Datei ist so gesehen für das Anmelden zuständig. Ist die Anmeldung erfolgreich gewesen, öffnet die "Anmeldedatei" die eigentliche "Arbeitsdatei".
Die "Anmeldedatei" gibt aber zu erst eine Meldung in der Form von "Bitte warten." in einem Dialogfenster, nicht MsgBox, aus und öffnet dann die andere. Ist die "Arbeitsdatei" geöffnet, schließt sich die "Anmeldedatei".
So würde ich das zumidest machen.
Gruß
balu