Anzeige
Archiv - Navigation
1236to1240
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe, hier stimmt was nicht! Out-Kontakt-Export

Hilfe, hier stimmt was nicht! Out-Kontakt-Export
KLE
Hallo,
...ich komme nicht weiter und brauch dringend eure Hilfe!
Ich habe ein Liste in Excel mit Kontaktdaten. DIese möchte ich gern als Kontakte in mein Outlook exportieren.
Dafür nutze ich den unten stehenden Code.
Es funktioniert perfekt, wenn es darum geht - Kontakte in einen neuen Ordner zu packen im Outlook. Aber wenn da schon Kontakte drin stehen - arbeitet er zwar, aber in Outlook werden KEINE Kontakte angelegt?
Es ist sogar so, dass z.B. bei einem Export von 1000 Kontakten in einen Out-Kontakt-Ordner, wo 20 bereits drin sind - das Tool am Ende zwar sagt, es habe 1000 aktualisiert - aber in Outlook immer noch nur die 20 stehen?!?
Es muss also im Code ein Fehler sein, bei der Prüfung ob ein Kontakt schon drin steht oder nicht. Denn Excel scheint ja alle 1000 in dem Ordner mit 20 gefunden zu haben ?!? WIe sonst kann er sie alle aktualisiert haben ?!?
Leider habe ich keine Ahnung, woran es liegen könnte...daher brauche ich EURE Hilfe, muss es bis morgen Früh behoben haben - sagt Cheffe!!!
Vielen Dank und Gruß an Euch alle, meine Helden des Forums ;o)
Kay
Hier der Code aus der Userform, wo der User die Kontakte auswählen kann, welche exportiert werden sollen:
' ausgewählte Kontakte als Outlook-Kontaktkarte speichern/nach Outlook exportieren

Private Sub Out2Export()
Dim objNameSpace As Object
Dim objMyFolder
Dim objMapiFolder
Dim objItems
Dim objMyOutCon
Dim booFind As Boolean
Dim strBody As String
' Frage an User
antwort = MsgBox("Alle ausgewählten Kontakte nach Outlook exportieren!", vbYesNo, "Outlook- _
Export")
If antwort = vbNo Then Exit Sub
' Daten aus arrKO in einzelne Kontakte übertragen
' Outlook-Ordner definieren / User trifft Entscheidung per Abfrage
Set objOutlook = CreateObject("Outlook.Application")
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objMapiFolder = objNameSpace.GetDefaultFolder(10)
Set objMyFolder = olMAPI.GetNamespace("MAPI").PickFolder() ' User sucht den Ordner in Outlook    _
_
_
selbst aus.
Set objItems = objMapiFolder.Items
If objMyFolder Is Nothing Then GoTo Ende
' Schleife über alle ausgewählten Kontakte - um alle Infos in ein Array zu packen
With wksDBK
k = UBound(arrK())
ReDim arrKO(k, 29)
If k = 0 Then
MsgBox "Für diesen Export, liegen keine Kontakt-Zuordnungen vor!", vbOKOnly, "Leerer  _
Export"
GoTo Ende
Else
x = 0
i = 0
a = 0
z = 0
m = 0
O = 0
p = 0
' Statusleiste einstellen
PBMax = k
If PBMax = 0 Then PBMax = 1
objPBStatus.Min = 0
objPBStatus.Max = PBMax
'Datenarray für Listeneinträge aus DBK
For m = 0 To k - 1 ' alle KIDs
txtKID = arrK(m) ' auslesen des KIDs
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row ' Suche in DBK
If .Cells(i, 2).Value = VBA.CDbl(txtKID) Then
'ReDim Preserve arrKO(1 To x, 29)  ' Outlook-Kontakte einlesen incl. aller Daten
arrKO(x, 0) = .Cells(i, 2).Value      ' KID
arrKO(x, 1) = .Cells(i, 4).Value      ' Title
arrKO(x, 2) = .Cells(i, 7).Value      ' FirstName
arrKO(x, 3) = .Cells(i, 8).Value      ' LastName
arrKO(x, 4) = .Cells(i, 5).Value      ' JobTitle
arrKO(x, 5) = .Cells(i, 10).Value     ' CompanyName
arrKO(x, 6) = .Cells(i, 6).Value      ' Department
arrKO(x, 7) = .Cells(i, 12).Value     '.BusinessAddressStreet
arrKO(x, 8) = .Cells(i, 15).Value     '.BusinessAddressPostalCode
arrKO(x, 9) = .Cells(i, 16).Value     '.BusinessAddressCity
' ZI - info
y = 0
For y = 2 To wksDBZI.Cells(Rows.Count, 1).End(xlUp).Row
If wksDBZI.Cells(y, 3).Value = VBA.CDbl(txtKID) Then
arrKO(x, 10) = wksDBZI.Cells(y, 19).Value    '.BusinessAddressState
GoTo Stepp2
End If
Next y
Stepp2:
arrKO(x, 11) = .Cells(i, 14).Value    '.BusinessAddressCountry
arrKO(x, 12) = .Cells(i, 17).Value    '.BusinessTelephoneNumber
arrKO(x, 13) = .Cells(i, 18).Value    '.Business2TelephoneNumber
arrKO(x, 14) = .Cells(i, 21).Value    '.BusinessFaxNumber
arrKO(x, 15) = .Cells(i, 19).Value    '.MobileTelephoneNumber
arrKO(x, 16) = "Firmen-Kontakt"     '.Categories
arrKO(x, 17) = .Cells(i, 24).Value    '.BusinessHomePage
arrKO(x, 18) = .Cells(i, 23).Value    '.Email1Address
arrKO(x, 19) = .Cells(i, 9).Value     '.Birthday
' Privat-Info
e = 0
For e = 2 To wksDBP.Cells(Rows.Count, 1).End(xlUp).Row
If wksDBP.Cells(e, 3).Value = VBA.CDbl(txtKID) Then
arrKO(x, 20) = wksDBP.Cells(i, 4).Value     '.HomeAddressStreet =  _
objTBPStrasse.Text
arrKO(x, 21) = wksDBP.Cells(i, 7).Value     '.HomeAddressPostalCode =    _
_
_
objTBPPLZ.Text
arrKO(x, 22) = wksDBP.Cells(i, 8).Value     '.HomeAddressCity =  _
objTBPOrt.Text
arrKO(x, 23) = wksDBP.Cells(i, 6).Value     '.HomeAddressCountry =  _
objTBPLand.Text
arrKO(x, 24) = wksDBP.Cells(i, 11).Value    '.HomeFaxNumber = objTBPFax. _
_
_
Text
arrKO(x, 25) = wksDBP.Cells(i, 9).Value     '.HomeTelephoneNumber =  _
objTBPTel.Text
arrKO(x, 26) = wksDBP.Cells(i, 10).Value    '.OtherTelephoneNumber =  _
objTBPMob.Text
arrKO(x, 27) = wksDBP.Cells(i, 12).Value    '.Email2Address =  _
objTBPEmail.Text
arrKO(x, 28) = wksDBP.Cells(i, 14).Value    '.AddPicture (objLPPfad. _
Caption)
' Sonstiger Platzhalter (Body)
arrKO(x, 29) = ""                     '.Body = strBody
GoTo Stepp3
End If
Next e
Stepp3:
x = x + 1
' Statusleiste anzeigen
objPBStatus.Value = x
GoTo Stepp4
End If
Next i
Stepp4:
Next m
End If
End With
' Start des Exports / Ablegen, Bearbeiten der Kontakte
' Über alle Einträge des Arrays
u = 0
t = 0
x = 0
For O = 0 To UBound(arrKO) - 1
' Statusleiste einstellen
PBMax = O
If PBMax = 0 Then PBMax = 1
objPBStatus.Min = 0
objPBStatus.Max = PBMax + 1
Set objItems = objMyFolder.Items
' Einträge vorher sortieren (schneller)
objItems.Sort "[Name]"
objItems.IncludeRecurrences = True
' Prüfen, ob Datensatz schon vorhanden, Wenn ja - Bearbeiten, sonst Neu erstellen
'  Code von Tino
Set objItems = objItems.Restrict("[Nachname] = '" & arrKO(O, 3) & "'")
'Schleife durch alle Kontakte bis Vor und Nachname und Firma übereinstimmen
For Each objItems In objItems
With objItems
If (.LastName & .FirstName & .CompanyName) = (arrKO(O, 3) & arrKO(O, 2) & arrKO(O, 5))   _
_
_
Then
booFind = True
Exit For
End If
End With
Next objItems
If booFind Then
With objItems
On Error Resume Next
.Title = arrKO(x, 1)
.FirstName = arrKO(x, 2)
.LastName = arrKO(x, 3)
.JobTitle = arrKO(x, 4)
.CompanyName = arrKO(x, 5)
.Department = arrKO(x, 6)
.BusinessAddressStreet = arrKO(x, 7)
.BusinessAddressPostalCode = arrKO(x, 8)
.BusinessAddressCity = arrKO(x, 9)
.BusinessAddressState = arrKO(x, 10)
.BusinessAddressCountry = arrKO(x, 11)
.BusinessTelephoneNumber = arrKO(x, 12)
.Business2TelephoneNumber = arrKO(x, 13)
.BusinessFaxNumber = arrKO(x, 14)
.MobileTelephoneNumber = arrKO(x, 15)
.Categories = arrKO(x, 16)
.BusinessHomePage = arrKO(x, 17)
.Email1Address = arrKO(x, 18)
' Private Daten
.HomeAddressStreet = arrKO(x, 19)
.HomeAddressPostalCode = arrKO(x, 20)
.HomeAddressCity = arrKO(x, 21)
.HomeAddressCountry = arrKO(x, 22)
.HomeFaxNumber = arrKO(x, 23)
.HomeTelephoneNumber = arrKO(x, 24)
.OtherTelephoneNumber = arrKO(x, 25)
.Email2Address = arrKO(x, 26)
.Birthday = arrKO(x, 27)
If arrKO(x, 28)  "" Then .AddPicture (arrKO(x, 28))
' Sonstiges
.Body = arrKO(x, 29)
' Speichern
.Save
End With
u = u + 1
Else
' Kontakt neu anlegen
Set objMyOutCon = objMyFolder.Items.Add(2)
With objMyOutCon
On Error Resume Next
.Title = arrKO(x, 1)
.FirstName = arrKO(x, 2)
.LastName = arrKO(x, 3)
.JobTitle = arrKO(x, 4)
.CompanyName = arrKO(x, 5)
.Department = arrKO(x, 6)
.BusinessAddressStreet = arrKO(x, 7)
.BusinessAddressPostalCode = arrKO(x, 8)
.BusinessAddressCity = arrKO(x, 9)
.BusinessAddressState = arrKO(x, 10)
.BusinessAddressCountry = arrKO(x, 11)
.BusinessTelephoneNumber = arrKO(x, 12)
.Business2TelephoneNumber = arrKO(x, 13)
.BusinessFaxNumber = arrKO(x, 14)
.MobileTelephoneNumber = arrKO(x, 15)
.Categories = arrKO(x, 16)
.BusinessHomePage = arrKO(x, 17)
.Email1Address = arrKO(x, 18)
' Private Daten
.HomeAddressStreet = arrKO(x, 19)
.HomeAddressPostalCode = arrKO(x, 20)
.HomeAddressCity = arrKO(x, 21)
.HomeAddressCountry = arrKO(x, 22)
.HomeFaxNumber = arrKO(x, 23)
.HomeTelephoneNumber = arrKO(x, 24)
.OtherTelephoneNumber = arrKO(x, 25)
.Email2Address = arrKO(x, 26)
.Birthday = arrKO(x, 27)
If arrKO(x, 28)  "" Then .AddPicture (arrKO(x, 28))
' Sonstiges
.Body = arrKO(x, 29)
' Speichern
.Save
End With
t = t + 1
Set objMyOutCon = Nothing
Set objOutlook = Nothing
End If
x = x + 1
' Statusleiste anzeigen
objPBStatus.Value = x
Next O
' Temporäre Zuweisungen wieder löschen
Set objNameSpace = Nothing
Set objMapiFolder = Nothing
Set objMyFolder = Nothing
Set objItems = Nothing
MsgBox "" & u & " Kontakte wurden aktualisiert." & VBA.Chr(13) & _
VBA.Chr(13) & t & " Kontakte wurden Neu angelegt.", vbOKOnly, "Outlook-Kontakt"
objPBStatus.Visible = False
Ende:
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Hilfe, hier stimmt was nicht! Out-Kontakt-Export
23.11.2011 14:56:05
Kawensmann
Hallo,
wow, was für ein Moloch ... :)
Was mir aufgefallen ist: booFind wird nicht auf False zurück gesetzt.
Und als Tipp: Benutz "Option explicit" und deklariere deine Variablen vernünftig.
Gruß
Kawensmann
AW: Hilfe, hier stimmt was nicht! Out-Kontakt-Export
23.11.2011 20:50:31
Luschi
Hallo KLE,
in diesem Programm werden viele wichtige Variablen verwendet, die in diesem Vba-Code nicht definiert sind:
- wksDBZI, arrK() u.s.w.
Wenn der User per 'PickFolder()' das Outlook-Verzeichnis wählen darf, dann muß man hinterher sofort prüfen, ob er auch 1 Verzeichnis mit dem richtigen Typ (hier Kontakte) gewählt hat.
Die eigentlichen Fehler beginnen nach dieser Vba-Zeile:
Set objItems = objMyFolder.Items
Hier werden alle Kontakte des ausgewählten Kontaktverzeichnissen als Objektvariable definiert und ist auch OK.
Diese Zeile (objItems.IncludeRecurrences = True) ist Asche, da diese Eigenschaft für die wiederkehrenden Termine vorgesehen ist.
1. großer Fehler:
Set objItems = objItems.Restrict("[Nachname] = '" & arrKO(O, 3) & "'")
Die oben definierte Objektvariable (alle Kontakte mit allen Eigenschaften) wird eingeschränkt auf alle Kontakte mit nur noch der 1 Eigenschaft 'Nachname'. Hier muß eine neue Objektvariable her.
2. großer Fehler:
For Each objItems In objItems
Lauf-Objekt-Variable und Durchsuchungs-Objekt-Variable haben gleiche Bezeichnung.
Warum das hier nicht schon mächtig knallt, wissen wahrscheinlich nur die M$-Entwickler selbst.
Es gibt noch einige Sachen, die nicht sauber definiert sind; aber der 1. Fehler in Kombination mit der 'On Error Resume Next'-Anweisung macht das Kraut fett und gaukelt vor, in einem schon vorhandenen Kontakte-Ordner jeden Kontakt aus der Excelliste gefunden zu haben. So werden alle Excel-Kontakte durchlaufen, aber On Error verhindert, das was passiert.
So, nun habe ich genug kritisiert. Wenn Du eine Excel-Liste mit ein paar Kontaktdaten, aber mit allen benutzten Feldern, hier bereitstellts, öffne ich mein Vba-Programmier-Handbuch für Outlook 2007 und helfe Dir gerne.
Gruß von Luschi
aus klein-Paris
Das Problem mit dem Kontextmenü bei Formular-Textboxen schau ich mir auch noch mal an.
Anzeige
Danke für die ausführliche "Kritik" ;o)
23.11.2011 21:07:26
KLE
Hallo Luschi,
...vielen Dank an dieser Stelle für Deine ausführlichen Hinweise. Werde mir alles in Ruhe reinziehen und "lernen". Ich bin leider noch Meilen entfernt, da ich nur Kreativ bastle bisher und keinen Anspruch auf Programmierung erhebe.
Ich nutze zwar viele Codes u.a. hier aus dem Forum, daher auch die "unnützen" Zeilen mitunter, da ich - solange ich bestimmte Detail noch nicht kenne und es nicht Fehlerhaft aufpopt, diese einfach drin lasse.
Gern würde ich intensiv mehr erfahren von einem Profi, da ich das meiste in den Büchern die ich mir besorgt habe (M&T) nicht wirklich beschrieben wird. Viele ideen, aber warum und wieso bestimmte Codezeilen so sind, steht meist nicht drin.
Auch finde ich nicht immer alles im Netz oder der Online-Hilfe von VBA...
Wo genau liegt eigentlich "klein-Paris"...würde Dich ggf. zum Kaffee einladen ;o) als Dankeschön!
Achso, sprichst Du von dem MicroSoftPress-Buch ?
Gruß und danke!
Kay
Anzeige
Danke! ;o)
23.11.2011 20:57:54
KLE
Hi,
...vielen Dank. Eigentlich hätte es mir auch auffallen müssen.
Habe es geändert und jetzt klappt es perfekt. ;o)
Zum Thema Variablen - habe ich in Option explicit gehabt, da gab es eine Fehlermeldung - das eine Variable wohl NICHT Bekannt sei - obwohl es ja oben definiert wurde. Daraufhin habe ich es nun in der Prozedur wieder drin...
Was das aufräumen anbelangt...ich lerne noch und schreibe daher alles ausführlich und nicht immer "optimal"... hoffe es kommt dann im nächsten Jahr, wenn ich mir sicherer bin, wie bestimmte Dinge laufen...
Aber ich bin Dir zu Dank verpflichtet, dass Du Dir die Mühe und Zeit genommen hast - Danke!
Gruß
Kay
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige