2017-11-01 12 views
3

Ich habe diese kleine Funktion, die die Erstellung einer E-Mail über VBA erreicht,
Es erhält die Daten von einer anderen Funktion, die zusammen mit einer Excel-Datei funktioniert.Wie spätes Binden in VBA?

Das Problem, das ich habe, ist, dass ich alles durch Excel 2016 gemacht habe, und wenn einige meiner Kollegen versuchen, es dort zu verwenden, ein Fehler der fehlenden Verweise (Outlook-Bibliothek 16.0).

Also schaute ich in die Internet-Lösungen und die, die ich fand, sind viele, aber desto besser ist Late Binding. Ich habe alles darüber gelesen, aber ich verstehe nicht wirklich, was im folgenden Code vor sich geht und wie es funktioniert.

Sub EscalateCase(what_address As String, subject_line As String, email_body As String) 

    Dim olApp As Outlook.Application 
    Set olApp = CreateObject("Outlook.Application") 

     Dim olMail As Outlook.MailItem 
     Set olMail = olApp.CreateItem(olMailItem) 

     olMail.To = what_address 
     olMail.Subject = subject_line 
     olMail.BodyFormat = olFormatHTML 
     olMail.HTMLBody = email_body 
     olMail.Send 

    End Sub 

Deshalb können Sie mir vielleicht mit diesem Beispiel helfen, um diesen praktischen Fall von mir zu sehen.

+7

Ändern Sie "Dim olApp As Outlook.Application" zu "Dim olApp As Object" – CallumDA

+0

https://support.microsoft.com/en-us/help/245115/using-early-binding-and-late-binding- In-Automatisierung –

Antwort

8

Dies wird frühe Bindung:

Dim olApp As Outlook.Application 
Set olApp = New Outlook.Application 

Und das ist die späte Bindung:

Dim olApp As Object 
Set olApp = CreateObject("Outlook.Application") 

Späte Bindung einen Verweis auf Outlook-Bibliothek 16.0 während keine frühe Bindung erfordert. Beachten Sie jedoch, dass die späte Bindung etwas langsamer ist und Sie für dieses Objekt keine Intellisense erhalten.

3

Wie Callum darauf hingewiesen hat, beinhaltet die späte Bindung, dass die Anwendungsreferenz auf ein Objekt geändert wird und keine Referenz auf die Bibliothek gesetzt wird.

Ohne eine Referenz weiß Excel bis zur Laufzeit nichts über Outlook. Das bedeutet auch, dass Intellisense nicht nur nicht funktioniert, auch die konstanten Namen für Werte in Outlook funktionieren nicht.

z.B. Wenn Sie im Outlook-Direktfenster Application.CreateItem( eingeben, erhalten Sie eine große Auswahl an Elementtypen zur Auswahl. olContactItem zum Beispiel.

Excel hat keine Ahnung, was olContactItem bedeutet - es ist eine Outlook-Konstante, die nur Outlook oder eine Anwendung mit einem Verweis auf Outlook versteht.

In Outlook Fenster ?olContactItem und es wird 2 zurückgeben. Das ist die Nummer, die Sie anstelle des konstanten Namens verwenden müssen.

So Ihre Code-Änderungen von
Application.CreateItem(olContactItem)-olApp.CreateItem(2)

müssen Sie dies im gesamten Code tun.