Vba 在尝试获取用户信息时,如何绕过outlook警报?

Vba 在尝试获取用户信息时,如何绕过outlook警报?,vba,excel,outlook,Vba,Excel,Outlook,我正在尝试从outlook获取用户名、用户电子邮件、用户部门和用户位置,以填充excel用户表单 该代码可以正常工作。我遇到的问题是:我从Excel中得到一个弹出窗口,显示“有程序试图访问Outlook中存储的电子邮件地址信息。如果这是意外情况,请单击“拒绝”并验证您的防病毒软件是否是最新的。” 我发现了一些应该抑制这个弹出窗口的代码,但它似乎不起作用。下面是使用过程调用的过程。我多次将该调用置于“Turn_Auto_Yes_On”过程中,以查看它是否适用于任何调用。已成功执行“打开自动”按钮“

我正在尝试从outlook获取用户名、用户电子邮件、用户部门和用户位置,以填充excel用户表单

该代码可以正常工作。我遇到的问题是:我从Excel中得到一个弹出窗口,显示“有程序试图访问Outlook中存储的电子邮件地址信息。如果这是意外情况,请单击“拒绝”并验证您的防病毒软件是否是最新的。”

我发现了一些应该抑制这个弹出窗口的代码,但它似乎不起作用。下面是使用过程调用的过程。我多次将该调用置于“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

虽然不特定于这个确切的用例,但我已经通过使用解决了类似的outlook“手动确认”和“outlook安全性”问题

Outlook Redemption解决了Outlook安全修补程序plus施加的限制,它提供了许多对象和功能,用于处理未通过Outlook对象模型公开的属性和功能

使用Outlook Redemption,您可以[…]使代码运行不受安全修补程序的影响


我的特定用例是从python自动发送outlook电子邮件。我对用户弹出窗口也有同样的问题,这就解决了问题。

虽然不是针对这个确切的用例,但我通过使用解决了类似的outlook“手动确认”和“outlook安全性”问题

Outlook Redemption解决了Outlook安全修补程序plus施加的限制,它提供了许多对象和功能,用于处理未通过Outlook对象模型公开的属性和功能

使用Outlook Redemption,您可以[…]使代码运行不受安全修补程序的影响


我的特定用例是从python自动发送outlook电子邮件。我对用户弹出窗口也有同样的问题,这就成功了。

也许代码最终会起作用,也许不会。但有一件事是肯定的:这是一个解决办法,而且是一个很糟糕的办法。它的作用是在调用代码时为您单击“确认”/“是”按钮,因此我认为您必须在每次Outlook打开安全提示时调用该例程。更好的解决方案是使用vbMAPI或Redemption,它们以正确的方式解决此问题。我猜这是在宏安全设置中。请查看部分““在信任中心查看安全设置”在这个@CarlColjin中是的,这很麻烦,我知道。我会查看vbMAPI或redemption。谢谢你的建议。也许代码最终会起作用,也许不会。但有一点是肯定的:这是一个解决办法,而且很麻烦。它所做的是单击“确认”/“是”当您调用代码时,按钮,因此我认为您必须在每次Outlook打开安全提示时调用例程。更好的解决方案是使用vbMAPI或Redemption,这是正确的解决方法。我猜这是在宏安全设置中。请查看@CarlColjin中的“查看信任中心中的安全设置”部分是的,这非常糟糕,我知道这一点。我将研究vbMAPI或redemption。谢谢你的建议。