2017-11-01 21 views
3

私はVBA経由で電子メールを作成するこの小さな機能を持っています。
Excelファイルと一緒に機能する別の機能からデータを取得します。VBAでレイトバインディングを行う方法は?

問題はExcel 2016で作成したもので、一部の同僚が参照を使用しないとエラーが表示される(Outlook Library 16.0)場合があります。

私はインターネットのソリューションを見て、私が見つけたものはたくさんありますが、遅いバインディングが優れています。私はそれについてすべてを読んだが、実際に何が起こっているのか、それを次のコードでどのように動作させるのかを本当に理解するようには思えない。

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 

これは、私がこの実用的なケースを見るために、この例で私を助けてくれるかもしれません。

+7

「Dim olApp as Outlook.Application」を「Dim olApp As Object」に変更する – CallumDA

+0

https://support.microsoft.com/en-us/help/245115/using-early-binding-and-late-binding-インオートメーション –

答えて

8

これは、事前バインディングです:

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

そして、これは遅延バインディングです:

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

後期事前バインディングがないのに対し、見通し図書館16.0への参照を必要としない結合。ただし、レイトバインドは少し遅くなり、そのオブジェクトに対してインテリセンスを得ることはできません。

3

Callumが指摘したように、レイトバインディングでは、アプリケーション参照をオブジェクトに変更し、ライブラリへの参照を設定しません。

参照なしExcelは実行時までOutlookについて何も知らない。これは、インテリセンスが機能しないだけでなく、Outlookの値の定数名も機能しないことを意味します。

OutlookのイミディエイトウィンドウでApplication.CreateItem(と入力すると、アイテムタイプの全負荷を選択して選択できます。たとえばolContactItem

Excelには意味がありませんolContactItemは、OutlookまたはOutlookへの参照を含むアプリケーションだけが理解するOutlook定数です。

Outlookの即時ウィンドウタイプ?olContactItemで、2が返されます。これは、定数名の代わりに使用する必要がある番号です。

だからolApp.CreateItem(2)

から
Application.CreateItem(olContactItem)からあなたのコードの変更は、あなたのコード全体これを実行する必要があります。

関連する問題