Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0390: Keine weitere Instanz beim Öffnen von Worddokumenten

 von 

Beschreibung 

Dieser Tip verhinder, bei Einbindung des WordObjekts in VB, dass beim Öffnen eines weiteren Dokuments eine weitere Instanz von Word gestartet wird. Das neue Dokument wird in die alte Instanz geladen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [12,29 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
' Es muss ein Verweis auf 'Microsoft Word 8.0 Object Library' gesetzt werden.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "cmdOpenDoc"
' Steuerelement: Beschriftungsfeld "Label1"


'Autor: Robert Paix
'E-Mail: rpaix@proleit.de

'Jeder wird wohl die Möglichkeit kennen, mit CreateObject eine
'Application wie Word oder Excel aus VB aufzurufen und Dokumente
'so zu manipulieren. Diese Methode hat allerdings ein Problem.
'Wenn man 6 Word-Dokumente bearbeiten will, muss man 6 mal Word
'instanzieren, das Dokument laden und jedes Mal auch wieder Word
'schliessen, was doch einige Zeit dauert.
'Wenn man allerdings GetObject verwendet, wird erst versucht,
'ein schon bestehendes Objekt zu benutzen, d.h. erst wird
'geschaut, ob Word schon offen ist. Falls nicht, gibt diese
'Funktion den Fehlercode 429 zurück, mit dem man dann in einer
'Fehlerroutine springen kann, in der dann Word geöffnet wird
'(d.h. eine neue Instanz gebildet wird).

Option Explicit

'Deklaration eines "Zeigers" für das Word-Objektes
Private objWord As Word.Application

Private Sub cmdOpenDoc_Click()
    'Bei einem Fehler erfolgt ein Sprung zu startword
    On Error Goto StartWord
    
    'Hier wird versucht, den Zeiger auf eine bereits bestehende
    'Instanz der Word-Klasse zu setzen. Wenn noch keine Instanz
    'existiert, wird zu startword gesprungen.
    '(Zur Erinnerung, ein Objekt ist eine Instanz einer Klasse :-)
    
    Set objWord = GetObject(, "word.application")
    
    'Reine Sicherheit, ob objWord wirklich auf etwas zeigt
    If Not objWord Is Nothing Then
        'na, weiterer Code dürfte ja bekannt sein
        objWord.Visible = True
        
        objWord.Documents.Open (App.Path & IIf(Right(App.Path, 1) = "\", _
            "", "\") & "WordOffen.doc")
        
        'ach ja, am Schluss sollte man immer die Instanzen löschen
        '(Speicherplatzverbrauch)
        Set objWord = Nothing
    End If
  
    Exit Sub

StartWord:
    'Wenn GetObject nicht funktioniert hat, weil noch keine
    'Instanz existiert, gib Windows den Fehlercode 429 zurück
    
    If Err = 429 Then
        'Hier wird dann eine neue Instanz erschaffen
        Set objWord = CreateObject("word.application")
        
        'und wieder der bekannte Code
        objWord.Visible = True
        
        objWord.Documents.Open (App.Path & IIf(Right(App.Path, 1) = "\", _
            "", "\") & "\WordGestartet.doc")
            
        Set objWord = Nothing
    Else
        'Wenn der Fehlercode nicht 429 lautete, dann ist Word
        'entweder nicht installiert oder es steht nicht genügend
        'Speicherplatz zur Verfügung
        
        Call MsgBox("Mag nicht!")
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 2 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Rick am 23.05.2003 um 12:46

Zum Kommentar von Marius Hennecke: Die Doppelung macht dann Sinn, wenn man die Fehler differenzierter Behandeln möchte. Der Tipp mit der Fehlernummer war gar nicht so schlecht. Der Anwender soll ja auch genauer informiert werden, weswegen etwas nicht funktioniert. Ich habe das Ganze mit Excel verwendet. Funktioniert dort Tadellos unter Windows XP.

Kommentar von Marius Hennecke am 10.07.2001 um 18:24

Also ich wuerde im ErrorHandler anstatt den gleichen Code von oben nochmal zu schreiben einfach ein "Resume Next" dahinsetzen. Damit eruebrigt sich dann die Doppelung.