Visual Basic mit Outlook/Excel (Kontakte exportieren/importieren)

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Adde.

    Visual Basic mit Outlook/Excel (Kontakte exportieren/importieren)

    Ich habe mir in Visual Basic ein Script, in eigen Arbeit und mit Hilfe des Internets geschrieben, welches gespeicherte Kontakte in eine Excel Tabelle schreibt und diese nun auch wieder nach Outlook importieren können soll.
    Jedoch gibt Visual Basic beim Debuggen folgende Warnung aus :NullReferenceException nicht behandelt.

    Die Objektvariable oder die With-Blockvariable wurde nicht festgelegt.

    (Die Warnung erfolgt in dieser Zeile (139):

    VB.NET-Quellcode

    1. Contact.itemProperties.Item(Excel.cells(1, i).Value).Value = Excel.cells(j, i).Value
    )

    Hat jemand einen Tipp oder vielleicht sogar die Lösung ?

    Hier nun der bisherige Quelltext:

    ~entfernt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adde“ ()

    Adde schrieb:

    Contact.itemProperties.Item(Excel.cells(1, i).Value).Value = Excel.cells(j, i).Value

    Das kann ja auch nicht funktionirem. Excel kenn ja auch keine Zellen.
    Nur ein Worksheet kennt Zellen.

    Du solltest Dich mal etwas intensiver mit den Objekt-Modellen der Office-Produkte auseinander setzen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Weshalb versteifst Du Dich auf VB.Net? Hier mal ein einfaches Beispiel für Outlook-VBA. Es wird nicht geprüft ob die Einträge schon in der Tabelle vorhanden sind. Ein Verweis auf die Excel-Object-Library setzen.

    VB.NET-Quellcode

    1. Public Sub ExcelTest()
    2. Dim objXLApp As Excel.Application
    3. Dim objXLWB As Excel.Workbook
    4. Dim lngLastRow As Long
    5. Dim lngContactsCount As Long
    6. Dim olApp As Outlook.Application
    7. Dim olName As Outlook.NameSpace
    8. Dim olFolder As Outlook.MAPIFolder
    9. Set olApp = Application
    10. Set olName = olApp.GetNamespace("MAPI")
    11. Set olFolder = olName.GetDefaultFolder(olFolderContacts)
    12. Set objXLApp = New Excel.Application
    13. With objXLApp
    14. .Visible = True
    15. Set objXLWB = .Workbooks.Open(Environ("USERPROFILE") & "\Desktop\Test.xlsb")
    16. lngLastRow = .Workbooks("Test.xlsb").Sheets("Tabelle1").Range("A" & Rows.Count).End(xlUp).Row
    17. For lngContactsCount = 1 To olFolder.Items.Count
    18. .ActiveWorkbook.Sheets("Tabelle1").Range("A" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).LastName
    19. .ActiveWorkbook.Sheets("Tabelle1").Range("B" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).FirstName
    20. .ActiveWorkbook.Sheets("Tabelle1").Range("C" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).MobileTelephoneNumber
    21. .ActiveWorkbook.Sheets("Tabelle1").Range("D" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).HomeTelephoneNumber
    22. .ActiveWorkbook.Sheets("Tabelle1").Range("E" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).BusinessTelephoneNumber
    23. .ActiveWorkbook.Sheets("Tabelle1").Range("F" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).Email1Address
    24. .ActiveWorkbook.Sheets("Tabelle1").Range("G" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).BusinessAddressCity
    25. .ActiveWorkbook.Sheets("Tabelle1").Range("G" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).BusinessAddressStreet
    26. .ActiveWorkbook.Sheets("Tabelle1").Range("H" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).BusinessAddressPostalCode
    27. .ActiveWorkbook.Sheets("Tabelle1").Range("I" & lngLastRow + lngContactsCount).Value = olFolder.Items(lngContactsCount).BusinessAddressCountry
    28. Next lngContactsCount
    29. ' .ActiveWorkbook.Save
    30. ' .ActiveWorkbook.Close
    31. ' .Quit
    32. End With
    33. End Sub

    Aber könnte man diesen Code nicht einfach für VB.NET umschreiben ? Weil ich mich lediglich mit VB.NET näher auseinandergesetzt habe und gerne eine Anwendung auf dem Desktop hätte mit der man sowohl den Ex- als auch den Import vornehmen kann

    Adde schrieb:

    Aber könnte man diesen Code nicht einfach für VB.NET umschreiben ? Weil ich mich lediglich mit VB.NET näher auseinandergesetzt habe und gerne eine Anwendung auf dem Desktop hätte mit der man sowohl den Ex- als auch den Import vornehmen kann


    Der Code von Mumpel sollte eigentlich auch unter VB.Net laufen. Du musst natürlich den Verweis auf Outlook und Excel gesetzt haben und in der Klasse oder Module importiert haben.
    Die einzige Anpassung, die ich auf die Schnelle sehe, die gemacht werden muss ist, dass Set weg zulassen.
    GGf. änderst Du auch noch dies um:
    CreateObject("Com.Object.Name") - .NET: System.Activator.CreateInstance(System.Type.GetTypeFromProgID("Com.Object.Name"))
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).