ExcelでVBAを使用してOutlook.ExchangeUser
オブジェクトから連絡先情報を取得しようとしています。しかし、これまでのところ、各ユーザーのプライマリSMTPアドレスを取得することしかできませんでしたが、可能であれば、各アカウントにすべての電子メールアドレスをリンクさせたいと考えています。私たちは最近ブランド変更して新しいドメインを取得したので、新しい電子メールアドレスが私たちの主要な電子メールアドレスになりました - しかし、私はまたこれと一緒に古いアドレスのすべてを抽出したいと思います。電子メールアドレス)。VBAを使用してプライマリSMTPアドレス以外のMicrosoft Exchange電子メールアドレスを取得する方法
同僚は私にで動作するように次のコードを与えた:
Sub GetAllGALMembers()
Dim i As Long, j As Long, lastRow As Long
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olGAL As Outlook.AddressList
Dim olEntry As Outlook.AddressEntries
Dim olMember As Outlook.AddressEntry
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olGAL = olNS.GetGlobalAddressList()
'Set Up Excel
Dim wb As Workbook, ws As Worksheet
'set the workbook:
Set wb = ThisWorkbook
'set the worksheet where you want to post Outlook data:
Set ws = wb.Sheets("Sheet1")
'clear all current entries
Cells.Select
Selection.ClearContents
'set and format headings in the worksheet:
ws.Cells(1, 1).Value = "First Name"
ws.Cells(1, 2).Value = "Last Name"
ws.Cells(1, 3).Value = "Email"
ws.Cells(1, 4).Value = "Title"
ws.Cells(1, 5).Value = "Department"
Application.ScreenUpdating = False
With ws.Range("A1:E1")
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
Set olEntry = olGAL.AddressEntries
On Error Resume Next
'first row of entries
j = 2
' loop through dist list and extract members
For i = 1 To olEntry.Count
Set olMember = olEntry.Item(i)
If olMember.AddressEntryUserType = olExchangeUserAddressEntry Then
'add to worksheet
ws.Cells(j, 1).Value = olMember.GetExchangeUser.LastName
ws.Cells(j, 2).Value = olMember.GetExchangeUser.FirstName
ws.Cells(j, 3).Value = olMember.GetExchangeUser.PrimarySmtpAddress
ws.Cells(j, 4).Value = olMember.GetExchangeUser.JobTitle
ws.Cells(j, 5).Value = olMember.GetExchangeUser.Department
j = j + 1
End If
Next i
Application.ScreenUpdating = True
'determine last data row, basis column B (contains Last Name):
lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row
'format worksheet data area:
ws.Range("A2:E" & lastRow).Sort Key1:=ws.Range("B2"), Order1:=xlAscending
ws.Range("A2:E" & lastRow).HorizontalAlignment = xlLeft
ws.Columns("A:E").EntireColumn.AutoFit
wb.Save
'quit the Outlook application:
applOutlook.Quit
'clear the variables:
Set olApp = Nothing
Set olNS = Nothing
Set olGAL = Nothing
End Sub
これは本当によく働いている、しかし私は得ることができるすべてが.GetExchangeUser.PrimarySmtpAddress
プロパティを介して、各ユーザーのための単一の電子メールアドレスです。
私はOutlook Object Model Reference for the ExchangeUser Objectを確認しましたが、これはExchangeUser.PrimarySmtpAddress
プロパティのみを含み、その他の関連プロパティは含まれていません。
ユーザーに関連付けられたすべてのメールアドレスを取得する方法はありますか?それとも、プライマリアドレスだけを取得することに限定されていますか?
OPがホストされた(Office 365)メールボックスに接続されている場合、またはオンサイトサーバーの場合、およびExchange管理シェルを使用してアクセスする権限がないユーザー(すべてのケースの99.9%で発生します) )。 –
私はOPがEMSを利用するアクセス権を持っていると確信しました。私は通常のユーザーがおそらくVBAコードを編集していないと感じました。限り、O365に行く、私は確かにそれを行うPowershellの方法があります。私はあまりそれを見ていないが、私はそれにお金を置くだろう。 – Joseph