none
Microsoft outlook xx.x object library が自動で変更されてしまう。 RRS feed

  • 質問

  • Excel2016でユーザーフォームを利用したアプリケーションを作成、メールを自動生成する処理があるためMicrosoft outlook 16.0 object libraryが必要です。

    このファイルを複数人で共有利用したいのですが、利用者の多くがExcel2007を利用しており、outlook object libraryは10.0までしかバージョンがありません。

    Excel2007で実行すると参照オブジェクトがなくコンパイルエラーになりますが、参照設定でoutlook 10.0 object libraryを手動で追加すれば問題なく動作します。しかし同じファイルをExcel2016利用者が開くと自動で参照設定が変更され、Excel2016でしか動作しない状態に戻ってしまいます。

    この問題を解決する良い方法がありましたらぜひともご教示ください。

    2019年7月18日 10:45

すべての返信

  • バージョン依存性を減らすため、参照設定を外してレイトバインドでのコーディングに切り替えるとか。
    イベント処理(Application_ItemSend など)が必要な場合は厄介ですが…。

    ' Dim objOutlook As Outlook.Application
    ' Set objOutlook = New Outlook.Application
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")

    なお、参照設定を外すと Outlook の各種列挙型が使えなくなるため、それらは自前で Const しなおす必要があります。

    2019年7月18日 11:48
  • 個人的見解で言えば、サポートの終了した Excel 2007 の利用を終了して、全員が Office 2016 / 2019 / 365 の環境に移行するのが「良い解決方法」だと思います。

    ※予算が....という話は考慮外になりますが、いずれにせよどこかのタイミングでは考えなければならないことですね。


    Hebikuzure aka Murachi Akira

    2019年7月18日 12:22
  • 私もいつも思っていました。勝手に切り替わるので面倒ですよね。

    VSTOでアドインを作成すれば解決できる気がします。

    具体的には、ワークブックを開くたびに、該当ブックの VBProject.References プロパティを走査し、Remove や AddFromFile メソッドなどを使って、エクセルのバージョンに応じて Outlook object liblary の参照バージョンを切り替えるのはどうでしょうか。

    2019年7月18日 17:30
  • 参照設定からレイトバインドへの変更で、両バージョン間で問題なく動作するに至りました。

    大変助かりました、アドバイス誠にありがとうございました。

    2019年7月19日 5:00