次の方法で共有


Microsoft Office Access 2003 でオートメーションを使用して Microsoft Office Outlook 2003 を操作する

 

Frank Rice
Microsoft Corporation

February 2004

適用対象:
    Microsoft® Office Access 2003
    Microsoft Office Outlook® 2003

要約: オートメーションとは、あるプログラムの処理を別のプログラムで制御するプロセスのことです。オートメーションを使用して Microsoft Office Access 2003 アプリケーションから Microsoft Office Outlook 2003 を操作する方法について説明します。サンプル プログラム ファイル内では実際のコメント行は英語で書かれていますが、この記事内では説明目的で日本語で書かれています。

目次

はじめに
Access を使用して Outlook のメッセージを送信する
Outlook の予定を追加する
Outlook の仕事またはアラームを追加する
Outlook の連絡先アイテムを作成する
まとめ

odc_Ac_olautosample.exe のダウンロード

はじめに

オートメーションとは、ある製品の処理を別の製品から制御するプロセスです。オートメーションにより、サーバー製品のオブジェクト、メソッド、およびプロパティをクライアント製品で使用できます。たとえば、Microsoft Office System でオートメーションを使用すると、Microsoft Office Access 2003 から Microsoft Office Outlook 2003 のメソッドにアクセスして、電子メール メッセージの送信、予定の作成、アラームの設定などの操作を実行できます。この記事では、これらの操作を実行する方法について、さまざまなテクニックを示した Microsoft Visual Basic® for Applications (VBA) コードを準備して詳しく説明します。

注: この記事は、マイクロソフト サポート技術情報の記事をまとめたものです。詳細については、マイクロソフト サポート技術情報の該当する記事を検索して参照してください。

Access を使用して Outlook のメッセージを送信する

Outlook からの電子メール送信は、頻繁に実行する基本的な操作の 1 つです。ここでは、オートメーションを使用して、Access から Outlook のメッセージを作成して送信する方法を示します。

SendObject メソッドを使用すると、Access から MAPI メール メッセージをプログラムによって送信できます。ただし、SendObject メソッドを使用した場合、すべてのメール機能にはアクセスできないため、外部ファイルの添付やメッセージの重要度の設定ができません。次の例では、オートメーションを使用したメール メッセージの作成と送信の方法を示します。オートメーションを使用すると、SendObject メソッドでは使用できない Outlook の多数の機能を利用できます。

オートメーションを使用した Outlook のメール メッセージの送信には、次の 6 つの主要なステップがあります。

  1. Outlook セッションを初期化します。
  2. メッセージを作成します。
  3. 受信者 ([宛先]、[CC]、および [BCC]) を入力し、名前を解決します。
  4. [件名]、[本文]、[重要度] などのプロパティを適切に設定します。
  5. 添付ファイルがある場合は追加します。
  6. メッセージを表示して送信します。

Outlook のメール メッセージをプログラムして送信する

  1. [マイ ドキュメント] フォルダに、Customers.txt という名前のサンプル テキスト ファイルを作成します。

  2. Access を起動し、Automation.mdb という名前のデータベースを作成します。

    注: この記事のサンプルでは、ダウンロード可能なファイルとしてこの記事に添付された Automation.mdb データベースを使用します。

  3. モジュールを作成し、まだ入力していない場合は、宣言セクションに次の行を入力します。

    Option Explicit
    
  4. [ツール] メニューの [参照設定] をクリックします。

  5. [参照設定] ダイアログ ボックスで、[Microsoft Outlook 11.0 Object Library] をクリックして選択し、[OK] をクリックします。

    注: [参照可能なライブラリ ファイル] ボックスに [Microsoft Outlook 11.0 Object Library] が表示されない場合は、次の操作を行います。

    • Windows の [コントロール パネル] の [プログラムの追加と削除] をダブルクリックします。
    • インストールされているプログラムの一覧から Microsoft Office 2003 を選択し、[変更] をクリックします。Microsoft Office 2003 セットアップがメンテナンス モードで起動します。
    • [再インストール/修復] をクリックし、[次へ] をクリックします。
    • [Office のインストールで発生したエラーを検出して修復します] をクリックし、[完了] をクリックします。
  6. [OK] をクリックして [参照設定] ダイアログ ボックスを閉じます。

  7. 新しいモジュールに次の VBA プロシージャを入力するか、または貼り付けます。

    Sub sbSendMessage(Optional AttachmentPath)
       Dim objOutlook As Outlook.Application
       Dim objOutlookMsg As Outlook.MailItem
       Dim objOutlookRecip As Outlook.Recipient
       Dim objOutlookAttach As Outlook.Attachment
    
       On Error GoTo ErrorMsgs
    
       ' Outlook セッションを作成します。
       Set objOutlook = CreateObject("Outlook.Application")
       ' メッセージを作成します。
       Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
       With objOutlookMsg
          ' メッセージの [宛先] に受信者を追加します。ここに
          ' 自分の名前を入力します。
         Set objOutlookRecip = .Recipients.Add("中村美香")
          objOutlookRecip.Type = olTo
          ' メッセージの [CC] に受信者を追加します。
          Set objOutlookRecip = .Recipients.Add("安部信夫")
          objOutlookRecip.Type = olCC
          ' メッセージの [件名]、[本文]、および [重要度] を設定します。
          .Subject = "Microsoft Outlook を使用したオートメーションの実験"
          .Body = "本文メッセージ。" & vbCrLf & vbCrLf
          .Importance = olImportanceHigh  ' 重要度: 高
          ' メッセージに添付ファイルを追加します。
          If Not IsMissing(AttachmentPath) Then
             Set objOutlookAttach = .Attachments.Add(AttachmentPath)
          End If
          ' 各受信者の名前を解決します。
          For Each objOutlookRecip In .Recipients
             If Not objOutlookRecip.Resolve Then
                objOutlookMsg.Display
    .........End If
          End If
          Next
          .Send
       End With
       Set objOutlookMsg = Nothing
       Set objOutlook = Nothing
       Set objOutlookRecip = Nothing
       Set objOutlookAttach = Nothing
    ErrorMsgs:
       If Err.Number = "287" Then
          MsgBox "Outlook セキュリティ警告に対して [いいえ] をクリックしました。" & _
          "プロシージャを再実行し、[はい] をクリックして電子メール アドレス" & _
          "にアクセスしてメッセージを送信します。詳細については、& _
          "次のサイトのドキュメントを参照してください。https://www.microsoft.com/office" & _
          "/previous/outlook/downloads/security.asp. " "
       Else
          Msgbox Err.Number, Err.Description
       End If
    End Sub
    

    注: Outlook 電子メール セキュリティ アップデートの結果、以下のプロシージャを実行すると、電子メール アドレスへのアクセスを許可するかどうかの確認メッセージが数回、およびメッセージを送信するかどうかの確認メッセージが 1 回表示されます (次の図を参照)。これは正常な動作です。詳細については、「Security Features for Outlook 2002 and Previous Versions」(英語) を参照してください。

    図 1. 電子メール アドレスへのアクセスの確認メッセージ

    図 2. 電子メール メッセージ送信の確認メッセージ

  8. このプロシージャをテストするには、Visual Basic Editor の [イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。

    sbSendMessage "C:\Documents and Settings\UserName\My Documents\Customers.txt"
    
  9. 添付ファイルを指定せずにメッセージを送信するには、プロシージャを呼び出すときに引数を省略して、次のように入力します。

    sbSendMessage
    

Outlook の予定を追加する

ここでは、Access データベースで予定を作成し、オートメーションを使用してその予定を Outlook の予定表に追加する方法について説明します。

  1. Access を起動し、前の例で使用したサンプル データベース Automation.mdb を開きます。

  2. 次の情報を使用して、tblAppointments という名前のテーブルを作成します。

    フィールド名 データ型 フィールド サイズ サイズ 形式 既定値 必須かどうか
    Appt テキスト   50    
    ApptStartDate 日付/時刻     日付 (S)  
    ApptEndDate 日付/時刻     日付 (S)  
    ApptTime 日付/時刻     時刻 (M)  
    ApptLength 数値 長整数     15
    ApptNotes メモ         ×
    ApptLocation テキスト   50     ×
    ApptReminder Yes/No         ×
    ReminderMinutes 数値 長整数     15 ×
    AddedToOutlook Yes/No         ×
  3. ApptDate フィールドおよび ApptStartTime フィールドを複合主キーとして設定します。テーブルを閉じて tblAppointments という名前を付けて保存します。

    注: この例では、予定テーブルの主キーは、予定の日付フィールドと時刻フィールドで構成されています。同じ日付と時刻に複数の予定を追加できるようにする場合は、主キーを削除または変更してください。

  4. オートフォーム: 単票形式ウィザードを使用して tblAppointments テーブルに基づいたフォームを作成し、そのフォームを frmAppointments として保存します。

  5. デザイン ビューで frmAppointments フォームを開き、次のフォーム プロパティを変更します。

    • フォーム プロパティ - 標題: Appointment Form
    • フォーム ヘッダー - 高さ: .5"
    • AddedToOutlook チェック ボックス - 使用可能: No
  6. フォーム ヘッダー セクションにコマンド ボタンを追加し、次のプロパティを設定します。

    • 名前: cmdAddAppt
    • 標題: Send to Outlook
    • 幅: 2"
  7. コマンド ボタンの OnClidk イベントを次のイベント プロシージャに設定します。

    Private Sub cmdAddAppt_Click()
        On Error GoTo Add_Err
        '最初にレコードを保存して必須フィールドの入力を確認します。
        DoCmd.RunCommand acCmdSaveRecord
        '予定が Outlook に既に追加されている場合は、プロシージャを終了します。
        If Me!AddedToOutlook = True Then
            MsgBox "この予定は既に Microsoft Outlook に追加されています。"
            Exit Sub
        '新しい予定を追加します。
        Else
            Dim objOutlook As Outlook.Application
            Dim objAppt As Outlook.AppointmentItem
            Dim objRecurPattern As Outlook.RecurrencePattern
            Set objOutlook = CreateObject("Outlook.Application")
            Set objAppt = objOutlook.CreateItem(olAppointmentItem)
            With objAppt
                .Start = Me!ApptDate & " " & Me!ApptTime
                .Duration = Me!ApptLength
                .Subject = Me!Appt
                If Not IsNull(Me!ApptNotes) Then .Body = Me!ApptNotes
                If Not IsNull(Me!ApptLocation) Then .Location = Me!ApptLocation
                If Me!ApptReminder Then
                    .ReminderMinutesBeforeStart = Me!ReminderMinutes
                    .ReminderSet = True
                End If
                Set objRecurPattern = .GetRecurrencePattern
    
                With objRecurPattern
                    .RecurrenceType = olRecursWeekly 
                    .Interval = 1
                    '毎週
                    'これらの日付に組み込むか、またはここで使用されているように 
                    'テキスト ボックスの情報を取得することができます。
                    '.PatternStartDate = #12/1/2003#
                    .PatternStartDate = Me!ApptStartDate
                    '.PatternEndDate = #12/30/2003#
                    .PatternEndDate = Me!ApptEndDate
                End With
                .Save
                .Close (olSave)
                End With
                'AppointmentItem オブジェクト変数を解放します。
                Set objAppt = Nothing
        End If
        'オブジェクト変数を解放します。
        Set objOutlook = Nothing
    ....Set objRecurPattern = Nothing
        'AddedToOutlook フラグを設定し、レコードを保存し、
        'メッセージを表示します。
        Me!AddedToOutlook = True
        DoCmd.RunCommand acCmdSaveRecord
        MsgBox "予定が追加されました。"
        Exit Sub
    Add_Err:
        MsgBox "エラー " & Err.Number & vbCrLf & Err.Description
        Exit Sub
    End Sub
    
  8. [ツール] メニューの [参照設定] をクリックします。

  9. [参照設定] ダイアログ ボックスの [Microsoft Outlook 11.0 Object Library] チェック ボックスをオンにします。

  10. [OK] をクリックして [参照設定] ダイアログ ボックスを閉じます。

  11. frmAppointments という名前でフォームを保存し、そのフォームをフォーム ビューで開き、次の情報を追加して新しい予定レコードを作成します。

    • Appt: Budget Meeting
    • ApptStartDate: <明日の日付を入力する>
    • ApptEndDate: <明日の日付を入力する>
    • ApptTime: 2:00 PM
    • ApptLength: 120
    • ApptNotes: To begin discussion of next year's budget.
    • ApptLocation: Conference Room
    • ApptReminder: <チェック ボックスをオンにする>
    • ReminderMinutes: 15

    注: ApptLength は、時間ではなく分単位で入力します。この例では、ApptLength は 2 時間ではなく、120 分に設定します。

    図 3. frmAppointments フォーム

  12. [Send To Outlook] をクリックします。次に、Outlook を起動し、予定表を表示して明日の予定があるかどうかを確認します。

Outlook の仕事またはアラームを追加する

Access から、仕事やアラームをプログラムによって Outlook に追加することができます。ここでは、仕事を作成し、.wav ファイルをアラームとして再生するサンプル コードを提供します。

注: 次のコードで、.ReminderSoundFile プロパティは、ハード ディスク上の有効なサウンド ファイルを参照する必要があります。このサンプルでは、C:\WINNT\Media\Ding.wav ファイルを使用しています。

仕事やアラームを Outlook に追加するには、次の手順を実行します。

  1. 前に作成したサンプル データベース Automation.mdb を開き、追加のモジュールを作成します。

  2. [ツール] メニューの [参照設定] をクリックします。

  3. [参照可能なライブラリ ファイル] ボックスで、[Microsoft Outlook 11.0 Object Library] チェック ボックスをオンにして [OK] をクリックします。

  4. [OK] をクリックして [参照可能なライブラリ ファイル] ボックスを閉じます。

  5. 次の VBA プロシージャを入力するか、または貼り付けます。

    Option Compare Database
    Option Explicit
    Function fncAddOutlookTask()
        Dim OutlookApp As Outlook.Application
        Dim OutlookTask As Outlook.TaskItem
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookTask = OutlookApp.CreateItem(olTaskItem)
        With OutlookTask
            .Subject = "これは個人用の仕事の件名です。"
            .Body = "これは個人用の仕事の本文です。"
            .ReminderSet = True
            'Remind 2 minutes from now.
            .ReminderTime = DateAdd("n", 2, Now)
            'Due 5 minutes from now.
            .DueDate = DateAdd("n", 5, Now) 
            .ReminderPlaySound = True
            'Modify path.
            .ReminderSoundFile = "C:\WINNT\Media\Ding.wav"
            .Save
        End With
    End Function
    
  6. この関数をテストするには、[イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。

    ?fncAddOutlookTask()
    
  7. Outlook を起動して新しい仕事を表示します。

Outlook の連絡先アイテムを作成する

ここでは、オートメーションを使用して Access フォームから Outlook を起動し、新しい連絡先の入力画面を表示する方法を示します。コードを 1 行だけ変更すれば、この例を Outlook の新しい予定、履歴項目、メール メッセージ、メモ、投稿、仕事などに適用できます。

次のサンプルは、コマンド ボタンで Outlook を起動する Access フォームの作成方法を示しています。Outlook を起動した後、オートメーション コードは、Outlook の新しい連絡先の入力画面を開きます。ユーザが連絡先を入力して保存し、連絡先フォームを閉じると、オートメーション コードは Outlook を終了し、Access フォームに戻ります。

Access フォームで Outlook の連絡先アイテムを作成するには、次の手順を実行します。

  1. 前に作成したサンプル データベース Automation.mdb を開きます。

  2. テーブルやクエリをベースにしないフォームを作成し、そのフォームにコマンド ボタンを追加し、次のプロパティを割り当てます。

    • フォーム: (frmOutlook として保存) - 標題: Add to Outlook Form

    • コマンド ボタン -

      名前: cmdOutlook

      標題: Start Outlook\

      OnClick: [Event Procedure]

  3. [表示] メニューの [コード] をクリックして Visual Basic Editor を開きます。

  4. [ツール] メニューの [参照設定] をクリックします。

  5. [参照可能なライブラリ ファイル] ボックスの一覧で、[Microsoft Outlook 11.0 オブジェクト ライブラリ] をクリックします。

  6. [OK] をクリックして [参照設定] ダイアログ ボックスを閉じます。

  7. コマンド ボタンの OnClick イベントに次のプロシージャを入力するか、または貼り付けます。

    Option Compare Database
    Option Explicit
    Public Sub cmdOutlook_Click ()
        On Error GoTo StartError
        Dim objOutlook As Object
        Dim objItem As Object
        'Microsoft Outlook オブジェクトを作成します。
        Set objOutlook = CreateObject("Outlook.Application")
        '新しい連絡先の入力フォームを作成して開きます。
        Set objItem = objOutlook.CreateItem(olContactItem)
        '新しい予定、履歴項目、電子メール メッセージ、メモ、投稿、仕事を作成するには、
        '上の olContactItem を次のいずれかで置き換えます。
        '
        ' 新しい予定 = olAppointmentItem
        ' 履歴項目 = olJournalItem
        ' 電子メール メッセージ = olMailItem
        ' メモ = olNoteItem
        ' 投稿 = olPostItem
        ' 仕事 = olTaskItem
    
        objItem.Display
        'Microsoft Outlook を終了します。
        Set objOutlook = Nothing
    
        Exit Sub
    StartError:
        MsgBox "エラー: " & Err & " " & Error
        Exit Sub
    End Sub
    
  8. [ファイル] メニューの [終了して Microsoft Office Access へ戻る] をクリックし、フォーム ビューに切り替えます。

  9. [Start Outlook] をクリックします。Outlook で新しい連絡先の入力画面が表示されます。

  10. 新しい連絡先の情報を入力し、[保存して閉じる] をクリックします。

  11. Outlook を起動し、ナビゲーション ウィンドウの [連絡先] をクリックします。連絡先の一覧に、入力した連絡先が表示されます。

まとめ

この記事では、オートメーションを使用して Access から Outlook を操作するさまざまなテクニックを示しました。オートメーションは、オブジェクトのプロパティの設定や読み取り、およびメソッドの呼び出しによって、あるプログラムの処理を別のプログラムで制御するメカニズムを提供する強力なテクノロジです。オートメーションを使用すると、アプリケーションのプログラムを組み合わせてさまざまな機能を顧客に提供できます。

その他のリソース

オートメーションを使用した Outlook の操作の詳細については、次のリソースを参照してください。