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. |
|
|
Thread Tools | Display Modes |
#31
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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 | |
|
|