13martin37
Goto Top

Kann Outlook mit zu vielen Kontakten nicht umgehen?

Hi Jungz (und mädelz)!

stehe vor einem unverständlichen Problem =)
Hab ein programm in VBA geschrieben, das super funktioniert, wenn ich nur so ca 10-40 Kontakte habe.
Sobald ich aber weitere Kontakte in den Kontaktordner stecke, sieht Outlook schwarz.
Erstmal: Was macht mein Programm? Es gleicht die Emailadresse aus einer Textdatei mit allen Kontakten ab und findet es eine Übereinstimmung, verändert es einen Wert des Kontakts.
Was macht das Programm ab 100 Kontakten nicht mehr?
Ab dem 3. oder 4. Abgleich (die alle noch korrekt funktionieren) findet das Programm keine der emailadressen mehr, obwohl diese in den Kontakten zu finden sind.

Ich hab leider keine Ahnung, was das Problem ist. Zu wenig RAM? Kann ja wohl nicht sein. Variablen begrenzt? Kann ich mir auch nicht vorstellen.
Um Hilfe wäre ich sehr dankbar!

Der ursprüngliche Thread mit Fragestellung von Programmcode
Abgleich von Outlookkontaktfeldern mit einer externen Datei

Hier noch der Programmcode:

Private Sub CommandButton1_Click()
Dim Kontakt As ContactItem
Dim eMailAdresse As String
Dim i As Integer
On Error Resume Next

Open "U:\Outlook\Abmeldungen.txt" For Input As #1
For i = 0 To 30
Line Input #1, eMailAdresse
MsgBox eMailAdresse + " wird gesucht!"

For Each Kontakt In Session.GetDefaultFolder(olFolderContacts).Items
If Kontakt.Email1Address = eMailAdresse Then
MsgBox Kontakt.LastNameAndFirstName + " mit der Emailadresse " + eMailAdresse + " gefunden" + vbCr + "Markierung entfernt!"
Kontakt.UserProperties("News").Value = False
Kontakt.Save
End If
Next
Next

Close #1
MsgBox "Aufgabe erledigt"
Unload Me
End Sub

Content-ID: 106875

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

Ausgedruckt am: 17.11.2024 um 07:11 Uhr

Trax83
Trax83 26.01.2009 um 16:50:16 Uhr
Goto Top
Hallo 13martin37,

bin kein VBA Specialist, aber mit for each rennst du ja durch jedes Object innerhalb eines "Arrays". Kann es sein, dass er dir an der stelle immer resigniert?

würde an deiner stelle auch nicht stupide jeden Kontakt einmal öffnen um mir die Email anzusehen....

folder = namespace.GetDefaultFolder(olFolderContacts)
filter = "[Email1Address] LIKE 'max@mustermann.de'"
searchfolder = folder.Items.Restrict(filter)
anzahl = searchfolder.Count
if anzahl > 0 then
for i = 1 to anzahl do
folderobject := searchfolder.Item(i)
folderobject.ItemProperties.Item("News").value = False
folderobject.save
next
end if


vielleicht gehts so besser....


PS.: Outlook kann mit einigen Kontakten mehr als 100 umgehen. wir verwenden einen öffentlichen Ordner dafür mit mittlerweile 200.000 ContactItems. Jedoch wird die ganze Sache dann sehr langsam.
13martin37
13martin37 29.01.2009 um 14:35:07 Uhr
Goto Top
dein tip war super. hatte zwar paar fehler. aber die richtung war sehr hilfreich.
mein neuer code schaut so aus:

Open "U:\Outlook\Abmeldungen.txt" For Input As #1
For i = 0 To 8
Line Input #1, eMailAdresse
eMailAdresse = "ma.x@mustermann.de"
MsgBox eMailAdresse & " wird gesucht!"
Set objContact = objContacts.Items.Find("[Email1Address] = " & eMailAdresse & "")
If Not TypeName(objContact) = "Nothing" Then
MsgBox "Name: " & objContact.LastNameAndFirstName & vbCr & "Wert: " & objContact.UserProperties("News").Value
End If
Next

Leider funktionierts immer noch nicht komplett, denn:
Ich hab regelmäßig einen schönen Laufzeitfehler (Laufzeitfehler -71172087(fbc20009): Bedingung kann nicht geparst werden. Fehler bei "@musterman".

Passiert in folgender Zeile:
Set objContact = objContacts.Items.Find("[Email1Address] = " & eMailAdresse & "")

Aber nur wenn die eMailAdresse einen Punkt (vor dem Klammeraffen) beinhaltet.
Die Suche nach max@mustermann.de liefert keinen Fehler.
Aber die Suche nach m.ax@mustermann.de oder ma.x@mustermann.de hingegen den oben genannten Laufzeitfehler.
13martin37
13martin37 29.01.2009 um 14:57:48 Uhr
Goto Top
gelöst...
Set objContact = objContacts.Items.Find("""[Email1Address] = " & eMailAdresse & """")
Zu wenig Anführungsstriche...
Trax83
Trax83 30.01.2009 um 10:47:46 Uhr
Goto Top
super,

sorry für die Fehler...war auf die schnelle aus delphi nach vba umgedichtet...

mfg
Trax83