2012-06-29 33 views
26

Tôi đang viết macro tạo vé trên cơ sở dữ liệu dựa trên các cảnh báo nhận được từ máy chủ Nagios dưới dạng email. Tuy nhiên, tôi không thể để macro chạy trong một vòng lặp vô hạn trong khi kiểm tra thư vì nó chỉ là tài nguyên quá nặng và làm cho máy tính để bàn của tôi bị treo. Tôi cần tìm cách kích hoạt macro chỉ khi nhận được thư mới.Làm cách nào để kích hoạt macro chạy sau khi nhận được thư mới trong Outlook?

Tôi đã tìm kiếm thứ gì đó dọc theo dòng sự kiện NewMail trên trang web MSDN, nhưng tôi không thể tìm thấy bất kỳ điều gì mạch lạc. Bất cứ ai có thể chỉ cho tôi một chút mẫu mã để hiển thị như thế nào để kích hoạt các macro từ các sự kiện mail mới?

Trả lời

44

Mã này sẽ thêm trình xử lý sự kiện vào Hộp thư đến cục bộ mặc định, sau đó thực hiện một số hành động đối với email đến. Bạn cần thêm hành động đó vào mã bên dưới.

Private WithEvents Items As Outlook.Items 
Private Sub Application_Startup() 
    Dim olApp As Outlook.Application 
    Dim objNS As Outlook.NameSpace 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    ' default local Inbox 
    Set Items = objNS.GetDefaultFolder(olFolderInbox).Items 
End Sub 
Private Sub Items_ItemAdd(ByVal item As Object) 

    On Error Goto ErrorHandler 
    Dim Msg As Outlook.MailItem 
    If TypeName(item) = "MailItem" Then 
    Set Msg = item 
    ' ****************** 
    ' do something here 
    ' ****************** 
    End If 
ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 

Sau khi dán mã trong mô-đun ThisOutlookSession, bạn phải khởi động lại Outlook.

+0

Không hoạt động với tôi trong Outlook Professional Plus 2010 – Superdooperhero

+1

Các macro xấu của tôi bị vô hiệu hóa. Bit ngớ ngẩn rằng không có mức độ khác nhau của bảo mật vĩ mô cho kịch bản này mặc dù. – Superdooperhero

+6

@JimmyPena Item_ItemAdd được gọi ở đâu? –

6

Hãy thử một cái gì đó như thế này bên ThisOutlookSession:

Private Sub Application_NewMail() 
    Call Your_main_macro 
End Sub 

triển vọng VBA của tôi chỉ phát sinh khi tôi nhận được một email và có sự kiện ứng dụng mở.

Chỉnh sửa: Tôi vừa thử nghiệm hộp thư thế giới hello và nó chạy sau khi được gọi trong sự kiện application_newmail khi nhận được email.

+0

Tôi sợ nó có vẻ không hoạt động. Tôi đã thử chạy macro và sau đó gửi cho mình một thư, nhưng tôi không thể có được vĩ mô của tôi để chạy cho đến khi tôi reinitialized toàn bộ điều. Bạn nghĩ vấn đề có thể là gì? –

+0

Bạn đã có mã trong câu trả lời của tôi ở đâu? Tôi đặt nó trong 'ThisOutlookSession' và để nó lại. Không cần chạy macro nó sẽ kích hoạt khi nhận được thư. –

+0

Tôi đã dán nó trong ThisOutlookSession, nhưng nó cho tôi rất nhiều vấn đề trong khi chạy. Tôi thậm chí không thể chỉ vào gốc của vấn đề, tiểu của tôi chỉ làm những điều hoàn toàn ngẫu nhiên ... –

Các vấn đề liên quan