Andrew wanted to place Skype calls using Outlook Contacts but the country codes are missing from his contacts. While Outlook can automatically add the country code when you use the Call Phone feature, Skype dials the number as exactly as shown in the contact. Andrew put together this macro to add the country code to the phone numbers. This code is similar to our code sample that cleans up area codes and prefixes, found at Remove Prefix and Reformat Phone Numbers.
To use, add to the VBA editor, change the country code to the correct one for your location, and if your country code is not 2 digits, change the value in this line: new_phone_no = my_country_code + Mid$(phone_no, 2) and then run it. Note that this is intended for use on phone numbers that are in your own country. If international numbers begin with +, the code will ignore the contacts.
Sub correct_phone_nos_country_code() Dim olApp As Outlook.Application Dim myNameSpace As Outlook.NameSpace Dim objFolder As Outlook.MAPIFolder Dim objItems As Outlook.Items Dim objItem As Object, objAdd As Object Dim new_no As String Set olApp = CreateObject("Outlook.Application") Set myNameSpace = olApp.GetNamespace("MAPI") Set objFolder = myNameSpace.GetDefaultFolder(olFolderContacts) ' Main (default) contacts folder Set objItems = objFolder.Items For Each objItem In objItems ' Make sure we have a contact item With objItem If .Class = olContact Then Debug.Print .FileAs, .BusinessTelephoneNumber, .HomeTelephoneNumber, .MobileTelephoneNumber .HomeTelephoneNumber = correct_phone_no_to_international(.HomeTelephoneNumber) .BusinessTelephoneNumber = correct_phone_no_to_international(.BusinessTelephoneNumber) .HomeTelephoneNumber = correct_phone_no_to_international(.HomeTelephoneNumber) .MobileTelephoneNumber = correct_phone_no_to_international(.MobileTelephoneNumber) .BusinessFaxNumber = correct_phone_no_to_international(.BusinessFaxNumber) objItem.Save End If End With Next End Sub '============================= Function correct_phone_no_to_international(phone_no As String) As String Dim new_phone_no As String Dim my_country_code As String '****change this to your country code: ' if your country code is not 2 digits, make additional change below my_country_code = "+44" '*********** correct_phone_no_to_international=phone_no If Len(Trim(phone_no)) = 0 Then change_phone_no_to_international = "" Exit Function End If If Left$(phone_no, 1) <> "+" Then ' replace 2 with the number of digits in your country code new_phone_no = my_country_code + Mid$(phone_no, 2) correct_phone_no_to_international = new_phone_no End If End Function
How to use a macro
First: You will need macro security set to low during testing.
To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security.
After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.
Open the VBA Editor by pressing Alt+F11 on your keyboard.
To put the code in a module:
- Right click on Project1 and choose Insert > Module
- Copy and paste the macro into the new module.
More information as well as screenshots are at How to use the VBA Editor
Hi Diane
Is there a way to revert the changes made to the outlook contact numbers? I've run the script and for some reason it removed the first four digits of the number so not sure where I've gone wrong but need to try and get the numbers back into the original format.
Diane you are a Saint! It worked perfectly. I've been trying to find an easy way to add +1 to my contacts for over 2 years so that Skype would tell me who's calling. Thank you so much