Error-Routine bei fehlendem Object

21/05/2009 - 19:04 von Dieter Schirmer | Report spam
Hallo,

ich möchte in einem Word-VBA-Projekt prüfen, ob z.B.Outlook installiert ist,
da ich innerhalb der Anwendung auf das Object-Model zugreife. Sobald ich die
Anwendung starte bekomme ich jedoch nur die Meldung: "Kompilierungsfehler im
verborgenen Modul!" Auch der eingesetzte Error_Handler fàngt das nicht ab.
Habe ich das Projekt in der Entwicklungsumgebung geöffnet und starte es, so
kommt die Meldung: "Projekt oder Bibliothek nicht gefunden!" Und es wird die
fehlende Bibliothek markiert. Welche Möglichkeiten habe ich, eine
vernünftige Meldung in der laufenden Anwendung zu erhalten? Im Beispiel ist
es Outlook, passiert aber auch mit anderen Anwendungen die ich ansprechen
möchte und nicht installiert sind. Die fehlenden Objekte werden auch in den
Verweisen als fehlend angezeigt.

Danke für Eure Hilfe und weiterhin einen schönen "Feiertag"

Gruss

Dieter
 

Lesen sie die antworten

#1 Thomas Gahler
21/05/2009 - 19:55 | Warnen spam
Hallo Dieter


Welche Möglichkeiten habe ich, eine vernünftige Meldung in der laufenden
Anwendung zu erhalten? [...]
Die fehlenden Objekte werden auch in den Verweisen als fehlend angezeigt.


Du hast verschiedene Möglichkeiten das Ganze in den Griff zu bekommen.

Du kannst als erstes prüfen ob irgenwelche Verweise gebrochen sind und wenn
dem so ist, dann kannst du entsprechend drauf reagieren. Hier hat es ein
Beispiel
http://groups.google.ch/group/micro...17fc8254cb

Doch ich empfehle eigentlich ein anderes Vorgehen. Kennst du den Unterschied
von "Early binding" und "Late binding" vielleicht kurz hier lesen
http://word.mvps.org/faqs/interdev/...inding.htm

Ich entwickle jeweils mit Early binding, dann kann ich Intelisense nutzen.
Wenn alles fertig ist, dann entferne ich den Verweis und baue den Code auf
Late binding um, da bracuht nur ganz wenig und dann bekomst du deine
Fehlermeldungen beriets nihct mehr.
Mit Late binding kannst du ein Objekt auf Outlook erzeuen und anschliessen
prüfen ob dass den Wert 'Nothing' hat oder eben nicht.


Die nachstehenden Zielen habe ich nicht getestet sondern kurz aus meinen
Programmen zusammen geschnippslet (wird wohl nicht laufen soll dir jedoch
zeigen wie es ungefàhr geht, wenn du damit nicht klar kommst, dann helfe ich
gerne weiter)


Option Explicit
'Wird mit Earlybinding gearbeitet muss ein Verweis auf
'die »Microsoft Outlook 1x.x Object Library« aktiviert werden
#Const EARLYBINDING = False 'oder True


Public Function funcObjektErstellenOutlook( _
ByRef bAppliaktionGestartetOL As Boolean) _
As Object

Application.StatusBar = "Verbindung zu Microsoft Outlook wird
aufgenommen..."
#If EARLYBINDING Then
Dim olApp As Outlook.Application

On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
bAppliaktionGestartetOL = False
On Error GoTo 0

If (olApp Is Nothing) Then
Set olApp = New Outlook.Application
bAppliaktionGestartetOL = True
End If
#Else
Dim olApp As Object
'hier werden alle Konstanten deklariert, die verwendet werden aber bei
Late binding nicht zur Verfügung stehen
Const olFolderContacts As Integer = 10
Const olContactItem As Integer = 2
Const olContact As Integer = 40
Const olDistributionList As Integer = 69

On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
bAppliaktionGestartetOL = False
On Error GoTo 0

If (olApp Is Nothing) Then
Set olApp = CreateObject("Outlook.Application")
bAppliaktionGestartetOL = True
End If
#End If

'Prüfen ob eine neue Instanz erzeugt werden konnte
If Not (olApp Is Nothing) Then
'..
End If

Set funcObjektErstellenOutlook = olApp
End Function





Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP1), Office 2007 (SP?)

Ähnliche fragen