2015-07-01 15 views
1

我是使用VBA和宏的新手,想知道是否有方法在Excel中添加「檢查姓名」功能(類似於Outlook中的功能)。我正在處理的部分表單需要我輸入員工姓名,我希望能夠點擊一個按鈕以確保我的拼寫正確,並且他們在我們的電子郵件系統中。任何幫助或指針在正確的方向將不勝感激!在Excel中創建「檢查姓名」按鈕

+0

根據有多少名字,你可以在Excel中使用一個列表(隱藏在您的個人工作簿中?),並使用For循環和IF標誌,如果不在列表中,或者如果不是很多,則可以在VBA中編寫CASE語句。然後,你標誌,如果他們不在'覈准'名單 – Trum

+0

你能不能設計一個前瞻形式查詢集中存儲的Excel數據?這樣你就可以擁有所有的Outlook郵件功能,而且我相信這是更實際的,因爲查詢Outlook名稱需要訪問Outlook的授權(?) – Krishna

+0

您需要在哪裏查看名稱?在Outlook通訊簿或AD? –

回答

1

一對夫婦的答案在這裏:

編輯:創建Excel 2010中(不知道是否會在2003年的工作)。

如果名稱可以在Outlook中解析,則第一個將返回TRUE或FALSE。

'---------------------------------------------------------------------------------- 
' Procedure : ResolveDisplayNameToSMTP 
' Author : Sue Mosher - updated by D.Bartrup-Cook to work in Excel late binding. 
'----------------------------------------------------------------------------------- 
Public Function ResolveDisplayName(sFromName) As Boolean 

    Dim OLApp As Object 'Outlook.Application 
    Dim oRecip As Object 'Outlook.Recipient 
    Dim oEU As Object 'Outlook.ExchangeUser 
    Dim oEDL As Object 'Outlook.ExchangeDistributionList 

    Set OLApp = CreateObject("Outlook.Application") 
    Set oRecip = OLApp.Session.CreateRecipient(sFromName) 
    oRecip.Resolve 
    If oRecip.Resolved Then 
     ResolveDisplayName = True 
    Else 
     ResolveDisplayName = False 
    End If 

End Function 

第二要解決的名稱,並返回的電子郵件地址:

'---------------------------------------------------------------------------------- 
' Procedure : ResolveDisplayNameToSMTP 
' Author : Sue Mosher - updated by D.Bartrup-Cook to work in Excel late binding. 
'----------------------------------------------------------------------------------- 
Public Function ResolveDisplayNameToSMTP(sFromName) As String 
    Dim OLApp As Object 'Outlook.Application 
    Dim oRecip As Object 'Outlook.Recipient 
    Dim oEU As Object 'Outlook.ExchangeUser 
    Dim oEDL As Object 'Outlook.ExchangeDistributionList 

    Set OLApp = CreateObject("Outlook.Application") 
    Set oRecip = OLApp.Session.CreateRecipient(sFromName) 
    oRecip.Resolve 
    If oRecip.Resolved Then 
     Select Case oRecip.AddressEntry.AddressEntryUserType 
      Case 0, 5 'olExchangeUserAddressEntry & olExchangeRemoteUserAddressEntry 
       Set oEU = oRecip.AddressEntry.GetExchangeUser 
       If Not (oEU Is Nothing) Then 
        ResolveDisplayNameToSMTP = oEU.PrimarySmtpAddress 
       End If 
      Case 10, 30 'olOutlookContactAddressEntry & 'olSmtpAddressEntry 
        ResolveDisplayNameToSMTP = oRecip.AddressEntry.Address 
     End Select 
    End If 
End Function 

這裏展示瞭如何使用這兩種功能的測試過程:

Sub Test() 

    MsgBox ResolveDisplayName("Marty Moesta") 
    MsgBox ResolveDisplayNameToSMTP("Marty Moesta") 

End Sub 
+0

此解決方案非常有幫助,謝謝! –

+1

請記住Namespace.CreateRecipient/Recipient.Resolve不會顯示不明確的名稱對話框。 –

+0

我從來沒有考慮過@德米特里 - 我將不得不爲此努力。找到這個鏈接可能指向我的方向 - https://msdn.microsoft.com/en-us/library/bb646055(v=office.12).aspx –