Kollision von Dokumenten oder Word-Instanzen?

10/10/2008 - 19:07 von Raimund Gryszik | Report spam
Hallo Expertenrunde!

Mit Office 2000 habe ich folgendes Problem:

Aus Access heraus müssen wir ein Word-Dokument laden und lesen, dann wieder
schließen. Zur Zeit machen wir es so:

Proz1:
Set WordApp = CreateObject("Word.Application") 'unsichtbar öffnen
WordApp.Documents.Open MyFile
lesen MyFile ..
WApp.Quit

Wenn der Benutzer nun gleichzeitig mit Word und Access arbeitet, können
folgende Probleme auftreten:

Fall a) Wenn Word vor dem Start von Proz1 bereits geladen war, wird durch
Proz1 eine zweite, unsichtbare Word-Instanz erzeugt. Durch diesen Umstand
allein scheinen noch keine reproduzierbaren Fehler aufzutreten. Auch dann
nicht, wenn mehrere Dokumente im Word geöffnet waren.

Fall b) Proz1 ist gestartet und làuft. Wenn der Benutzer nun Word startet,
wird ebenfalls eine neue Instanz erzeugt, und es treten unterschiedliche
Kollisionen auf. An der Benutzeroberflàche scheint die Bearbeitung der beiden
Dokumente im Word irgendwie vermengt (Dialogboxen, die für den Benutzer
unverstàndlich sind). Sporadisch Totalabstürze.

Fall c) Wenn beide Situationen nacheinander verkettet auftreten, haben wir
die gleichen Fehler wie in Fall b (nàmlich laden Word, starten Proz1 in
Access, laden neues Dokument in Word, Kollision).

Meine Fragen:

zu Fall a) Wàre es sinnvoller, statt einer ganzen Word-Instanz nur ein neues
Dokument im geladenen Word zu öffnen? Wenn ja, wie geht das? Würde das dem
Fall c vielleicht vorbeugen?

zu Fall b) Làsst sich das vermeiden? Oder muss ich dem User »verbieten«,
jetzt Word zu starten?

Vielen Dank für Tipps

Raimund Gryszik, Berlin
 

Lesen sie die antworten

#1 Helmut Weber
11/10/2008 - 00:58 | Warnen spam
Hallo Raimund,

man prüft zuerst, ob getobject erfolgreich ist,
und verwendet createobject nur im Falle,
dass getobject einen Fehler liefert.

Etwa so:

Sub Word()
Dim oWrd As Object
On Error Resume Next
Set oWrd = GetObject(, "Word.Application")
If oWrd Is Nothing Then
Set oWrd = CreateObject("Word.Application")
' your code
End If
With oWrd
' oWrd.Visible = False ' oder true
' your code
End With
oWrd.Quit
Set oWrd = Nothing
End Sub

Dim oWrd As Object, weil "early binding"
hier bei mir zuhause einfach nicht funktioniert.


Gruß

Helmut Weber, MVP WordVBA

Vista Small Business, Office XP

Ähnliche fragen