Import av kontakter från MS Outlook
Här demonstreras hur vi kan automatiskt hämta önskade uppgifter från kontaktregistret i Outlook.
Om vi har byggt upp vårt kundregister i "Kontakter" så kanske vi vill nyttja dessa uppgifter i samband med att vi utför något arbete i Excel.
För att få snabbare tillgång till uppgifterna är det att rekommendera att det sker i två steg: Först importerar vi data till Excel och därefter bygger vi upp en lösning i Excel-miljön mha av t ex uppslagsfunktionerna.
MS Outlook är ett systemresurskrävande program (åtminstone på mina datorer) varför det kan uppfattas att det tar lång tid vid hämtning av data. Ett tips är därför att du öppnar Outlook först och därefter importerar önskad data.
Innan proceduren körs måste en referens sättas till Outlooks objektbibliotek. Det sker på följande sätt:
1. Öppna VB-Editorn i Excel.
2. Välj kommandot Verktyg | Referenser...
3. Bocka för Microsoft Outlook x.x Object Library.
Genom att sätta en referens till en specifik version av Outlooks Object Library ställs kravet, vid distribution, på att mottagarna också har tillgång till det. Istället kan en mer generell referens skapas genom att i procedurerna ange följande:
Dim OLObj as Object Set OLObj = CreateObject("Outlook.Application")
Den mest påtagliga nackdelen är att det inte går lika fort jämfört med ovanstående ansats.
"Kontakter" ska inte förväxlas med en personlig mapp eller en personlig adressbok i Outlooks struktur.Den tillhör kategorin inbyggda mappar och ingår i användarens postsystem. Den är en s k MAPI-folder. Det gör att vi dels måste anropa NameSpace i Outlook och dels definiera "Kontakter" som ett MAPIfolder-objekt. NameSpace används för att skapa kontakt med redan existerande objekt (se procedur nedan).
"Kontakter" innehåller kontakter men också sändlistor. För att förhindra att sändlistorna importeras filtreras dessa bort (se procedur nedan).
Option Explicit
Sub Importera_Kontakter()
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder
Dim olColItems As Outlook.Items
Dim olItem As Object
Dim strDummy As String
Dim i As Long
Application.ScreenUpdating = False
With Worksheets("Kundlistan")
.Activate
.Range("A1").CurrentRegion.Clear
End With
With ActiveSheet
.Cells(1, 1).Value = "Företag /Privatperson"
.Cells(1, 2).Value = "Gatuadress"
.Cells(1, 3).Value = "Postnummer"
.Cells(1, 4).Value = "Ort"
.Cells(1, 5).Value = "Kontaktperson"
.Cells(1, 6).Value = "E-postadress"
With Range("A1:F1")
.Font.Bold = True
.Font.ColorIndex = 10
.Font.Size = 11
End With
End With
Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
Set olFolder = olNamespace.GetDefaultFolder(10)
Set olColItems = olFolder.Items
i = 2
For Each olItem In olColItems
If TypeName(olItem) = "ContactItem" Then
With olItem
If InStr(olItem.CompanyName, strDummy) > 0 Then
Cells(i, 1).Value = .CompanyName
Cells(i, 2).Value = .BusinessAddressStreet
Cells(i, 3).Value = .BusinessAddressPostalCode
Cells(i, 4).Value = .BusinessAddressCity
Cells(i, 5).Value = .FullName
Cells(i, 6).Value = .Email1Address
Else
Cells(i, 1).Value = .FullName
Cells(i, 2).Value = .HomeAddressStreet
Cells(i, 3).Value = .HomeAddressPostalCode
Cells(i, 4).Value = .HomeAddressCity
Cells(i, 5).Value = .FullName
Cells(i, 6).Value = .Email1Address
End If
End With
i = i + 1
End If
Next olItem
Set olItem = Nothing
Set olColItems = Nothing
Set olFolder = Nothing
Set olNamespace = Nothing
Set olApp = Nothing
'När alla poster är importerade sker en sortering från A-Ö på
'basis av variabeln "Företagsnamn/Privatperson"
Range("A2", Cells(2, 6).End(xlDown)).Sort Key1:=Range("A2"), _
Order1:=xlAscending
Range("A:F").EntireColumn.AutoFit
Application.Application.ScreenUpdating = False
MsgBox "Kundlistan uppdaterad!", vbInformation
End Sub
Vill vi inte importera mha VBA kan vi istället göra det manuellt:
1. Öppna MS Outlook.
2. Välj kommandot Arkiv | Importera och exportera...
3. Följ anvisningarna i guiden.
4. Klart!
Nackdelen är dock att vi här inte kan bestämma vilka variabler som ska importeras för varje kontakt utan alla följer med.