Re: Rebuild Contacts Links
  Home FAQ Contact Sign in
microsoft.public.outlook.contacts only
 
Advanced search
POPULAR GROUPS

more...

 Up
Re: Rebuild Contacts Links         

Group: microsoft.public.outlook.contacts · Group Profile
Author: Sue Mosher [MVP-Outlook]
Date: May 11, 2007 13:11

I have no idea what the problem might be. Maybe it's a weird timing issue. You could try pressing F9 to put a breakpoint on the For Each statement, then press F5 each time to loop back to the breakpoint.

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003
http://www.turtleflock.com/olconfig/index.htm
and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
http://www.outlookcode.com/jumpstart.aspx

"Michael Ray Brown" yahooNoSpam.com> wrote in message news:uv7EibAlHHA.1624@TK2MSFTNGP02.phx.gbl...
> That did the trick! I ran it on my Journal items and Task items, and all
> the links now work. Wow! Thank you!
>
> Unfortunately, I still have problems with Calendar items. For some strange
> reason, when I run the macro on the Calendar folder, it doesn't fix the
> links. However, when I step through the macro, it seems to work. I see an
> appointment item come up in the Immediate window, showing the number of
> links, and when I go to that appointment and double-click on the link, it
> works.
>
> I'd step through the whole calendar, item-by-item, but that's a lot of "F8"
> keystrokes. Can you see why the macro doesn't work on Calendar items?
>
> --
> Michael
>
> "Sue Mosher [MVP-Outlook]" outlookcode.com> wrote in message
> news:OzbfWO$kHHA.2552@TK2MSFTNGP06.phx.gbl...
> I see one problem. This particular code will only update contacts because of
> the first and last statements in this snippet:
>
> If objItem.Class = olContact Then ' <<<< don't need this
> Set colLinks = objItem.Links
> intCount = colLinks.Count
> If intCount > 0 Then
> For i = intCount To 1 Step -1
> Set objLink = colLinks.Item(i)
> If objLink.Item Is Nothing Then
> strFind = "[FullName] = " & Quote(objLink.Name)
> Set objContact = colContacts.Find(strFind)
> If Not objContact Is Nothing Then
> ' remove the old link
> colLinks.Remove i
> ' add the replacement link
> colLinks.Add objContact
> End If
> End If
> Next
> objItem.Save
> End If
> End If ' <<<< don't need this
>
> Try deleting those two statements.
>
> Also is the code actually executing the Debug.Print statement? Did you
> display the Immediate window?
>
> "Michael Ray Brown" yahooNoSpam.com> wrote in message
> news:O$99x%%23%%23kHHA.3484@TK2MSFTNGP02.phx.gbl...
>>I took your advice, and added the statement to list the items and their
>>link
>> counts. When I run the macro, though, nothing shows up. To make sure
>> I've
>> got it right, I'm pasting the entire script below. Please forgive the
>> long
>> post.
>>
>> --
>> Michael
>>
>> -------------------------------------------
>>
>> Sub FixContactLinks()
>> Dim objNS As NameSpace
>> Dim objFolder As MAPIFolder
>> Dim colItems As Items
>> Dim objItem As Object
>> Dim colLinks As Links
>> Dim objLink As Link
>> Dim colContacts As Items
>> Dim objContact As ContactItem
>> Dim strFind As String
>> Dim intCount As Integer
>> On Error Resume Next
>> Set objNS = Application.Session
>> Set objFolder = objNS.PickFolder
>> If Not objFolder Is Nothing Then
>> Set colContacts = _
>> objNS.GetDefaultFolder(olFolderContacts).Items
>> Set colItems = objFolder.Items
>> For Each objItem In colItems
>> Debug.Print objItem.Subject, objItem.Links.Count
>> If objItem.Class = olContact Then
>> Set colLinks = objItem.Links
>> intCount = colLinks.Count
>> If intCount > 0 Then
>> For i = intCount To 1 Step -1
>> Set objLink = colLinks.Item(i)
>> If objLink.Item Is Nothing Then
>> strFind = "[FullName] = " & Quote(objLink.Name)
>> Set objContact = colContacts.Find(strFind)
>> If Not objContact Is Nothing Then
>> ' remove the old link
>> colLinks.Remove i
>> ' add the replacement link
>> colLinks.Add objContact
>> End If
>> End If
>> Next
>> objItem.Save
>> End If
>> End If
>> Next
>> End If
>> Set objLink = Nothing
>> Set colLinks = Nothing
>> Set objItem = Nothing
>> Set objItems = Nothing
>> Set objFolder = Nothing
>> Set objNS = Nothing
>> Set objContact = Nothing
>> Set objApp = Nothing
>> End Sub
>> Function Quote(val) As String
>> Quote = Chr(34) & CStr(val) & Chr(34)
>> End Function
>>
>> ---------------------------------------------
>> "Sue Mosher [MVP-Outlook]" outlookcode.com> wrote in message
>> news:ObtktW9kHHA.1340@TK2MSFTNGP04.phx.gbl...
>>> Well, it must be missing something because all my Journal items, Calendar
>>> items, and Task items have links to at least one Contact.
>>
>> All I can say is that intCount is derived from the Count property of the
>> Links collection on the item being processed. You can add a Debug.Print
>> objItem.Subject, objItem.Links.Count statement inside the For Each loop to
>> get a list of the items and their link counts. The list will show in the
>> immediate window.
>>
>>> Just so I'm clear on how to run the macro: When it asks me to choose a
>>> folder, I select the folder that contains the items which need to be
>>> re-linked to a contact record.
>>
>> Yes, that's correct.
>>
>>> If I decipher the macro correctly, it
>>> defaults to the Contacts folder if no folder is selected, meaning that it
>>> looks for links to other contacts in each contact record.
>>
>> No, if no folder is selected, no items will be processed at all.
>>
>> The code looks for matching contacts only in the user's default Contacts
>> folder, not in any other contacts folders that might be present.
>>
>> --
>> Sue Mosher, Outlook MVP
>> Author of Configuring Microsoft Outlook 2003
>> http://www.turtleflock.com/olconfig/index.htm
>> and Microsoft Outlook Programming - Jumpstart for
>> Administrators, Power Users, and Developers
>> http://www.outlookcode.com/jumpstart.aspx
>>
>>>
>>> --
>>> Michael
>>>
>>> "Sue Mosher [MVP-Outlook]" outlookcode.com> wrote in message
>>> news:uyFqfP8kHHA.1340@TK2MSFTNGP04.phx.gbl...
>>> That means that intCount equals zero, that the item being worked on has
>>> no
>>> contact links.
>>>
>>> "Michael Ray Brown" yahooNoSpam.com> wrote in message
>>> news:uWW$Mi2kHHA.596@TK2MSFTNGP06.phx.gbl...
>>>> I'm a bit out of my depth here. I'm a writer, not a programmer.
>>>> However,
>>>> when I press "F8" to step through the script, it gets to the line...
>>>>
>>>> If intCount > 0 Then
>>>>
>>>> ... and then the highlighting jumps to...
>>>>
>>>> End If
>>>>
>>>> It does this over and over again. I never see any link being added or
>>>> removed.
>>>>
>>>> --
>>>> Michael
>>>>
>>>> "Sue Mosher [MVP-Outlook]" outlookcode.com> wrote in message
>>>> news:O88iv31kHHA.3512@TK2MSFTNGP06.phx.gbl...
>>>> What happens if you step through the code in the debugger? Can you see
>>>> it
>>>> execute the statements where it adds a link, removes the old link, and
>>>> saves
>>>> the item?
>>>>
>>>> "Michael Ray Brown" yahooNoSpam.com> wrote in message
>>>> news:%%23yP9hg1kHHA.4848@TK2MSFTNGP05.phx.gbl...
>>>>> I've unfortunately had the same catastrophe befall me. After upgrading
>>>>> to
>>>>> Outlook 2007 and running the recent patch, all the links to my Contacts
>>>>> from
>>>>> my Journal items, Task items, and Calendar items suddenly went dead.
>>>>>
>>>>> I copied and pasted the VBA script into Outlook, and ran the macro, but
>>>>> nothing has changed. Whenever I double click on a name in a Journal
>>>>> item's
>>>>> "Contacts" field, for example, I still get an error message:
>>>>>
>>>>> "Cannot perform the requested operation. The command selected is not
>>>>> valid
>>>>> for this recipient. An internal support function returned an error."
>>>>>
>>>>> --
>>>>> Michael
>>>>>
>>>>> "Sue Mosher [MVP-Outlook]" outlookcode.com> wrote in message
>>>>> news:e8UPLotgHHA.2640@TK2MSFTNGP06.phx.gbl...
>>>>> The underscore is a continuation character. If you put the entire
>>>>> statement
>>>>> on one line, you must take the underscore out. If you leave it in, the
>>>>> quotation mark needs to be after the equals sign.
>>>
>>>>>
>>>>> "chunnel" discussions.microsoft.com> wrote in message
>>>>> news:CD4E7D0D-83D1-4EAF-B0CC-B6289DB06676@microsoft.com...
>>>>>>I tried the ReconnectLinks () from Listing 20.2 and I keep getting an
>>>>>>error
>>>>>> at the line which is as follows;
>>>>>> If objLink.item Is Nothing Then
>>>>>> strFind = "[FullName] = _
>>>>>> " & Quote(objLink.Name)
>>>>>>
>>>>>> If I type it as written then I get an compile error for unexpected end
>>>>>> of
>>>>>> statement because I hit return after the "_". If it keep the 3rd line
>>>>>> as
>>>>>> part of the 2nd line so that it looks as follows;
>>>>>> strFind = "[FullName] = _" & Quote(objLink.Name)
>>>>>> then I get an error when running it that Sub or Function is not
>>>>>> defined
>>>>>> and
>>>>>> it focuses on this line.
>>>
>>>
>>
>>
>
>
no comments
diggit! del.icio.us! reddit!