dani
Goto Top

Outlook - VBA Parameter

Hi Jungs,
ich bastel gerade mal wieder ein VBA Script zusammen. Dieses mal für meine Mutti... face-wink

Es wird folgendes realisiert: Über ein VBA Makro in Outlook 2003 werden alle Kontakte ausgelesen, die das Feld "Firma" nicht leer haben. Diese Kontakte werden dann in in eine neue Exceltabelle expotiert. Dabei werden natürlich nur bestimmte Felder importiert. Zu 95% habe ich alles zusammen, jedoch habe ich 2-3 Probleme wo ich nicht weiter komme.

1. Problem:
Es wurde in einigen Kontakten das Feld "Notizen" verwendet.

36fb40bb93163a33402b7254882f88d2-details

Wie genau heißt das Feld im VBA? itmContacts. ???

2. Problem:
Es wurden 2 benutzerdefinierte Felder (Linie, FirmenNr) im Bereich Kontakte anlegt. Wie kann ich über VBA diese Felder auslesen. Denn wenn ich itmContacts. schreibe und dann STRG+Leertaste drücke erscheint das Drop-Down Menü. Dort werden leider nur die Standardfelder aufgeführt!

3. Problem:
Ich möchte zum Schluss aus diesem Makro heraus alle Zellen einen Rahmen verpassen. Die Möglichkeit, wie ich es bei einer einzelnen Zelle mache, habe ich gefunden aber es gibt bestimmt noch eine bessere Lösung als für jede Zelle eine VBA-Zeile zu schreiben.

Das Script wie es bis jetzt steht:
ub ContactsToExcel()

'Deklaration  
Dim nspMapi As Outlook.NameSpace
Dim folMapi As Outlook.MAPIFolder
Dim itmAll As Outlook.Items
Dim itmReal As Outlook.Items
Dim itmContacts As Outlook.ContactItem
Dim strContactFilter As String
Dim excApp As Object
Dim excWkb As Object
Dim excWks As Object
Dim intRow As Integer

'Outlook-Objekte öffnen  
Set nspMapi = Application.GetNamespace("MAPI")  
Set folMapi = nspMapi.GetDefaultFolder(olFolderContacts)
Set itmAll = folMapi.Items

'Verteilerlisten herausfiltern, nur 'Richtige Kontakte' verwenden  
strContactFilter = "[MessageClass] = 'IPM.Contact'"  
Set itmReal = itmAll.Restrict(strContactFilter)

'Excel-Objekte öffnen  
Set excApp = CreateObject("Excel.Application")  
Set excWkb = excApp.Workbooks.Add
Set excWks = excWkb.Sheets(1)

'Erstes Sheet Excel-Worksheet aufbereiten  
With excWks

'Sheet-Name  
.Name = "Outlook-Kontakte"  

'Spaltenüberschriften  
.cells(1, 1).Value = "Firma"  
'.cells(1, 2).Value = "Nachname"  
'.cells(1, 3).Value = "Vorname"  
.cells(1, 2).Value = "PLZ"  
.cells(1, 3).Value = "Ort"  
.cells(1, 4).Value = "Strasse"  
.cells(1, 5).Value = "Land"  
.cells(1, 6).Value = "Telefon"  
.cells(1, 7).Value = "Fax"  
.cells(1, 8).Value = "Homepage"  
.cells(1, 9).Value = "E-Mail"  
.cells(1, 10).Value = "KundenNr."  
.cells(1, 11).Value = "Linie"  
.cells(1, 12).Value = "Notizen"  


'Spaltenüberschriften fett  
.Rows("1:1").Font.Bold = True  

'Outlook-Kontakte nach Excel übertragen  
intRow = 2

For Each itmContacts In itmReal
    If (itmContacts.CompanyName <> "") Then  
        .cells(intRow, 1).Value = itmContacts.CompanyName
        '.cells(intRow, 2).Value = itmContacts.LastName  
        '.cells(intRow, 3).Value = itmContacts.FirstName  
        .cells(intRow, 2).Value = itmContacts.BusinessAddressPostalCode
        .cells(intRow, 3).Value = itmContacts.BusinessAddressCity
        .cells(intRow, 4).Value = itmContacts.BusinessAddressStreet
        .cells(intRow, 5).Value = itmContacts.BusinessAddressCountry
        .cells(intRow, 6).Value = itmContacts.BusinessTelephoneNumber
        .cells(intRow, 7).Value = itmContacts.BusinessFaxNumber
        .cells(intRow, 8).Value = itmContacts.BusinessHomePage
        .cells(intRow, 9).Value = itmContacts.Email1Address
        .cells(intRow, 10).Value = itmContacts.CustomerID
        '.cells(intRow, 11).Value = itmContacts.im  
        
        intRow = intRow + 1
    End If


Next itmContacts

'Optimale Spaltenbreite  
.Columns.AutoFit
End With

'Excel einblenden  
excApp.Visible = True

'Speicher freigeben  
Set itmReal = Nothing
Set itmAll = Nothing
Set folMapi = Nothing
Set nspMapi = Nothing
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing

End Sub


Gruss,
Dani

Content-Key: 89697

Url: https://administrator.de/contentid/89697

Printed on: April 25, 2024 at 22:04 o'clock

Member: bastla
bastla Jun 12, 2008 at 20:39:07 (UTC)
Goto Top
Hallo Dani!

Leider habe ich nur für (das vermutlich kleinste) Problem 3 einen Tipp:
For i = 7 To 12
    With .Cells(1, 1).CurrentRegion.Borders(i)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
Next
Damit wird über den gesamten Datenbereich ein einfaches Gitternetz gelegt.

Grüße
bastla
Member: Dani
Dani Jun 12, 2008 at 20:54:39 (UTC)
Goto Top
Hi bastla,
besser wir gar nicht... face-wink

Ich habe die paar Zeilen gerade in meinem Outlook in den VBA-Editor kopiert. Jedoch erhalte ich die Meldung, dass "xlContinuous" nicht definiert ist. <grübel>


Gruss,
Dani
Member: bastla
bastla Jun 12, 2008 at 20:59:59 (UTC)
Goto Top
Hallo Dani!

Sorry - habe ich zu ersetzen vergessen face-sad (Outlook kennt natürlich keine Excel-VBA-Konstanten).

Nimm für "xlContinuous" den Wert 1 und für "xlThin" den Wert 2 (oder lege Konstante mit diesen Werten fest, um den Code lesbarer zu halten).

Grüße
bastla
Member: Dani
Dani Jun 12, 2008 at 21:17:58 (UTC)
Goto Top
Hi bastla,
also da passt noch was nicht....er zeigt mir auch "With..." als Error an ("Sub oder Function nicht definiert").

An welcher Position genau, soll ich die 5 Zeilen einfügen. Vllt liegts daran..


Gruss,
Dani
Member: bastla
bastla Jun 12, 2008 at 21:24:35 (UTC)
Goto Top
Hallo Dani!

Füge den Code zwischen den Zeilen 81 und 82 ein (und setze vor "Cells ..." noch einen Punkt - den trage ich oben auch noch nach).

Grüße
bastla
Member: Dani
Dani Jun 12, 2008 at 21:30:28 (UTC)
Goto Top
Ok, die Stelle hat gepasst. Aber auf den Punkt bin ich nicht gekommen. face-sad Funktioniert.... Danke!

Hier noch der Nachtrag für die beiden anderen Probleme:
        .Cells(intRow, 11).Value = itmContacts.User1
        .Cells(intRow, 12).Value = itmContacts.Body
Es gibt noch 4 standardmäßig vorhandene Benutzerdefinierte Felder und die Notizen findet man unter "Body". Naja, M$ eben...


Danke für deine Zeit. face-smile


Gruss,
Dani
Member: Aenex77
Aenex77 Jun 13, 2008 at 07:41:11 (UTC)
Goto Top
Vielleicht noch ein kleiner Hinweis, wenn man Openoffice hat kann man über Base direkt das Outlook Adressbuch als Datenbankquelle einbinden. Dort sieht man dann auch die Feldbezeichner sämmtlicher Einträge....

Gruss Andreas