vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Word-Aufruf funktioniert unter Word 2016 nicht mehr 
Autor: Qude
Datum: 03.08.16 18:18

In meinem Programm kann ich über Word ein Dokument aufbauen und es mit über das Programm erfragte Daten ausfüllen. Bevor ich diese Dokument bearbeite, prüfe ich ob Word überhaupt auf dem Rechner vorhanden ist. Dies mache ich über [ObjectExists("Word.Application")]. Nur wenn ich eine positive Antwort bekomme, rufe ich Word aus meinem Programm heraus auf. Dies hat in der Vergangenheit auch mit allen Windows- und Word-Versionen immer funktioniert. Seit Windows 10 in Verbindung mit Word 2013 funktioniert die Überprüfung ob Word vorhanden ist mehr.
Kann mir hier jemand weiter helfen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Word-Aufruf funktioniert unter Word 2016 nicht mehr 
Autor: Blackbox
Datum: 03.08.16 19:21

Hallo

proggst Du zufällig .NET?
Ich kenne das Schlüsselwort ObjectExists für VB-Classic nämlich nicht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Word-Aufruf funktioniert unter Word 2016 nicht mehr 
Autor: Qude
Datum: 03.08.16 19:25

Nein!
Ich benutze diese Funktion in meinem VB6-Programm.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Word-Aufruf funktioniert unter Word 2016 nicht mehr 
Autor: Qude
Datum: 03.08.16 19:46

Ich muss mich korrigieren. Ich setzte bisher folgende Funktion ein:

Public Function ObjectExists(ByVal Class As String) As Boolean
Dim lGUID As GUID

If CLSIDFromProgID(StrPtr(Class), lGUID) = 0 Then
ObjectExists = True
End If
End Function

Hier muss also der Wurm seit Word 2013/2016 drin liegen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Word-Aufruf funktioniert unter Word 2016 nicht mehr 
Autor: Blackbox
Datum: 03.08.16 20:16

Hallo,

schon besser.

Um Dir aber viel Arbeit abzunehmen schlag ich Dir vor, diese eigene Funktion ganz zu umgehen
und eine Fehlerroutine um CreateObject() zu bauen. Damit prüfst Du, ob das Objekt instanziert
werden kann und hast, sozusagen als Geschenk, gleich auch noch ein gültiges Objekt mit dem man
gleich arbeiten kann.

Somit:

Public Function ObjectExists(ByVal Class As String, Byref obj AS Object) As _
  Boolean
    Dim ob AS Object
 
    ObjectExists = false 
    Set obj = Nothing
 
    on Error Resume NoClassFound
 
    Set ob = CreateObject( class )
    If ObjPtr(ob) > 0 then
       ObjectExists = true
       Set obj = ob
    End if
 
    Exit Function
 
NoClassFound:
    Resume 
 
End Function
Der Parameter obj in der Funktion returnt einen Pointer auf eine IDispatch-Schnittstelle,
oder NULL, wenn die Class nicht instanziert werden kann und die Funktion liefert FALSE.

Jetzt kannst Du dein gewünschtes Objekt referenzieren:


Dim o As Object
Dim wb As Das_Objekt_das_Du_Willst
 
If ObjectExists("Word.Application", o) Then
   Set wb = o
Else
   MsgBox "Fehler. Das geforderte Element: Word konnte nicht gefunden bzw." & _
     "geladen werden"
End If


Beitrag wurde zuletzt am 03.08.16 um 20:34:10 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Deklaration von CLSIDFromProgID 
Autor: visualfx
Datum: 03.08.16 20:31

Hallo Qude,

vieleicht liegt der "Fehler" aber auch schon in der Deklaration von CLSIDFromProgID.

So sollte diese aussehen:

Private Declare Function CLSIDFromProgID Lib "ole32.dll" ( _
    ByVal lpszProgID As Long, _
    pCLSID As GUID) As Long
Wie sieht Deine Deklaration aus?

Gruß, Stefan

Beitrag wurde zuletzt am 03.08.16 um 20:32:14 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel