【发布时间】:2015-10-12 14:08:45
【问题描述】:
我有一个可以自动化 Outlook 的模块,但如果 Outlook 不可用,则应该跳过它。
仅检查是否安装了 Outlook 是不够的,因为如果有全新的 Office 安装,启动 Outlook 将启动配置向导。从我的 POV 来看,Outlook 不可用于自动化,因此即使可能已安装该模块,也不应使用该模块。
根据我的测试和question 中的建议,我可以成功地判断 Outlook 是否尚未配置,但存在失败的边缘情况。这是当有一个对话框要求选择配置文件时。在这种情况下,检查返回 true,但由于仍需要其他配置(例如选择配置文件),Outlook 实际上无法用于自动化目的。是否也可以捕获这种极端情况?
要重现“选择配置文件”问题,请转到控制面板 -> 邮件。在对话框中,有一个“启动 Microsoft Outlook 时,使用此配置文件”选项 - 选择“提示使用的配置文件”。然后,当您启动 Outlook 时,系统会要求您选择一个配置文件。就是下面的代码会失败的情况。
到目前为止,这是我几乎可以工作的代码......
Public Function DetectOutlookProfile() As Boolean
Dim objOutlook As Object
Dim objReg As Object
Dim varSplit As Variant
Dim lngMajor As Long
Dim strPath As String
Dim varSubKeys As Variant
Dim varSubKey As Variant
Const HKEY_CURRENT_USER As Long = &H80000001
On Error GoTo ErrHandler
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
'Get an instance of Outlook so that we can determine the version
'being currently used by the current user.
Set objOutlook = CreateObject("Outlook.Application")
varSplit = Split(objOutlook.Version, ".")
lngMajor = varSplit(0)
If lngMajor <= 14 Then
'Outlook profile isn't version specific for Outlook 97-2010
strPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
Else
'Outlook profile is version specific for Outlook 2013+
strPath = "Software\Microsoft\Office\" & lngMajor & ".0\Outlook\Profiles"
End If
objReg.EnumKey HKEY_CURRENT_USER, strPath, varSubKeys
For Each varSubKey In varSubKeys
DetectOutlookProfile = True
Exit For
Next
ExitProc:
On Error Resume Next
Exit Function
ErrHandler:
'Silently fail and return false
Select Case Err.Number
Case Else
DetectOutlookProfile = False
Debug.Print Err.Number & " (" & Err.Description & ")"
End Select
Resume ExitProc
Resume
End Function
【问题讨论】:
-
我对此表示怀疑 - 我对登录任何特定的个人资料不感兴趣。只有在选择了配置文件并且完全配置了 Outlook 时,才应运行此操作。我无意自动配置 Outlook。如果它不存在,则不应该执行该模块。所以,
LogOn方法在这里并没有真正帮助我。 -
好的,所以您不想使用 Outlook 默认配置文件执行模块?
-
嗯,实际上,我愿意。我实际上并不关心它是 哪个 配置文件,只要 Outlook 已经选择了它。我只是不打算对 Outlook 进行任何配置。但是当有一个选择配置文件对话框时,IMPOV,用户还没有完成配置,因此在他们完成配置 Outlook 之前不应该使用该模块,他们必须自己做,而不是通过我的代码。
-
用户尚未完成配置 -- 或者,他们故意将 Outlook 配置为 提示 他们在每个会话中使用哪个配置文件. :)
标签: vba outlook office-automation