2012-06-25 12 views
7

ネットワーク共有に.dotmテンプレートファイルがあります。 Word、Office、およびOutlookオブジェクトライブラリへの参照を持つマクロがあります。 Microsoft Office 2007とOffice 2010と共に、Windows XPとWindows 7の2つの異なるプラットフォームを使用します。ユーザーがテンプレートファイルを開くと、WordとOfficeの参照が自動的に調整されます(Microsoft Word 12 Objectライブラリまたは必要に応じてMicrosoft Word 14 Object Library)、問題なくマクロが実行されます。Outlookオブジェクトライブラリがバージョン12と14の間で切り替わらない

Microsoft Outlook Object Libraryは、バージョン12から14に適切に切り替わります。バージョン14から12に正しく切り替えられません。その場合、libaryが見つからないというエラーが表示されます。これはバグですか?回避策はありますか?何か私は見落としている?

+5

私はあなたが 'EarlyBinding'を使っていると信じています。' LateBinding(LB) 'を使ったことがありますか? LBの利点は、異なるコンピュータで異なるバージョンが実行されることを心配する必要がないことです。コードは、コードが実行されているPCに存在するバージョンと常にバインドされます。彼のリンクを参照してください:http://support.microsoft.com/kb/245115 –

+0

ありがとう。私はそのオプションを予備にしておきます。むしろ、私は他の2つの参照がいずれの方向にも自動的に更新する理由を尋ねていますが、Outlookは特にそうではありません。それがそうであれば、私は遅い拘束を使用する必要があります、あなたは – ForEachLoop

+0

私はExcel VBAを使用して、同じ問題に遭遇しました。 Microsoft OfficeとMicrosoft Excelライブラリへの(初期の)参照は、バージョン12と14の間で自動的に切り替わりますが、Microsoft Outlookへの参照は自動的に切り替わります。すなわち、それは12から14に自動的に変更されますが、12に戻ることはありません。 – comecme

答えて

3

ForEachLoop、

あなたの質問は主に回答されているようです。私は、明快にするために、ちょっとした情報を追加し、この質問に答えを提供するだけです。 OssiemacのMicrosoftフォーラムのユーザーは、Siddarth Routによって述べられているようにLateBinding was the way to goと記載しました。 Siddarthが暗示するように、それはあなたが参照を心配する必要はないということを意味します。 -

〜JOL

Private Sub btnLateBindMethod_Click() 
    ' Variables used for LateBinding 
    Dim objOutlook As Object 'Outlook.Application 
    Dim objEmail As Object  'Outlook.MailItem  
    Dim objNameSpace As Object 'Outlook.NameSpace  
    Const OutLookMailItem As Long = 0 'For Late Binding 
    Const OutLookFolderInbox As Long = 6 'For Late Binding 
    Const OutLookFormatHTML As Long = 2 'For Late Binding 
    Dim strSubject As String 
    Dim strAddress As String 


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

    If objOutlook Is Nothing Then 
     Set objOutlook = CreateObject("Outlook.Application") 
     Set objNameSpace = objOutlook.GetNamespace("MAPI") 
     objNameSpace.GetDefaultFolder(OutLookFolderInbox).Display 
    End If 

Set objEmail = objOutlook.CreateItem(OutLookMailItem) 

strSubject = "Hello World" 

    With objEmail 

     '.To = strToAddress 'Commented to prevent accidental send 

     .Subject = strSubject 

     .BodyFormat = OutLookFormatHTML 

     .Display 

     'Full Name of window can change depending on Tools -> Options -> Mail Format 
     'Changing this option for outgoing mail changes the window name. 
     'However, AppActivate appears not to require entire name but needs up to end 
     'of - Message which is included in heading following the Subject string 
     'irrespective of the Mail Format option chosen. 
     AppActivate (strSubject & " - Message") 

    End With  
End Sub 

ジミー・ペーニャがcontrast of EarlyBinding and LateBindingを議論する記事があります。

Ossiemacは、私は再フォーマットし、ここに置かれている、電子メールの送信にLateBindingを使用するためのいくつかのサンプルコードを提供しました

+1

Thanks 。私は晩年の結束を使用して終わった。素晴らしい記事です!あなたはエディタの多くのクールな機能を失うので、解決策は厄介です。また、Visual Studioなどのコンパイラを使用する場合は、WordやExcel 2007と2010を並べて読み込み、コンパイルするバージョンを選択するなど、これを回避できます。残念ながら、Outlookの2つのバージョンを並べて読み込むことはできません。 – ForEachLoop

+0

魅力的!私はそれが機能してうれしいです。そして、VSベアを使ってコンパイルするための異なるバージョンの単語間を渡すというコンセプトは、将来的にはさらに探求します。実装の詳細をありがとう! 〜JOL – JackOrangeLantern

+0

ありがとう、これはとても役に立ちました。メールアイテムの代わりにカレンダーの予定を扱っていたので、私は必要なすべての定数をGoogleに渡す必要がありましたが、これで私がうまく動作しました。私はOutlookの異なるバージョンのため、これを行う必要があります。 –

関連する問題