Die Community zu .NET und Classic VB.
Menü

FAQ 0038: Wie kann ich die Kontakte aus Microsoft Outlook auslesen?

 von 

Frage 

Wie kann ich die Kontakte aus Microsoft Outlook auslesen?

Antwort  

Der folgende Code wurde von Johannes Faget gepostet:

Option Explicit

' *** Use this declarations during development only:
'    Dim olApp As Outlook.Application
'    Dim olNS As Outlook.NameSpace
'    Dim olFolder As Outlook.MAPIFolder
'    Dim olContact As Outlook.ContactItem
' *** Reference to "Microsoft Outlook x.0 Object Library"

Public Type Contact
    Categories As String                ' Used by Siemens VCard
    LastName As String
    FirstName As String
    HomeAddressStreet As String
    HomeAddressPostalCode As String
    HomeAddressCity As String
    HomeAddressCountry As String
    CompanyName As String
    HomeTelephoneNumber As String
    BusinessTelephoneNumber As String
    MobileTelephoneNumber As String
    HomeFaxNumber As String
    Email1Address As String
    PersonalHomePage As String
    '...    There are many more items used in Outlook
    '       but the Siemens mobile VCard doesn't support them
End Type

' declared like Outlook does
Private Const olFolderContacts As Long = 10  

' Log errors into this file (File path is App.Path)
Private Const errFile As String = "error.log"   
                                                
' Switch to turn off the logging functionality
' Shouldn't be turned off, only unexpected errors were logged
Private Const doErrorLogging As Boolean = True  

Public Function isOutlookInstalled() As Boolean
    ' Tries to create an instance of Outlook
    ' Returnes true if successful, otherwise false

    Dim olApp As Object

    On Error Goto errHandler

    Set olApp = CreateObject("Outlook.Application")
    isOutlookInstalled = True
    Set olApp = Nothing

    Exit Function
errHandler:
    If Err.Number = 429 Then
        ' Can't create Object -> Outlook is not installed
        ' Don't need to log as error.
    Else
        ErrPrint "Function isOutlookInstalled() returned with error"
    End If
    isOutlookInstalled = False
End Function

Public Function getOutlookShortVersion() As Integer
    ' Returnes the major version of installed Outlook
    ' If Outlook isn't installed or an error occures 
    ' the return value is zero

    Dim olApp As Object
    Dim splittArr() As String

    On Error Goto errHandler

    If Not isOutlookInstalled Then
        getOutlookShortVersion = 0
    Else
        Set olApp = CreateObject("Outlook.Application")
        splittArr = Split(olApp.Version, ".")

        If Not isStringArrayDimensioned(splittArr()) Then
            getOutlookShortVersion = 0
        Else
            getOutlookShortVersion = CInt(splittArr(0))
        End If

        Set olApp = Nothing
    End If

    Exit Function
errHandler:
    ErrPrint "Function getOutlookShortVersion() returned with error"
    getOutlookShortVersion = 0
End Function

Public Function getOutlookVersionName() As String
    ' Returns the "spoken version" of installed Outllok
    ' If Outlook isn't installed or an error occures 
    ' the return value a nullstring
    
    On Error Goto errHandler
    
    If Not isOutlookInstalled Then
        getOutlookVersionName = vbNullString
    Else
        Select Case getOutlookShortVersion
        Case 10
            getOutlookVersionName = "Outlook® 2002"
        Case 9
            getOutlookVersionName = "Outlook® 2000"
        Case 8
            getOutlookVersionName = "Outlook® 97"
        Case 7
            getOutlookVersionName = "Outlook® 95"
        Case Is < 7
            getOutlookVersionName = "Outlook® version less than 95"
        End Select
    End If
    
    Exit Function
errHandler:
    ErrPrint "Function getOutlookVersionName() returned with error"
    getOutlookVersionName = vbNullString
End Function

Public Function getOutlookLongVersion() As String
    ' Returnes the whole version of installed Outlook
    ' If Outlook isn't installed or an error occures 
    ' the return value is a nullstring

    Dim olApp As Object

    On Error Goto errHandler

    If Not isOutlookInstalled Then
        getOutlookLongVersion = vbNullString
    Else
        Set olApp = CreateObject("Outlook.Application")
        getOutlookLongVersion = olApp.Version
        Set olApp = Nothing
    End If

    Exit Function
errHandler:
    ErrPrint "Function getOutlookLongVersion() returned with error"
    getOutlookLongVersion = vbNullString
End Function

Public Function getContactFolderCount() As Integer
    ' Returnes the number of contacts in the Outlook contacts folder,
    ' returnes zero if Outlook is not installed

    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Object

    On Error Goto errHandler

    If Not isOutlookInstalled Then
        getContactFolderCount = 0
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)

        getContactFolderCount = olFolder.Items.Count

        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
    End If

    Exit Function
errHandler:
    ErrPrint "Function getContactFolderCount() returned with error"
    getContactFolderCount = 0
End Function

Public Function getContact(index As Integer) As Contact
    ' Returnes the Outlook contact information of the entry,
    ' containes only the information which siemens mobile supports.
    ' Returnes Nothing if Outlook is not installed or
    ' the specified entry doesn't exist.
    
    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Object
    Dim olContact As Object
    Dim tmpContact As Contact
    
    On Error Goto errHandler

    If Not isOutlookInstalled Then
        'getContact = Nothing
    ElseIf getContactFolderCount < index Then
        'getContact = Nothing
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)
        Set olContact = olFolder.Items(index)
                
        With tmpContact
            .BusinessTelephoneNumber = olContact.BusinessTelephoneNumber
            .Categories = olContact.Categories
            .CompanyName = olContact.CompanyName
            .Email1Address = olContact.Email1Address
            .FirstName = olContact.FirstName
            .HomeAddressCity = olContact.HomeAddressCity
            .HomeAddressCountry = olContact.HomeAddressCountry
            .HomeAddressPostalCode = olContact.HomeAddressPostalCode
            .HomeAddressStreet = olContact.HomeAddressStreet
            .HomeFaxNumber = olContact.HomeFaxNumber
            .HomeTelephoneNumber = olContact.HomeTelephoneNumber
            .LastName = olContact.LastName
            .MobileTelephoneNumber = olContact.MobileTelephoneNumber
            .PersonalHomePage = olContact.PersonalHomePage
        End With
        
        Set olContact = Nothing
        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
        
        getContact = tmpContact
    End If

    Exit Function
errHandler:
    ErrPrint "Function getContact() returned with error"
    'getContact = Nothing
End Function

Public Function modifyContact(index As Integer, _
                              modContact As Contact) As Boolean
    ' Sets the new information to the outlook contact entry
    ' with the specified index.
    ' Returnes True if successful, 
    ' otherwise False (e.G. if entry doesn't exist)
    
    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Object
    Dim olContact As Object
    
    On Error Goto errHandler

    If Not isOutlookInstalled Then
        modifyContact = False
    ElseIf getContactFolderCount < index Then
        modifyContact = False
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)
        Set olContact = olFolder.Items(index)
                
        With olContact
            .BusinessTelephoneNumber = _
                                      modContact.BusinessTelephoneNumber
            .Categories = modContact.Categories
            .CompanyName = modContact.CompanyName
            .Email1Address = modContact.Email1Address
            .FirstName = modContact.FirstName
            .HomeAddressCity = modContact.HomeAddressCity
            .HomeAddressCountry = modContact.HomeAddressCountry
            .HomeAddressPostalCode = modContact.HomeAddressPostalCode
            .HomeAddressStreet = modContact.HomeAddressStreet
            .HomeFaxNumber = modContact.HomeFaxNumber
            .HomeTelephoneNumber = modContact.HomeTelephoneNumber
            .LastName = modContact.LastName
            .MobileTelephoneNumber = modContact.MobileTelephoneNumber
            .PersonalHomePage = modContact.PersonalHomePage
            .Save
        End With
        
        Set olContact = Nothing
        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
        
        modifyContact = True
    End If

    Exit Function
errHandler:
    ErrPrint "Function modifyContact() returned with error"
    modifyContact = False
End Function

Public Function addContact(newContact As Contact) As Integer
    ' Adds the new contact to the outlook contact folder
    ' Returnes Tthe index of the new entry, Zero if creation failed
    
    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Object
    Dim olContact As Object
    
    On Error Goto errHandler

    If Not isOutlookInstalled Then
        addContact = 0
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)
        Set olContact = olFolder.Items.Add
        
        With olContact
            .BusinessTelephoneNumber = _
                                      newContact.BusinessTelephoneNumber
            .Categories = newContact.Categories
            .CompanyName = newContact.CompanyName
            .Email1Address = newContact.Email1Address
            .FirstName = newContact.FirstName
            .HomeAddressCity = newContact.HomeAddressCity
            .HomeAddressCountry = newContact.HomeAddressCountry
            .HomeAddressPostalCode = newContact.HomeAddressPostalCode
            .HomeAddressStreet = newContact.HomeAddressStreet
            .HomeFaxNumber = newContact.HomeFaxNumber
            .HomeTelephoneNumber = newContact.HomeTelephoneNumber
            .LastName = newContact.LastName
            .MobileTelephoneNumber = newContact.MobileTelephoneNumber
            .PersonalHomePage = newContact.PersonalHomePage
            .Save
        End With
        
        Set olContact = Nothing
        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
        
        addContact = getContactFolderCount
    End If

    Exit Function
errHandler:
    ErrPrint "Function addContact() returned with error"
    addContact = 0
End Function

Public Function deleteContact(index As Integer) As Boolean
    ' Deletes the specified entry from the Outlook contact folder
    ' Returnes True if successful, 
    ' otherwise False (e.G. if entry doesn't exist)
    
    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Object
    Dim olContact As Object
    
    On Error Goto errHandler

    If Not isOutlookInstalled Then
        deleteContact = False
    ElseIf getContactFolderCount < index Then
        deleteContact = False
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)
        Set olContact = olFolder.Items(index)
            
        olContact.Delete
        
        Set olContact = Nothing
        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
        
        deleteContact = True
    End If

    Exit Function
errHandler:
    ErrPrint "Function deleteContact() returned with error"
    deleteContact = False
End Function

Public Function findContact(LastName As String, _
                 Optional FirstName As String = vbNullString) As Integer
    ' Searches for specified entry in the Outlook contact folder
    ' Returnes the index if found, otherwise Zero
    
    Dim olApp As Object
    Dim olNameSpace As Object
    Dim olFolder As Outlook.MAPIFolder 'Object
    Dim olContact As Outlook.ContactItem 'Object
    Dim i As Integer
    
    On Error Goto errHandler

    If Not isOutlookInstalled Then
        findContact = 0
    Else
        Set olApp = CreateObject("Outlook.Application")
        Set olNameSpace = olApp.GetNamespace("MAPI")
        Set olFolder = olNameSpace.GetDefaultFolder(olFolderContacts)
        
        findContact = 0
        
        For i = 1 To olFolder.Items.Count
            Set olContact = olFolder.Items(i)
            
            If LCase(olContact.LastName) = LCase(LastName) Then
                If FirstName = "" Then
                    findContact = i
                    Exit For
                ElseIf olContact.FirstName = FirstName Then
                    findContact = i
                    Exit For
                End If
            End If
        Next i
        
        Set olContact = Nothing
        Set olFolder = Nothing
        Set olNameSpace = Nothing
        Set olApp = Nothing
    End If

    Exit Function
errHandler:
    ErrPrint "Function findContact() returned with error"
    findContact = 0
End Function

'******************************** Error logging ************************
Public Sub ErrPrint(str As Variant)
    ' Error logging into file
    ' Adds a timestamp and the number/description of the error
    
    ' Should only be used if an unexpected error occures
    
    Dim fnr As Long
    
    If doErrorLogging Then
        fnr = FreeFile
        
        Open checkPath(App.Path) & errFile For Append As #fnr
            Print #fnr, CStr(Time) & vbTab & CStr(str)
            Print #fnr, vbTab & "Fehler " & _
                       CStr(Err.Number) & ": " & Err.Description
            Print #fnr, ""
        Close #fnr
        DoEvents
    End If
End Sub

Listing 1: Kontakte mit Outlook auslesen

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.