Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Kontakt aus Access nach Outlook

Begonnen von Berlin-Lackierung.de, September 07, 2016, 09:37:28

⏪ vorheriges - nächstes ⏩

Berlin-Lackierung.de

Ich weiß dass dieses Thema bereits des Öfteren hier angesprochen wurde, jedoch stehe ich gerade (mal wieder) völlig auf dem Schlauch. Vielleicht liegt es auch daran, dass ich in den letzten Tagen zu viel Codes gesehen und geschrieben habe.

Problem:
Ich exportiere die Kontaktdaten nach Outlook - soweit alles gut, jedoch wenn eines der Felder (z.B. Me.Abteilung) leer ist, dann funktioniert das Ganze nicht mehr. Also bräuchte ich hier eine kleine Hilfestellung für eine Abfrage die die leeren Felder umgeht/ignoriert.
Das nächste ist, dass ich noch eine Abfrage bräuchte die feststellt wenn der kontakt bereits in Outlook vorhanden ist - und dies entsprechend meldet und den Code beendet.
Ich weiß dass dies banale Fragen sind, aber mein Kopf ist leer und ich muss diese Datenbank zu Ende bringen.
Also Danke im Voraus für Eure Hilfe :D

Dim MyOutlook As Outlook.Application
            Dim KontaktOutlook As Outlook.ContactItem
            Set MyOutlook = CreateObject("Outlook.Application")
            Set KontaktOutlook = MyOutlook.CreateItem(olContactItem)
            With KontaktOutlook
                .FirstName = Me.Vorname
                .LastName = Me.Text24 'Bezeichnung aus HF
                .BusinessTelephoneNumber = Me.Telefon
                .BusinessFaxNumber = Me.Fax
                .Email1Address = Me.txtEMail
                .Department = Me.Abteilung
                .CompanyName = Me.Text25 'Bezeichnung aus HF
                .Save
            End With
            Set KontaktOutlook = Nothing
            Set MyOutlook = Nothing
,,Bei einem Fußballspiel verkompliziert sich alles durch die Anwesenheit der gegnerischen Mannschaft." - Jean Paul Sartre

bahasu

Hallo,

vielleicht hilft Dir:
.Department = nz(Me.Abteilung,"")

Harald
Servus

Berlin-Lackierung.de

#2
Super :D hat geklappt (auf die einfachsten Dinge...)


Jetzt benötige ich nur noch die Abfrage, ob der Kontakt bereits vorhanden ist :D
,,Bei einem Fußballspiel verkompliziert sich alles durch die Anwesenheit der gegnerischen Mannschaft." - Jean Paul Sartre

bahasu

Moin,

Zitat von: Berlin-Lackierung.de am September 07, 2016, 10:39:16
Jetzt benötige ich nur noch die Abfrage, ob der Kontakt bereits vorhanden ist :D

Ist die Abfrage das Problem oder das Zugreifen auf die Kontaktdaten?

Kontaktdaten sind erreichbar via Verknüpfung (unter access2003: Datei > externe Daten > Tabellen verknüpfen: Dateityp=Outlook() > Kontakte)

Das Prüfen auf Vorhandensein der Kontaktdaten sollte dann mit den Stichworten recordset, findfirst und nomatch umsetzbar sein (Oder ist genau das der Gegenstand Deiner Frage?).

Harald
Servus

Berlin-Lackierung.de

Genau das ist meine Frage gewesen.
Da ich ja von Access nur einzelne Kontakte nach Outlook schicke, bräuchte ich eine Abfrage, ob dieser Kontakt bereits in Outlook besteht. Ich importiere ja keine Kontakte nach Access - bzw. brauche keine verknüpfte Tabelle.
Also vom Prinzip wäre die FindFirst - Methode die Richtige, jedoch mit dem Risiko, dass 2 Personen den selben Namen haben :(
Eigentlich wäre optimal, wenn eine Abfrage prüft ob der Name mit Vornamen und Telefonnummer bereits vorhanden ist.
,,Bei einem Fußballspiel verkompliziert sich alles durch die Anwesenheit der gegnerischen Mannschaft." - Jean Paul Sartre

bahasu

Moin,

als Anregung für eigene Versuche:

Option Compare Database
Option Explicit


Private Sub Von_access_nach_outlook_Click()
    Dim MyOutlook As Outlook.Application
    Dim KontaktOutlook As Outlook.ContactItem
           
           
    If fDaten_nicht_vorhanden(Me.Vorname, Me.Nachname) Then
        Set MyOutlook = CreateObject("Outlook.Application")
        Set KontaktOutlook = MyOutlook.CreateItem(olContactItem)
           
        With KontaktOutlook
            .FirstName = Me.Vorname
            .LastName = Me.Nachname
           
            .BusinessTelephoneNumber = Me.Telefon
            .BusinessFaxNumber = Me.Fax
            .Email1Address = Me.txtEMail
            .Department = Me.Abteilung
            .CompanyName = Me.Text25 'Bezeichnung aus HF
       
            .Save
        End With
           
        Set KontaktOutlook = Nothing
        Set MyOutlook = Nothing

        MsgBox "Daten hinzugefügt"
   
    Else
        MsgBox "Daten sind vorhanden"
    End If
End Sub


Private Function fDaten_nicht_vorhanden(Vorname, Nachname As String) As Boolean
    Dim rs As DAO.Recordset
   
    Set rs = CurrentDb.OpenRecordset("Kontakte")
   
    rs.FindFirst "Vorname= '" & Vorname & "' and Nachname = '" & Nachname & "'"
    fDaten_nicht_vorhanden = rs.NoMatch
   
    rs.Close
    Set rs = Nothing
End Function


Die Such-Funktion kann erweitert werden, um z.B. sicherzustellen, dass bei mehrfachem Vorkommen von Vorname, Nachname auch die richtige Person gefunden wird.

CurrentDb.OpenRecordset("Kontakte") greift mit einer zuvor beschriebenen Verknüpfung auf die Outlook-Kontakt-Daten zu.

Harald
Servus

Berlin-Lackierung.de

So, hat ge´klappt - also zwar nicht so wie ich es wollte, jedoch das Ergebnis ist erst mal nicht schlecht.

Problem:
Es werden immer alle Adressen nach Outlook geschickt (damit kann ich einigermaßen leben), jedoch Änderungen werden bei einer neuen Übertragung nicht verarbeitet.

Beispiel:
Ich füge eine Fax - Nummer hinzu, diese wird jedoch nicht übernommen  ???

Vielleicht hat dafür einer noch ne Lösung - dann wäre auch dieses Thema komplett :D
,,Bei einem Fußballspiel verkompliziert sich alles durch die Anwesenheit der gegnerischen Mannschaft." - Jean Paul Sartre

bahasu

Moin,

bei meiner Test-Umgebung habe ich im Formular einen neuen Button angelegt, der beim Klick-Ereignis die folgenden Zeilen enthält:

Private Sub Aendern_Click()
    Dim rs As DAO.Recordset
   
    Set rs = CurrentDb.OpenRecordset("Kontakte")
   
    rs.FindFirst "Vorname= '" & Vorname & "' and Nachname = '" & Nachname & "'"
   
   
    If Not rs.NoMatch Then
        rs.Edit
       
        If Nz(rs![Fax Firma], "") <> Nz(Me.FaxNr, "") Then rs![Fax Firma] = Nz(Me.FaxNr, "")
       
        rs.Update
    End If
   
   
    rs.Close
    Set rs = Nothing
End Sub


Achtung: Der hier verwendet Name entspricht nicht dem, den man z.B. in http://www.msxfaq.de/code/kontaktfelder.htm
findet.

Die Zeilen sollen wie schon zuvor zur Orientierung für eigene Versuche dienen.

Harald
Servus