Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 437
  • Last Modified:

Add a new contact to a public folder

Using the below code i am able to add a contact to MY personal address book.
'Ref Outlook 9.0 obj Lib

    Set myOlApp = CreateObject("Outlook.Application")
    Set myNameSpace = myOlApp.GetNamespace("MAPI")
    Set myAddressList = myNameSpace.AddressLists ("Personal Address Book")
    Set myAddressentries = myAddressList.AddressEntries
   
    Set newEntry = myAddressentries.Add("SMTP")
   
    With newEntry
        .Address = "Address"
        .Name = "Name"
        .Update
    End With

How do i do the same to a public Contacts folder in Public Folders - All Public Folders - Test?
0
little2do
Asked:
little2do
  • 3
  • 3
1 Solution
 
kevothecloneCommented:
Here's an example that should work.
I'm still using Outlook 98 which uses the Outlook 8.0 Object Library.

I created two Sub procedures that you can call with the same exact parameters, so adding a entry to the Personal Address Book or the Contacts folder should be an easily interchangeable process.

I created a Driver() Sub to demo the AddContact() and AddPABEntry() Subs.

The key difference in the two is that the PAB is a special "thing" and the Contacts folder is a specialized MAPIFolder.

Be aware that a user can add many folders that can contain "Contact Items".  The AddContact() sub as coded here will only add items to a users default "Contacts" folder, which I guess is the folder named "Contacts" capable of containing "Contact Items".  If you need to add
"Contact Items" to a non-default Contact folder then you couldn't use the "myNameSpace.GetDefaultFolder(olFolderContacts)" method.


I hope this solves your problem.

' Start of code...
Option Explicit

Sub Driver()

  Dim myOlApp     As Outlook.Application
  Dim myNameSpace As Outlook.NameSpace
 
  Set myOlApp = CreateObject("Outlook.Application")
  Set myNameSpace = myOlApp.GetNamespace("MAPI")
 
  AddContact myNameSpace, "little2do@experts-exchange.com", "little2do"
 
  AddPABEntry myNameSpace, "little2do@experts-exchange.com", "little2do"
 
End Sub ' Driver()

Sub AddContact(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)
  Dim fldrContacts As Outlook.mapiFolder
  Dim ciNew        As Outlook.ContactItem
 
  Set fldrContacts = myNameSpace.GetDefaultFolder(olFolderContacts)
  Set ciNew = myNameSpace.Application.CreateItem(olContactItem)
 
  With ciNew
    .Email1Address = strAddr
    .FullName = strName
    .Save
  End With ' ciNew
End Sub ' AddContact(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)

Sub AddPABEntry(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)

  Dim myAddressList     As Outlook.AddressList
  Dim myAddressEntries  As Outlook.AddressEntries
  Dim newEntry          As Outlook.AddressEntry
 
  Set myAddressList = myNameSpace.AddressLists("Personal Address Book")
  Set myAddressEntries = myAddressList.AddressEntries
 
  Set newEntry = myAddressEntries.Add("SMTP")
 
  With newEntry
    .Address = strAddr
    .Name = strName
    .Update
  End With ' newEntry
End Sub ' AddPABEntry(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)
' End of code...
0
 
little2doAuthor Commented:
Thanks for the comment, unfortunately i am not sure what the syntax is to use use the  Set myAddressList = myNameSpace.AddressLists("Personal Address Book"). As i said i am trying to access a public folder and when i replace the "Personal Address Book" with the relevant folders name I get a can't be found message?

Any thoughts?

0
 
kevothecloneCommented:
Opps sorry I forgot that last sentence....

Here's another Sub that uses the same parameters as the previous two Sub but this time it will add a "Contact Item" to a public folder capable of accepting Contact Items.

You need to have a variable that points to the MAPIFolder where you want to save the item.  Then you use the Add method of the MAPIFolder's Items collection to create a new blank item (this technique should work for any MAPIFolder regardless of type or location).

Once you have the a new blank item of the correct type you fill out it's properties and save it, just like the AddressEntry.

The annoying part of the code is getting to a folder that is Setting a variable to the MAPIFolder object.  You need to use the Namespace.Folders.Item method repeatedly to navigate down the folder tree until you get the folder you want.  This could be one log line of code (as in my example) or it could be broken up into multiple statements.

I've tried to pass it a path to the folder but I can't get it to work:

"Public folders\this\that"
"Public folders/this/that"
"outlook://Public folders/this/that"

If you need a lot of flexibility then you could create a Function that would accept a folder path as a string argument, that would parse the path and return a MAPIFolder object.

' Start of code...
Sub AddPublicContact(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)
  Dim fldrContacts As Outlook.mapiFolder
  Dim ciNew        As Outlook.ContactItem
 
  Set fldrContacts = myNameSpace.Folders.Item("Public Folders").Folders.Item("DomainName").Folders.Item("UnitName").Folders.Item("PublicContacts")

  Set ciNew = fldrContacts.Items.Add(olContactItem)
 
  With ciNew
    .Email1Address = strAddr
    .FullName = strName
    .Save
  End With ' ciNew
 
End Sub ' AddContact(myNameSpace As Outlook.NameSpace, strAddr As String, strName As String)
' End of code...
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
little2doAuthor Commented:
Thanks kevotheclone - spot on.
0
 
little2doAuthor Commented:
kevotheclone, if you get this - can i do the above just using cdo and not ref outlook 9.0?
0
 
kevothecloneCommented:
Sorry I haven't responded sooner, but I've been really busy both at work and at home...

Although you can access a Folder using CDO and its Messages collection and a specific Item of the Messages collection, it doesn't look like you can work with Contact items.  The CDO help file I have states that the Item property "...returns a single AppointmentItem, GroupHeader, MeetingItem, or Message object from the Messages collection."  It doesn't say anything about Contact type of items, so maybe it will work, but maybe it won't.

There is a way via CDO to get to the user's default Contact folder, but this won't help you with a public Contacts folder:
Set objFolder = objSession.GetDefaultFolder(CdoDefaultFolderContacts)

If you don't have it already you can download the CDO help file here:
http://www.cdolive.net/download/cdo.zip
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now