Finally solved.
Thanks for the links, which led me to a solution which I have tweaked and have copied below in case anyone else needs to do this. Everything is simple . . . if you know how !
It was far easier to write the code in Access than in Outlook. Below is the Access Module which does the importing - I hope it is self-explanatory:
Two other things are needed:
- You need to know the required field names in Outlook Contacts - I found them here: https://msdn.microsoft.com/en-us/vba...ent-properties
- In the VBA window you need to add a reference: Tools . . . References . . . Microsoft Outlook <version number> Object Library
Sub ImportContactsFromOutlook()
'To import selected fields from Contacts in Outlook and pllace in Access table "Contacts"
'Set up DAO objects (uses existing "Contacts" table)
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Contacts")
' Set up Outlook objects.
Dim ol As New Outlook.Application
Dim olns As Outlook.Namespace
Dim cf As Outlook.MAPIFolder
Dim c As Outlook.ContactItem
Dim objItems As Outlook.Items
Dim Prop As Outlook.UserProperty
'Clear the existing Contacts table 'Otherwise the imported records are appended to the existing records
strTableName = "Contacts" 'Name the Table to be cleared
DoCmd.SetWarnings False 'Stop warnings about deletions
DoCmd.RunSQL "DELETE *.* FROM " & strTableName 'Do the deletion
DoCmd.SetWarnings True 'Turn warnings on again
DoCmd.Close acTable, "Contacts", acSaveYes 'Close the cleared Table
'Import the required fields froom Outlook
Set olns = ol.GetNamespace("MAPI")
Set cf = olns.GetDefaultFolder(olFolderContacts)
Set objItems = cf.Items
iNumContacts = objItems.Count
If iNumContacts <> 0 Then
For i = 1 To iNumContacts
If TypeName(objItems(i)) = "ContactItem" Then
Set c = objItems(i)
rst.AddNew
' Custom Outlook properties look like this:
' rst!AccessFieldName = c.UserProperties("OutlookPropertyName")
rst!FirstName = c.FirstName
rst!LastName = c.LastName
rst!HomeStreet = c.HomeAddressStreet
rst!HomeCity = c.HomeAddressCity
rst!HomeState = c.HomeAddressState
rst!HomePostalCode = c.HomeAddressPostalCode
rst!HomeCountryRegion = c.HomeAddressCountry
rst!Categories = c.Categories
rst!HomePhone = c.HomeTelephoneNumber
rst!MobilePhone = c.MobileTelephoneNumber
rst.Update
End If
Next i
rst.Close
DoCmd.Close acTable, "Contacts", acSaveYes 'Close the populated Table
Else
MsgBox "No contacts to export."
End If
End Sub