zunächst:
ich habe Deinen gestrigen Code jetzt unter MS Word laufen lassen und er funktioniert tadellos.
ich habe keinen tau
aber.. nur so eine frage:
hat jemand eine ahnung ob das objekt 'objDesktop' (Set objDesktop = objManager.createInstance("com.sun.star.frame.Desktop")) evtl. eine eigenschaft hat, die mir zeigt dass die funktion storeToURL oder storeAsURL fertig ist?
Ich weiß auch nicht woran es liegt, nur ich hatte schon gestern das Call gesehen und mir ist nicht klar wieso hier nach der Ursache geforscht wird.
Hier ist ein Call und das bewirkt (meiner Ansicht nach) das nichts nach dem Call geschiet ehe nicht das was zum Call gehört 'fertig' ist.
wird einfach nicht ausgeführt ehe das Speichern nicht fertig ist.
So ist, meines Erachtens, die Lage und es könnte ja sein das Call nun trotzdem fehlerhaft ist, aber man kann das ja prüfen. Etwa auf die Schnelle zum Beispiel so:
Code: Alles auswählen
Private Sub OpenOpenOffice()
Dim oSM
Dim oDesk As Object
Dim oDoc As Object
Dim arg()
On Error GoTo Failed
Set fs = CreateObject("Scripting.FileSystemObject")
Set x = fs.GetFile("c:\test\trigfunk.ods")
' Instanciate OOo : this line is mandatory with VB for OOo API
Set oSM = CreateObject("com.sun.star.ServiceManager")
'Create the first and most important service
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
' Open an existing doc
Set oDoc = oDesk.loadComponentFromURL("file:///c:/test/trigfunk.ods", "_blank", 0, arg())
' Save the doc
Call oDoc.storeToURL("file:///c:/test/trigfunk.ods", arg())
MsgBox x.DateLastModified
' Close the doc
oDoc.Close (True)
Set oDoc = Nothing
Exit Sub
Failed:
MsgBox (Err.Description)
End Sub ' OpenOpenOffice()
und da meine gewählte Datei trigfunk.ods reichlich 10 Sekunden zum Speichern braucht, bin ich sicher das kein 'Zufall' vorliegen kann wenn mir:
nun tatsächlich das neue Dateidatum zeigt, wie ich das erwartet hatte.
(Nein, ich will nun nicht schwören das diese Prüfung vollkommen sicher sein muß, als Augenscheinsbeweis reicht sie mir aber zunächst.)
und obwohl es (meiner Meinung nach) nicht am Call hängt, ist doch das:
ich stelle mir das in etwa so vor:
Speichere solange objDesktio.Ready ungleich True ..
das wäre eine elegante lösung mit einer schleife,
ganz simpel zu lösen, auch ohne etwas über:
aber leider gibt es bzw. finde ich keine ausreichende dokumentation über diese objekte, deren methoden und eigenschaften ..
zu wissen, denn es reicht (naja, ich behaupte nicht es ist elegant, nur es erfüllt seinen Zweck), ein einfaches Do-Loop:
Code: Alles auswählen
'...
Set fs = CreateObject("Scripting.FileSystemObject")
Set x = fs.GetFile("c:\test\trigfunk.ods")
y = x.DateLastModified
'...
Call oDoc.storeToURL("file:///c:/test/trigfunk.ods", arg())
Do
Loop While y = x.DateLastModified
'...
allerdings nehme ich nicht an das das Dein Problem löst, das Problem existiert nämlich meines Erachtens nicht an der Stelle wo Du es vermutest.
das hier:
Code: Alles auswählen
Dim Args(0) As Types.PropertyValue
Args(0).Name = "Wait"
Args(0).Value = True
ist doch nun völlig aus der Luft gegriffen. Du kannst doch keine Parameter übergeben womit das Programm nichts anfangen kann, weil sie dort einfach nicht hingehören.
Nur am Rande sei erwähnt das eine PropertyValue-Variable unter den bestehenden Umständen (meiner Meinung nach) in etwa so zu deklarieren wäre:
Code: Alles auswählen
Dim Dim Args(0)
Set Args(0) = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Args(0).Name = "Wait"
Args(0).Value = True
zumindest aus Sicht von OOo, Betrachtungen zu Typvariablen in VB sind da zunächst außen vor, weil ich im Konkreten OOo/VB/Typvariablen keine praktische Erfahrung habe.
es sollte doch eigentlich funktionieren!
Nein, wie denn. Du übergibst Parameter die dort nicht hingehören und es ist überflüssig nun auf Fehlermeldungen von VB zu verweisen, die mir inhaltlich ziemlich egal sind, weil die Parameterübergabe ansich schon falsch ist.
Eine Lösung kenne ich derzeitig auch nicht, so das ich Dir eigentlich nur raten würde zunächst einmal festzustellen welche Code-Zeile denn gerade in Arbeit ist wenn sich OOo mit Fehlermeldung verabschiedet, denn ich kann das von hier aus nicht wissen. (Es kann sein das Du das bereits weißt und als selbstverständlich voraussetzt, nur konkret gesagt hast Du bisher nichts dazu) Weil ich es nicht weiß ziehe ich dann schon in Betracht das nicht:
sondern ggf.:
den Fehler bewirkt.
Außerdem solltest Du zumindest einmal:
ausprobieren, obwohl ich zum jetzigen Zeitpunkt der Diskussion eher nicht glaube das das helfen wird.
Gruß
Stephan