Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bibliothek-Verweis auf Microsoft Outlook xx.0 Object Library

Begonnen von claus66, August 22, 2016, 15:35:58

⏪ vorheriges - nächstes ⏩

claus66

Hallo,

in einer Mehrbenutzer-Anwendung nutze ich unter anderem die Möglichkeit auf Microsoft Outlook zuzugreifen.
Soweit alles gut, denn ich habe das in früheren Access-Anwendungen alles schon erfolgreich durchgeführt.

Allerdings in einer neuen Anwendung haben die einzelnen User unterschiedliche Office-Versionen (2010'er und 2013'er). Und genau das macht jetzt Probleme - zum einen schon beim Öffnen der Datenbank und ebenso später, wenn über einen Befehl eine Outlook-Instanz geöffnet werden soll.
Die 2010'er Office-Versionen beinhalten den Verweis "Microsoft Outlook 14.0 Object Library" und die 2013'er Version den Verweis "Microsoft Outlook 15.0 Object Library"

Gibt es denn überhaupt eine Lösung für solch ein Problem?
Ich habe mal etwas gehört/gelesen von "Late Binding". Wäre das der richtige Lösungsansatz?

PhilS

Zitat von: claus66 am August 22, 2016, 15:35:58Gibt es denn überhaupt eine Lösung für solch ein Problem?
Ich habe mal etwas gehört/gelesen von "Late Binding". Wäre das der richtige Lösungsansatz?
Ja, genau. Late binding ist die beste Lösung, wenn man nicht wissen kann welche Version einer Bibliothek bei den Anwendern installiert ist. - Selbst wenn die Bibliothek gar nicht vorhanden ist, funktioniert wenigstens der Rest der Anwendung ohne Fehler.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

markusxy

Man muss nur wissen, dass man bei Late Binding alle Konstanten deklarieren muss und keine Events mehr verwenden kann. Die Vorteile sind aber unbestritten. Das Fehlen der Events für mich aber eher ein NoGo.

Siehe: http://www.access-basics.de/index.php/Early_Binding_und_Late_Binding.html
LG Markus

claus66

@markus888: Den Beitrag von Access-Basics hatte ich bereits vor mir liegen. Im Moment weiß ich aber ehrlich gesagt noch nicht, wie ich das hinbekommen soll bzw. wie ich die Konstanten deklarieren muss.

Könnt ihr mir vielleicht anhand meines bisherigen Codes einen Vorschlag machen, was ich hier ändern muss:

Private Sub btnMailParcelLetter_Click()
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    With objMail
        .Subject = "Parcel " & Me!ConsigMatch & " from " & Me!DateDNE
        .Body = Me!txtMailContent1
        .Attachments.Add CStr(Me!ParcelLetterAttachment)
        .Display
        '.Send
    End With
End Sub

DF6GL

Hallo,

etwa so:



Private Sub btnMailParcelLetter_Click()
    Const olMailItem = 0
    Dim objMail As Object
    Dim objOutlook As Object
    Set objOutlook = CreateObject("outlook.application")
    Set objMail = objOutlook.CreateItem(olMailItem)
    With objMail
        .Subject = "Parcel " & Me!ConsigMatch & " from " & Me!DateDNE
        .Body = Me!txtMailContent1
        .Attachments.Add CStr(Me!ParcelLetterAttachment)
        .Display
        '.Send
    End With
End Sub


Der Wert der Konstanten kann im Falle von Early_Binding durch Abfrage im Direktfenster (?olMailItem) oder durch IntelliSense bei Einzelschritt-Ausführung ermittelt werden.

Weiterhin steht auch der Objektkatalog zur Verfügung.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

claus66

@DF6GL: Herzlichen Dank! Dein Vorschlag hat wunderbar funktioniert.