-1

我有一个非常简单的小应用程序,它可以帮助我节省从 alt 选项卡从 excel 到 Outlook 的时间。我想创建一个小型用户表单,其中包含一个用于交换用户别名的文本框并返回交换用户的全名。现在我遇到的问题是 msdn 中的指南对于用户表单来说有点模糊:https ://msdn.microsoft.com/en-us/library/office/ff869721.aspx我收到了一些错误消息,有些通过激活一些参考得到修复。并且代码相当复杂。

所以基本上我有 2 个文本框和一个按钮。textbox1 将接受别名, textbox2 将在单击按钮后返回用户名。

有几个示例,但其中大多数会导致将 GAL 转储到我不需要的 excel 文件中。

先谢谢了

4

1 回答 1

0

这会给你你想要的。

Private Function GetFullName(inAlias As String) As String
    Dim olApp As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim olAdd As Outlook.AddressEntries
    Dim olMem As Outlook.AddressEntry
    Dim olLst As Outlook.AddressList
    Dim olAlias As String

    On Error Resume Next
    Set olApp = New Outlook.Application
    On Error GoTo 0

    If olApp Is Nothing Then
        GetFullName = "Source not available"
        Exit Function
    End If

    Set olNS = olApp.GetNamespace("MAPI")
    Set olLst = olNS.GetGlobalAddressList
    Set olAdd = olLst.AddressEntries

    For Each olMem In olAdd
        On Error Resume Next
        olAlias = olMem.GetExchangeUser.Alias
        On Error GoTo 0
        If olAlias = inAlias Then
            GetFullName = olMem.GetExchangeUser.Name
            Exit For
        Else
            GetFullName = "Invalid Alias"
        End If
    Next
    Set olApp = Nothing: Set olNS = Nothing: Set olAdd = Nothing
End Function

缺点是如果您的 GAL 很大,这可能需要一段时间。
我将检查是否可以先将列表转储到数组中,然后从那里进行操作。
或者,如果有另一种方法可以使用其他方法通过别名获取名称。
但是现在,请先尝试从中学习。

这是一个函数,所以要将它放到您的文本框中,您可以简单地:

TextBox2 = GetFullname(TextBox1)

注意:
我故意声明了所有对象,您需要知道您正在处理的对象类型。我还使用了On Error Resume Next,因为AddressEntry没有Alias并且会给出错误。这是我现在能想到的最简单的解决方法。

要求:
您需要参考Microsoft Outlook xx.x Object Library.
xx.x取决于您机器中安装的 Outlook 版本。

于 2016-06-29T06:11:13.517 回答