[英]Outlook 2010 GAL with Excel VBA
I have the following code to get contacts out of Outlook from Excel: 我有以下代码可以从Excel中将联系人移出Outlook:
Public Sub GetGAL()
Dim olApp As Outlook.Application
Dim olNs As Outlook.Namespace
Dim olFldr As Outlook.Items
Dim olContact As Outlook.ContactItem
Set olApp = CreateObject("Outlook.Application.14")
Set olNs = olApp.GetNamespace("MAPI")
Set olFldr = olNs.GetDefaultFolder(olFolderContacts).Items
For Each olContact In olFldr
Debug.Print olContact.FullName
Next olContact
End
End Sub
It is failing on this line saying there is a type mismatch: 这行失败,表示类型不匹配:
For Each olContact In olFldr
Does anyone know why this is? 有人知道为什么是这样吗?
Also, how do I access the GAL as opposed to just my own contacts? 另外,我如何访问GAL,而不仅仅是我自己的联系人?
Thanks for any help. 谢谢你的帮助。
Edit: Here's my new code to access the addressEntry and ExchangeUser, however, not the country field yet: 编辑:这是我的新代码,用于访问addressEntry和ExchangeUser,但是,国家/地区字段尚未输入:
Option Explicit
Public Sub GetGAL()
Application.ScreenUpdating = False
Dim olApp As Outlook.Application
Dim olNs As Outlook.Namespace
Dim olGAL As Outlook.addressEntries
Dim olAddressEntry As Outlook.addressEntry
Dim olUser As Outlook.ExchangeUser
Dim i As Long
'Dim sTemp As String
'Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets(1)
Set olApp = CreateObject("Outlook.Application.14")
Set olNs = olApp.GetNamespace("MAPI")
Set olGAL = olNs.addressLists("Global Address List").addressEntries
'On Error Resume Next
For i = 1 To olGAL.Count
Set olAddressEntry = olGAL.Item(i)
If olAddressEntry.DisplayType = olRemoteUser Then
Set olUser = olAddressEntry.GetExchangeUser
'Debug.Print olUser.Name & ";" & olUser.StateOrProvince
'Debug.Print sTemp
'ws.Cells(i, 1) = olUser.Name
'ws.Cells(i, 2) = olUser.StateOrProvince
End If
Next i
End
Application.ScreenUpdating = True
End Sub
Give this a try. 试试看。 Although if you have tons and tons of entries in your GAL, it will take awhile to complete, and you may have to increase the 65000. 尽管如果您的GAL中有大量条目,则可能需要一段时间才能完成,并且可能需要增加65000。
Sub tgr()
Dim appOL As Object
Dim oGAL As Object
Dim oContact As Object
Dim oUser As Object
Dim arrUsers(1 To 65000, 1 To 2) As String
Dim UserIndex As Long
Dim i As Long
Set appOL = CreateObject("Outlook.Application")
Set oGAL = appOL.GetNameSpace("MAPI").AddressLists("Global Address List").AddressEntries
For i = 1 To oGAL.Count
Set oContact = oGAL.Item(i)
If oContact.AddressEntryUserType = 0 Then
Set oUser = oContact.GetExchangeUser
If Len(oUser.lastname) > 0 Then
UserIndex = UserIndex + 1
arrUsers(UserIndex, 1) = oUser.Name
arrUsers(UserIndex, 2) = oUser.PrimarySMTPAddress
End If
End If
Next i
appOL.Quit
If UserIndex > 0 Then
Range("A2").Resize(UserIndex, UBound(arrUsers, 2)).Value = arrUsers
End If
Set appOL = Nothing
Set oGAL = Nothing
Set oContact = Nothing
Set oUser = Nothing
Erase arrUsers
End Sub
Your code assumes that you can only have ContactItem objects in the folder. 您的代码假定文件夹中只能有ContactItem对象。 It will break if you encounter an object of type DistListItem. 如果遇到类型为DistListItem的对象,它将断开。
Declare the item variable as a generic Object, then check the Type property or use TypeName function to figure out the exact item type. 将项目变量声明为通用对象,然后检查Type属性或使用TypeName函数找出确切的项目类型。
EDIT: PR_BUSINESS_ADDRESS_COUNTRY DASL name is 编辑:PR_BUSINESS_ADDRESS_COUNTRY DASL名称是
http://schemas.microsoft.com/mapi/proptag/0x3A26001F
For address entries you can see the DALS property names in OutlookSpy . 对于地址条目,您可以在OutlookSpy中看到DALS属性名称。 For example, you can click IMAPISession button, click QueryIdentity, select a property, look at the DASL edit box. 例如,您可以单击IMAPISession按钮,单击QueryIdentity,选择一个属性,然后查看DASL编辑框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.