2016-02-29 31 views
0

我想從Outlook中獲取用戶名,用戶電子郵件,用戶部門和用戶位置以填充Excel用戶表單。如何在嘗試獲取用戶信息時繞過Outlook警報?

該代碼沒有問題。我遇到的問題是這樣的:我從Excel的彈出窗口中看到「程序試圖訪問存儲在Outlook中的電子郵件地址信息,如果這是意外的,請單擊拒絕並確認您的防病毒軟件是最新的。」

我發現一些代碼是應該壓制這個彈出窗口,但它似乎沒有工作。以下是使用該過程調用的過程。我已經多次打電話給「Turn_Auto_Yes_On」程序以查看它是否適用於任何呼叫。 Turn_Auto_yes_On被成功執行,但似乎沒有效果,因爲我仍然在執行後得到Outlook消息。

我被困在這裏,並去了多個網站的答案,我沒有找到。任何幫助將非常感激。

Function fill_Outlook_Info() As Boolean 


Application.DisplayAlerts = False 
    Call Turn_Auto_Yes_On 
    Set OL = CreateObject("outlook.application") 

    Call Turn_Auto_Yes_On 
    Set olAllUsers = OL.Session.AddressLists.Item("All Users").AddressEntries 

    Call Turn_Auto_Yes_On 
    s_OutlookUser = OL.Session.CurrentUser.Name 

    Call Turn_Auto_Yes_On 
    Set oentry = olAllUsers.Item(s_OutlookUser) 

    Call Turn_Auto_Yes_On 
    Set oExchUser = oentry.GetExchangeUser() 
    v_department = oExchUser.DEPARTMENT 
    v_Email = oExchUser.PrimarySmtpAddress 
    s_OutlookCity = oExchUser.city 
End Function 

,這是應該繞過Outlook的警報

Option Explicit 

'these declarations are to access the RegisterWindowsMessage which is used to send "yes" to outlook 

Public OL, olAllUsers, oExchUser, oentry As Object 
Public v_Email As Variant 'v_department 
'Public s_OutlookUser As String 
Public Declare Function RegisterWindowMessage Lib "User32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long 
Public Declare Function FindWindow Lib "User32" _ 
Alias "FindWindowA" (ByVal lpClassName As Any, _ 
ByVal lpWindowName As Any) As Long 
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, _ 
ByVal wMsg As Long, ByVal wParam As Long, _ 
lParam As Any) As Long 



Public Sub Turn_Auto_Yes_On() 

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 Sub 

Public Sub Turn_Off_Auto_Yes() 
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 Sub 
+2

也許代碼最終的作品,也許不是。但有一點是肯定的:這是一個解決方法,而且是一個解決方案。當你調用代碼時,它會爲你點擊「確認」/「是」按鈕,所以我想你必須在每次Outlook打開安全提示時調用例程,更好的解決方案是使用例如vbMAPI或Redemption,這正好解決了這個問題 –

+0

我猜這是在宏安全設置中,請查看[MS Docs](https://support.office.com/zh-cn/)中的「查看Trust Center中的安全設置」部分。 -us /條/ I-得到的警告 - 約-A-程序訪問的電子郵件地址信息 - 或 - 發送的電子郵件上,我-代表-df007135-c632-4ae4-8577-dd4ba26750a2 ) –

+0

@CarlColjin是的,它非常快樂,我知道它,我會研究vbMAPI或redemption,謝謝你的建議。 –

回答

2

雖然沒有具體到這個確切的使用情況下,我已經得到了各地類似的展望「手動確認」和「Outlook安全」的代碼問題通過使用Outlook Redemption

Outlook Redemption可以解決由Outlook安全補丁程序施加的限制,並提供許多對象和函數以處理未通過Outlook對象模型公開的屬性和功能。

有了Outlook Redemption,你可以讓你的代碼不受安全補丁的影響。

我的特殊用例是自動從python發送outlook電子郵件。我對用戶彈出窗口有同樣的問題,這就是訣竅。