【Outlook】VBAの「SendUsingAccount」で送信元アカウントを切替える書き方

【Outlook】VBAの「SendUsingAccount」で送信元アカウントを切替える書き方
🛡️ 超解決

【要点】Outlook VBAで送信元アカウントを切り替える方法

  • SendUsingAccountプロパティ: 送信メールの送信元アカウントを指定する際に使用するプロパティです。
  • Accountオブジェクトの取得: VBAコード内で、利用可能なアカウントオブジェクトを取得する必要があります。
  • メールアイテムへの適用: 取得したアカウントオブジェクトを、送信したいメールアイテムの「SendUsingAccount」プロパティに設定します。

ADVERTISEMENT

Outlook VBAで送信元アカウントを切り替える仕組み

Outlook VBAでメールの送信元アカウントを切り替えるには、主に「SendUsingAccount」プロパティを利用します。

このプロパティは、MailItemオブジェクト(メールアイテム)に属しており、どのメールアカウントを使用してそのメールを送信するかを指定するために使われます。

具体的には、Outlookに設定されているアカウントの中から、送信に使用したいアカウントを表す「Accountオブジェクト」を取得し、そのオブジェクトを「SendUsingAccount」プロパティに代入することで、送信元アカウントの切り替えが実現します。

この仕組みを理解することで、複数のアカウントを使い分ける必要がある場合に、意図したアカウントからの送信を確実に行えるようになります。

お探しの解決策が見つからない場合は、こちらの「Teams/Outlookトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

Outlook VBAで送信元アカウントを切り替える具体的な手順

  1. Outlookオブジェクトモデルの参照設定を行う
    VBAエディター(Alt+F11)を開き、「ツール」→「参照設定」を選択します。一覧から「Microsoft Outlook XX.X Object Library」にチェックを入れ、「OK」をクリックします。XX.XはOutlookのバージョンによって異なります。
  2. Outlookアプリケーションオブジェクトを取得する
    VBAコードの冒頭で、Outlookアプリケーションのインスタンスを取得します。すでにOutlookが開いている場合は、既存のインスタンスを使用します。
  3. 使用したいアカウントオブジェクトを取得する
    Outlookアプリケーションオブジェクトの「Accounts」コレクションから、送信に使用したいアカウントを名前またはインデックスで指定して取得します。アカウント名はOutlookの設定画面で確認できます。
  4. 新しいメールアイテムを作成する
    取得したOutlookアプリケーションオブジェクトの「CreateItem」メソッドを使用して、新しいメールアイテム(MailItem)を作成します。
  5. SendUsingAccountプロパティにアカウントオブジェクトを設定する
    作成したメールアイテムの「SendUsingAccount」プロパティに、手順3で取得したアカウントオブジェクトを代入します。
  6. メールの宛先、件名、本文などを設定する
    必要に応じて、メールの宛先(To, Cc, Bcc)、件名(Subject)、本文(Body)などのプロパティを設定します。
  7. メールを送信する
    設定が完了したら、メールアイテムの「Send」メソッドを実行してメールを送信します。

特定のアカウント名でアカウントを取得するVBAコード例

以下は、Outlookに設定されているアカウント名(例:「your_email@example.com」)を指定して、そのアカウントオブジェクトを取得するVBAコードの例です。

このコードを基に、ご自身のOutlookに設定されているアカウント名に合わせて修正してください。

Sub SendEmailFromSpecificAccount()

    Dim outlookApp As Object
    Dim mailItem As Object
    Dim account As Object
    Dim targetAccountName As String

    ' 送信元として使用したいアカウント名を設定します。
    ' Outlookの「ファイル」→「アカウント設定」→「アカウント設定」で確認できるメールアドレスを指定してください。
    targetAccountName = "your_email@example.com"

    On Error Resume Next
    ' 既にOutlookが開いているか確認し、取得します。
    Set outlookApp = GetObject(, "Outlook.Application")
    If outlookApp Is Nothing Then
        ' Outlookが開いていない場合は新規に起動します。
        Set outlookApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0

    ' 指定した名前のアカウントを検索します。
    Set account = Nothing
    For Each acc In outlookApp.Accounts
        If acc.DisplayName = targetAccountName Or acc.SmtpAddress = targetAccountName Then
            Set account = acc
            Exit For
        End If
    Next acc

    ' アカウントが見つからなかった場合のエラー処理
    If account Is Nothing Then
        MsgBox "指定されたアカウントが見つかりませんでした: " & targetAccountName, vbExclamation
        Exit Sub
    End If

    ' 新しいメールアイテムを作成します。
    Set mailItem = outlookApp.CreateItem(0) ' 0はolMailItem定数

    ' SendUsingAccountプロパティに取得したアカウントオブジェクトを設定します。
    Set mailItem.SendUsingAccount = account

    ' メール本文の設定
    With mailItem
        .To = "recipient@example.com"
        .Subject = "テストメール(特定アカウントより送信)"
        .Body = "これはVBAで特定のアカウントから送信されたテストメールです。"
        ' 必要に応じてCc, Bcc, 添付ファイルなどを設定
        ' .Cc = "cc_recipient@example.com"
        ' .BCC = "bcc_recipient@example.com"
        ' .Attachments.Add "C:\path\to\your\file.pdf"

        ' メールを送信します。
        .Send
    End With

    ' オブジェクトの解放
    Set mailItem = Nothing
    Set account = Nothing
    ' Outlookアプリケーションオブジェクトは、新規起動した場合のみ解放します。
    ' GetObjectで取得した場合は解放しない方が良い場合があります。
    ' If Not outlookApp Is Nothing Then Set outlookApp = Nothing

    MsgBox "メールが送信されました。"

End Sub

アカウントのインデックス番号で取得するVBAコード例

アカウントは、Outlookの「Accounts」コレクション内で0から始まるインデックス番号でアクセスすることも可能です。

ただし、この方法はアカウントの追加・削除・順序変更によってインデックス番号が変わる可能性があるため、通常はアカウント名を指定する方法が推奨されます。

参考として、インデックス番号でアカウントを指定するコード例を以下に示します。

Sub SendEmailFromAccountByIndex()

    Dim outlookApp As Object
    Dim mailItem As Object
    Dim account As Object
    Dim accountIndex As Integer

    ' 送信元として使用したいアカウントのインデックス番号を設定します。
    ' 0から始まります。通常、最初のアカウントは0、次が1となります。
    accountIndex = 0 ' 例: 最初の(インデックス0の)アカウントを使用

    On Error Resume Next
    Set outlookApp = GetObject(, "Outlook.Application")
    If outlookApp Is Nothing Then
        Set outlookApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0

    ' インデックス番号でアカウントを取得します。
    On Error Resume Next ' インデックスが無効な場合のエラーを無視
    Set account = outlookApp.Accounts.Item(accountIndex)
    On Error GoTo 0

    ' アカウントが取得できなかった場合のエラー処理
    If account Is Nothing Then
        MsgBox "指定されたインデックスのアカウントが見つかりませんでした。インデックス: " & accountIndex, vbExclamation
        Exit Sub
    End If

    ' 新しいメールアイテムを作成します。
    Set mailItem = outlookApp.CreateItem(0) ' 0はolMailItem定数

    ' SendUsingAccountプロパティに取得したアカウントオブジェクトを設定します。
    Set mailItem.SendUsingAccount = account

    ' メール本文の設定
    With mailItem
        .To = "recipient2@example.com"
        .Subject = "テストメール(インデックス指定アカウントより送信)"
        .Body = "これはVBAでインデックス指定されたアカウントから送信されたテストメールです。"
        .Send
    End With

    ' オブジェクトの解放
    Set mailItem = Nothing
    Set account = Nothing
    ' Set outlookApp = Nothing

    MsgBox "メールが送信されました。"

End Sub

新しいTeams(v2)と従来Teamsの機能差・操作方法

新しいTeams(Teams v2)は、UIやパフォーマンスが改善されていますが、基本的な機能や操作感は従来Teamsと大きく変わりません。

「SendUsingAccount」プロパティのような、Outlook VBAの機能に直接的な影響はありません。

Teamsの会議招待をOutlookの予定として登録する際などに、Outlook側のアカウント設定が影響することはありますが、Teams自体のVBA機能とは区別されます。

もしTeamsの会議招待で送信元アカウントを切り替えたい場合は、Outlookの機能として操作・設定を行う必要があります。

ADVERTISEMENT

新しいOutlookと従来Outlookの機能差・操作方法

新しいOutlookでは、UIデザインが刷新され、Web版Outlookとの連携が強化されています。

VBAの「SendUsingAccount」プロパティ自体は、新しいOutlookでも引き続き利用可能です。

ただし、新しいOutlookでは、VBAのサポート状況や一部オブジェクトの挙動が従来Outlookと異なる場合があります。

特に、アドイン開発など、より高度なカスタマイズを行う際には、新しいOutlookの仕様変更に注意が必要です。

今回紹介した「SendUsingAccount」プロパティを使った基本的なメール送信処理は、多くの場合、新しいOutlookでも問題なく動作すると考えられます。

もし新しいOutlookでVBAコードが期待通りに動作しない場合は、Microsoftの公式ドキュメントや開発者コミュニティで最新情報を確認することをお勧めします。

Mac版OutlookでのVBA利用について

Mac版Outlookでは、Windows版Outlookとは異なり、VBAは標準でサポートされていません。

そのため、Mac版Outlookで同様の自動化を行いたい場合は、VBAではなくAppleScriptや、Outlook for Macがサポートする他のスクリプト言語、またはサードパーティ製の自動化ツールを利用する必要があります。

「SendUsingAccount」に相当する機能がAppleScriptで実装可能かどうかは、AppleScriptのドキュメントやOutlook for Macのスクリプト機能を確認する必要があります。

モバイル版OutlookでのVBA利用について

モバイル版Outlook(iOS版、Android版)では、VBAはサポートされていません。

モバイルデバイスでメール送信の自動化を行いたい場合は、Outlookの機能(定型文、クイック操作など)や、Power Automateなどのクラウドベースの自動化サービスを利用することを検討してください。

Web版OutlookでのVBA利用について

Web版Outlook(Outlook on the web)でも、VBAは直接実行できません。

Web版Outlookでカスタマイズや自動化を行いたい場合は、Office JavaScript APIを使用したOfficeアドインを開発するか、Power Automateなどのサービスを利用する必要があります。

「SendUsingAccount」に相当する機能は、Office JavaScript APIを通じて実装できる可能性がありますが、VBAとは異なる開発手法となります。

SendUsingAccountプロパティ利用時の注意点

アカウントが見つからない場合

VBAコードで指定したアカウント名やインデックス番号が、Outlookに設定されているアカウントと一致しない場合、「アカウントが見つかりません」というエラーが発生します。

この場合、Outlookの「ファイル」→「アカウント設定」→「アカウント設定」を開き、VBAコードで指定しているアカウント名(表示名またはSMTPアドレス)が正しいか確認してください。

特に、アカウント名をコピー&ペーストする際には、余分なスペースが含まれていないか注意が必要です。

Exchange Onlineなどの組織アカウントの場合

Exchange Online(Microsoft 365)や、組織のExchangeサーバーに接続しているアカウントの場合、組織のポリシーによって、特定のVBAマクロの実行が制限されていることがあります。

もしVBAコードが実行されない、またはエラーが発生する場合は、組織のIT管理者にお問い合わせください。

また、テナント設定によっては、アカウントの表示名が期待と異なる場合もあります。その場合は、`acc.SmtpAddress`プロパティでSMTPアドレスを指定してアカウントを特定することを試みてください。

DefaultSendAccountとの関係

Outlookには、メール作成時にデフォルトで使用されるアカウントを設定する「DefaultSendAccount」というプロパティもあります。

VBAで「SendUsingAccount」プロパティを設定した場合、そのメールアイテムの送信元アカウントは、明示的に設定されたアカウントになります。

これは、Outlookのオプションで設定されている「DefaultSendAccount」よりも優先されます。したがって、VBAで送信元を制御したい場合は、「SendUsingAccount」プロパティを使用するのが最も確実な方法です。

ショートカットキーやルールとの連携

作成したVBAマクロをショートカットキーに割り当てたり、Outlookのルール機能と連携させたりすることで、さらに効率的なメール送信が可能になります。

例えば、「特定の条件を満たすメールを受信したら、自動的に特定のアカウントから返信する」といった処理をVBAで実装し、Outlookルールでトリガーすることができます。

これにより、手作業でのアカウント切り替えの手間を省き、ミスの削減につながります。

エラーハンドリングの重要性

VBAコードを実行する際には、予期せぬエラーが発生する可能性があります。

例えば、指定したアカウントが存在しない、Outlookアプリケーションが起動できない、といった状況が考えられます。

これらのエラーに対処するために、`On Error Resume Next`や`On Error GoTo`といったエラーハンドリング文を適切に記述することが重要です。

これにより、エラーが発生した場合でもプログラムが停止せず、ユーザーに分かりやすいメッセージを表示したり、代替処理を実行したりすることが可能になります。

まとめ

この記事では、Outlook VBAで「SendUsingAccount」プロパティを使用して、メールの送信元アカウントを切り替える方法について解説しました。

具体的なVBAコード例を参考に、ご自身の環境に合わせてアカウント名などを修正して実装することで、意図したアカウントからのメール送信を確実に行えるようになります。

これにより、複数アカウント利用時の送信ミスを防ぎ、業務効率の向上に繋がるでしょう。

今後は、このVBAコードを基に、特定の条件で自動送信するマクロを作成したり、ショートカットキーに割り当てたりするなど、さらなる活用を検討してみてください。

👥
Teams/Outlookトラブル完全解決データベース サインイン、接続エラー、メール送受信の不具合など、特有のトラブル解決策を網羅。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
🌐

超解決 リモートワーク研究班

Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。