A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Outlook » Contacts
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

Rebuild Contacts Links



 
 
Thread Tools Display Modes
  #31  
Old May 11th, 2007, 03:06 PM posted to microsoft.public.outlook.contacts
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 7,177
Default Rebuild Contacts Links

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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.



  #32  
Old May 11th, 2007, 06:13 PM posted to microsoft.public.outlook.contacts
Michael Ray Brown
external usenet poster
 
Posts: 41
Default Rebuild Contacts Links

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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.





  #33  
Old May 11th, 2007, 06:28 PM posted to microsoft.public.outlook.contacts
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 7,177
Default Rebuild Contacts Links

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?

--
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" wrote in message ...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.





  #34  
Old May 11th, 2007, 08:59 PM posted to microsoft.public.outlook.contacts
Michael Ray Brown
external usenet poster
 
Posts: 41
Default Rebuild Contacts Links

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]" wrote in message
...
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?

--
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.







  #35  
Old May 11th, 2007, 09:11 PM posted to microsoft.public.outlook.contacts
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 7,177
Default Rebuild Contacts Links

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" wrote in message ...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.






  #36  
Old May 11th, 2007, 10:14 PM posted to microsoft.public.outlook.contacts
Michael Ray Brown
external usenet poster
 
Posts: 41
Default Rebuild Contacts Links

Okay, I put a breakpoint on the "For Each" statement, and pressed "F5."
Instead of cycling through just one item, the macro ran through the entire
Calendar folder. I could see a flood of items come up in the Immediate
window before the screen went white for about five seconds. When the
Project window reappeared and the dust settled, all I could find in the
Immediate window were holiday and birthday items.

And again, the links weren't fixed. Not even the ones connected with
birthdays.

If I could hire a robot to press "F8" for a day, that's what I'd do.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.








  #37  
Old May 11th, 2007, 10:31 PM posted to microsoft.public.outlook.contacts
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 7,177
Default Rebuild Contacts Links

The breakpoint must not be in the right place, because wherever there is a breakpoint, the code will stop every time it reaches that point. What I'm trying to do is get your loop to run once for one item, then stop, so you can then press F5 to process the next item.

--
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" wrote in message ...
Okay, I put a breakpoint on the "For Each" statement, and pressed "F5."
Instead of cycling through just one item, the macro ran through the entire
Calendar folder. I could see a flood of items come up in the Immediate
window before the screen went white for about five seconds. When the
Project window reappeared and the dust settled, all I could find in the
Immediate window were holiday and birthday items.

And again, the links weren't fixed. Not even the ones connected with
birthdays.

If I could hire a robot to press "F8" for a day, that's what I'd do.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
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.



"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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.








  #38  
Old May 11th, 2007, 11:28 PM posted to microsoft.public.outlook.contacts
Michael Ray Brown
external usenet poster
 
Posts: 41
Default Rebuild Contacts Links

I tried inserting the breakpoint on the line following the "For Each"
statement. This time it didn't cycle through the entire Calendar folder,
but went through each item individually when I hit "F5." However, it
changed nothing. The links still do not work. And with more than 12 years'
appointments in my Calendar, my finger is getting a little sore.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
The breakpoint must not be in the right place, because wherever there is a
breakpoint, the code will stop every time it reaches that point. What I'm
trying to do is get your loop to run once for one item, then stop, so you
can then press F5 to process the next item.

--
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" wrote in message
...
Okay, I put a breakpoint on the "For Each" statement, and pressed "F5."
Instead of cycling through just one item, the macro ran through the entire
Calendar folder. I could see a flood of items come up in the Immediate
window before the screen went white for about five seconds. When the
Project window reappeared and the dust settled, all I could find in the
Immediate window were holiday and birthday items.

And again, the links weren't fixed. Not even the ones connected with
birthdays.

If I could hire a robot to press "F8" for a day, that's what I'd do.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
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.



"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in
message
...
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]" wrote in message
...
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" wrote in message
...
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.










  #39  
Old May 11th, 2007, 11:38 PM posted to microsoft.public.outlook.contacts
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 7,177
Default Rebuild Contacts Links

Are the contacts that need to be relinked located in your default Contacts folder? If not, then we'll have to modify the code to add another PickFolder statement to allow you to select where they're located.

--
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" wrote in message ...
I tried inserting the breakpoint on the line following the "For Each"
statement. This time it didn't cycle through the entire Calendar folder,
but went through each item individually when I hit "F5." However, it
changed nothing. The links still do not work. And with more than 12 years'
appointments in my Calendar, my finger is getting a little sore.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
The breakpoint must not be in the right place, because wherever there is a
breakpoint, the code will stop every time it reaches that point. What I'm
trying to do is get your loop to run once for one item, then stop, so you
can then press F5 to process the next item.



"Michael Ray Brown" wrote in message
...
Okay, I put a breakpoint on the "For Each" statement, and pressed "F5."
Instead of cycling through just one item, the macro ran through the entire
Calendar folder. I could see a flood of items come up in the Immediate
window before the screen went white for about five seconds. When the
Project window reappeared and the dust settled, all I could find in the
Immediate window were holiday and birthday items.

And again, the links weren't fixed. Not even the ones connected with
birthdays.

If I could hire a robot to press "F8" for a day, that's what I'd do.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
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.



"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on has
no
contact links.

"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in
message
...
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]" wrote in message
...
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" wrote in message
...
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.










  #40  
Old May 12th, 2007, 12:19 AM posted to microsoft.public.outlook.contacts
Michael Ray Brown
external usenet poster
 
Posts: 41
Default Rebuild Contacts Links

Yes, my contacts are in the default Contacts folder. I can't understand why
the macro isn't re-linking the Calendar items. On all other types of
Outlook items it worked like a dream. The only thing different now is that
I'm selecting the Calendar folder. By the way, I'm very grateful for your
expertise and the time you've spent helping me resolve this issue.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
Are the contacts that need to be relinked located in your default Contacts
folder? If not, then we'll have to modify the code to add another PickFolder
statement to allow you to select where they're located.

--
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" wrote in message
...
I tried inserting the breakpoint on the line following the "For Each"
statement. This time it didn't cycle through the entire Calendar folder,
but went through each item individually when I hit "F5." However, it
changed nothing. The links still do not work. And with more than 12
years'
appointments in my Calendar, my finger is getting a little sore.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
The breakpoint must not be in the right place, because wherever there is a
breakpoint, the code will stop every time it reaches that point. What I'm
trying to do is get your loop to run once for one item, then stop, so you
can then press F5 to process the next item.



"Michael Ray Brown" wrote in message
...
Okay, I put a breakpoint on the "For Each" statement, and pressed "F5."
Instead of cycling through just one item, the macro ran through the
entire
Calendar folder. I could see a flood of items come up in the Immediate
window before the screen went white for about five seconds. When the
Project window reappeared and the dust settled, all I could find in the
Immediate window were holiday and birthday items.

And again, the links weren't fixed. Not even the ones connected with
birthdays.

If I could hire a robot to press "F8" for a day, that's what I'd do.

--
Michael

"Sue Mosher [MVP-Outlook]" wrote in message
...
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.



"Michael Ray Brown" wrote in message
...
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]" wrote in message
...
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" wrote in message
...
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]" wrote in message
...
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]" wrote in message
...
That means that intCount equals zero, that the item being worked on
has
no
contact links.

"Michael Ray Brown" wrote in
message
...
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]" wrote in message
...
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" wrote in
message
...
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]" wrote in message
...
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" wrote in message
...
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.












 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump


All times are GMT +1. The time now is 08:51 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.