2013-04-23 30 views
5

Tôi đang cố gắng gửi email bằng macro trong excel.Làm cách nào để ngăn chặn cảnh báo Outlook trong khi gửi thư bằng macro trong excel

Nhưng khi tôi chạy mã này mail client của tôi tức là MS Outlook cho thấy một cửa sổ pop up cảnh báo tương tự như
Someone is tying to send mail on behalf of you. select yes or no

Có cách nào sử dụng để ngăn chặn cảnh báo rằng nên email phải được gửi mà không cần bất kỳ vấn đề?

+2

Bạn có thể vui lòng đăng mã mà bạn đang sử dụng không? –

+2

Xem http://www.rondebruin.nl/win/s1/security.htm – brettdj

Trả lời

3

Cách tốt nhất tôi biết là tạo một mục ứng dụng xem, tạo tin nhắn, hiển thị tin nhắn và sử dụng các phím gửi để gửi tin nhắn (tương đương với cách gõ alt s).

Hạn chế là phương thức sendkeys có thể hơi lỗi. Để làm cho nó mạnh mẽ hơn, tôi nhận được thanh tra cho mục thư tức là cửa sổ đang ở và kích hoạt nó ngay lập tức trước cuộc gọi đến các phím gửi. Mã này được hiển thị dưới đây:

Dim olApp As outlook.Application 
Dim objNS As Outlook.Namespace 
Dim objMail As Outlook.MailItem 
Dim objSentItems As Outlook.MAPIFolder 
Dim myInspector As Outlook.Inspector 

'Check whether outlook is open, if it is use get object, if not use create object 
On Error Resume Next 
Set olApp = GetObject(, "Outlook.Application") 
On Error GoTo 0 
If olApp Is Nothing Then 
    Set olApp = CreateObject("Outlook.Application") 
End If 

Set objNS = olApp.GetNamespace("MAPI") 
objNS.Logon 

'Prepare the mail object  
Set objMail = olApp.CreateItem(olMailItem) 

With objMail 
.To = <insert recipients name as string> 
.Subject = <insert subject as string> 
.Body = <insert message as string> 
.Display 
End With 

'Give outlook some time to display the message  
Application.Wait (Now + TimeValue("0:00:05")) 

'Get a reference the inspector obj (the window the mail item is displayed in) 
Set myInspector = objMail.GetInspector 

'Activate the window that the mail item is in and use sendkeys to send the message 
myInspector.Activate 
SendKeys "%s", True 

Tôi thường sau đó có mã để kiểm tra xem số lượng các mục trong thư mục gửi đã tăng lên và nếu không tôi nhận được đơn xin chờ một lần nữa và lặp lại 2 dòng cuối cùng của mã và kiểm tra lại rằng số lượng thư trong thư mục đã gửi đã tăng lên. Mã này tối đa 5 lần. Sau lần thứ 5 một hộp thông báo xuất hiện cảnh báo rằng thư có thể chưa được gửi đi.

Tôi chưa bao giờ thấy phương pháp này thất bại trong việc gửi tin nhắn từ excel mặc dù tôi đã từng thấy thông báo cảnh báo khi hệ thống của chúng tôi đặc biệt chậm, khi điều tra thì tin nhắn đã được gửi đi.

+0

Liệu 'objMail.GetInspector' vẫn tồn tại? Lỗi trên dòng 'Mục đã được di chuyển hoặc bị xóa.' – aaa

0

Tôi đã tìm thấy mã bên dưới một nơi nào đó trên internet cách đây vài năm. Nó tự động trả lời 'Có' cho bạn.

Function TurnAutoYesOn() 
Dim wnd As Long 
Dim uClickYes As Long 
Dim Res As Long 
uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME") 
wnd = FindWindow("EXCLICKYES_WND", 0&) 
Res = SendMessage(wnd, uClickYes, 1, 0) 

End Function 

Function TurnOffAutoYes() 
Dim wnd As Long 
Dim uClickYes As Long 
Dim Res As Long 
uClickYes = RegisterWindowMessage("CLICKYES_SUSPEND_RESUME") 
wnd = FindWindow("EXCLICKYES_WND", 0&) 
Res = SendMessage(wnd, uClickYes, 0, 0) 
End Function 


Function fEmailTest() 

TurnAutoYesOn '*** Add this before your email has been sent 



Set appOutLook = CreateObject("Outlook.Application") 
Set MailOutLook = appOutLook.CreateItem(olMailItem) 
With MailOutLook 
    .To = " <[email protected]>; <[email protected]" 
    .Subject = "Your Subject Here" 
    .HTMLBody = "Your message body here" 
    .Send 
End With 

TurnOffAutoYes '*** Add this after your email has been sent 


End Function 
+0

nó nói RegisterWindowMessage không được xác định. Bạn có một phần của mã quản lý điều này? Cảm ơn. – dsauce

0

cửa sổ bật lên để bắt đầu vì macro không được ký bởi Nhà xuất bản đáng tin cậy. Danh sách này trong cài đặt Outlook của bạn. Bạn phải ký macro và nhập người ký vào danh sách nhà xuất bản đáng tin cậy của bạn. Hoặc cho phép macro chưa ký toàn cầu.

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