2016-08-26 24 views
2

アクセスシステムとOutlookの統合を完了しようとしています。電子メールが受信トレイに入った後にOutlookスクリプトをトリガーする

電子メールが特定の受信トレイに入ったときに、Outlookがスクリプトを起動する必要があるということが、システムの基本です。このスクリプトは、Access DBを開き、それ自身の機能を実行してその受信トレイを通過し、電子メール内の添付ファイルをデータベースにインポートします。

現在、両方のスクリプトは、Outlookがアクセスとアクセスを呼び出している限り、「仕事」です。問題は、Outlookがスクリプトを実行するときです。メッセージがメールボックスに実際に入る前です。アクセスアプリケーションが起動し、受信ボックスを空としてスキャンし、メッセージが実際に受信ボックスに入る直前に閉じます。

スクリプトで「一時停止」ループを追加しようとしましたが、アクセスアプリを開く前に電子メールが読み込まれるまで待つようにしましたが、「一時停止」の期間電子メールを読めるようにします。ここで

は、Outlookで私のスクリプトです。この時点で

Sub ExecuteDealRequest(item As Outlook.MailItem) 
    Dim currenttime As Date 

    currenttime = Now 
    Do Until currenttime + TimeValue("00:00:30") <= Now 
    Loop 

    Dim AccessApp As Access.Application 
    Set AccessApp = CreateObject("Access.Application") 
    AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False 
    AccessApp.Visible = True 
    AccessApp.DoCmd.RunMacro "Macro1" 
    Set AccessApp = Nothing 
End Sub 

:私は、スクリプトを起動するためにOutlookのルールを使用しています:

Apply this rule after the message arrives 
With Pricing Request in the Subject 
and on this computer only 
Move it to the Pricing Requests folder 
and run Project.ExecuteDealRequest 
and stop processing more rules 

これがあるとしてすべてのヘルプは、素晴らしいことです私が働く必要がある最後の部分

+0

ない正確な複製で、それをこのway-コードを試してみることです - このリンクは、使用する方法を示していますOutlookの「イベントあり」コード:http://stackoverflow.com/questions/37355580/download-and-save-attachment-from-email-automatically-to-excel/37410783#37410783電子メールがあなたはそれを処理するためにいくつかのコードを起動することができます。 –

+0

私は現在のプロジェクトにコードを追加しようとしましたが、グローバル変数とプライベートWithEvents(私はまだVBに新しいです)の外で使用されている問題があります。 「オブジェクトモジュールでのみ有効」と言われています – mattlore

答えて

2

待つたぶんThisOutlookSession

Private WithEvents Items As Outlook.Items 

Private Sub Application_Startup() 
    Dim olNs As Outlook.NameSpace 
    Dim Inbox As Outlook.MAPIFolder 

    Set olNs = Application.GetNamespace("MAPI") 
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox) 
    Set Items = Inbox.Items 
End Sub 

Private Sub Items_ItemAdd(ByVal Item As Object) 
    If TypeOf item Is Outlook.MailItem Then 
     ExecuteDealRequest Item 
    End If 
End Sub 

' ---- Your Code 
Sub ExecuteDealRequest(Item As Outlook.MailItem) 
    Dim currenttime As Date 
    Dim AccessApp As Access.Application 
    Set AccessApp = CreateObject("Access.Application") 
    AccessApp.OpenCurrentDatabase ("C:\commHU\Comm HU Request.accdb"), False 
    AccessApp.Visible = True 
    AccessApp.DoCmd.RunMacro "Macro1" 
    Set AccessApp = Nothing 
End Sub 
+1

ありがとうございました。おかげさまで、Darren Bartrup-Cookのおかげで、私はこのようにすることができました。同じ動作がまだ続いていました(アクセスDBのマクロは、メッセージが受信トレイで更新される直前に起動します)。だから私はコードとロジックをいくつか根本的に変更しました。アウトルックコードは添付ファイルをフォルダに保存し、アクセスDBを呼び出して処理します。こうすることで、アクセスDBはメールを受信するまで待っていない – mattlore

0

これを試すことができます

コードは、ルールを必要としない新しい電子メール

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) 
    ThisOutlookSession.GetNamespace("MAPI").GetItemFromID(EntryIDCollection).Subject 
    ' Check for the email subject/any property 
    'then call your method 
End Sub 
+0

明確にするために:私はまだスクリプトフォームをルールと呼んでいますが、メッセージがボックスにドロップされるまでスクリプトを保持していますか? – mattlore

+0

サーバーベースのルールとクライアントのみのルール。 https://support.office.com/en-us/article/Manage-email-messages-by-using-rules-c24f5dea-9465-4df4-ad17-a50704d66c59 – Barney

関連する問題