Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kollision von Dokumenten oder Word-Instanzen?

63 views
Skip to first unread message

Raimund Gryszik

unread,
Oct 10, 2008, 1:07:01 PM10/10/08
to
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


Helmut Weber

unread,
Oct 10, 2008, 6:58:10 PM10/10/08
to
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

Manfred F

unread,
Oct 13, 2008, 2:26:01 AM10/13/08
to
Hallo Raimund,

"Raimund Gryszik" wrote:

> lesen MyFile ......
> WApp.Quit

Wie sieht denn "lesen MyFile ......" aus?
Greifst Du mehrfach z. B. auf ActiveDocument zu oder gar auf Selection? Dann
wäre das geschilderte Verhalten verständlich.
Bitte füge ein Listing an.

Schönen Gruß
Manfred


Raimund Gryszik

unread,
Oct 13, 2008, 7:04:00 AM10/13/08
to
Danke an alle!

Das Hauptproblem war, dass wir im Coding solche "Verdrahtungen" wie
WordApp.Documents(1) oder WordApp.ActiveDocument drin hatten.

Wir haben das jetzt durch WordApp.Documents(KonkreteDatei) oder durch
Objektvariablen ersetzt. Damit treten keine Probleme mehr auf.

Raimund

0 new messages