20. januar 2011 - 10:14Der er
20 kommentarer og 1 løsning
Opdatere kontakter i Outlook fra excel sheet
Kære eksperter,
Her er en der nok er lidt tung.
Jeg har et lille salgssystem i excel (shared workbook), og ønsker, at man kan klikke på en knap og så sendes alle kontaktdata til Outlook, så: - Kontakter der ikke eksisterer i Outlook tilføjes fra Excel - Kontakter, hvor navnet eksisterer i Outlook overskrives med data fra Excel - Kontakter der eksisterer i Outlook, men ikke er på Excel listen forbliver uberørte
' check for existing contact On Error Resume Next Set olContact = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items.Item(strCurrentFirstName & " " & strCurrentLastName)
If Not olContact Is Nothing Then
' CreateItem will create a contact in the default folder Set olContact = olApp.CreateItem(2) ' olContactItem
With olContact .FirstName = strCurrentFirstName .LastName = strCurrentLastName .Email1Address = strCurrentEmailAddr .CompanyName = strCurrentCompany .BusinessTelephoneNumber = strCurrentBusinessPhone .BusinessFaxNumber = strCurrentBusinessFax .HomeTelephoneNumber = strCurrentHomePhone End With
Nu skriver du jo ikke hvad det er der ikke virker, og jeg er ikke specielt skarp på outlooks objektmodel.
Men umiddelbart ser det ikke helt skævt ud, dog indlæser du kun nye kontakter. For eksisterende kontakter gør du jo faktisk ikke noget. Jeg ville umiddelbart prøve at flytte "End If "op før "With olContact" (og så slette den Else der ikke gør noget :)
Jeg får ingen decideret fejl fra koden, men der sker bare ikke det ønskede.
Jeg har prøvet som du siger, og det resulterer i fejlfri gennemgang af koden, men ingen kontakter i Outlook. Det er som om koden aldrig når ned til With sætningen...
Nu har jeg prøvet at lægge nogle msgboxe ind og fjerne "Not", for der sker noget når jeg gør det... Det er klumset, men kan forholde bringe mig videre (koden er nederst)...
Nu kommer følgende beskeder (der er fire navne på excel listen): Not nothing Write Navn 1 Write Navn 2 Navn 2 Write Navn 2 Navn 3 Write Navn 3
Og resultatet er, at Navn 4 er oprettet i Outlook. Jeg er sat af.
' check for existing contact On Error Resume Next Set olContact = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items.Item(strCurrentFirstName & " " & strCurrentLastName)
'BESKED 1: ER DER INDLÆST EN KONTAKT? MsgBox (olContact)
If olContact Is Nothing Then
'BESKED 2: ER KONTAKTEN TOM? MsgBox ("Not nothing")
' CreateItem will create a contact in the default folder Set olContact = olApp.CreateItem(2) ' olContactItem
End If
'DER SKRIVES TIL OUTLOOK MsgBox ("write" & olContact)
With olContact .FirstName = strCurrentFirstName .LastName = strCurrentLastName .Email1Address = strCurrentEmailAddr .CompanyName = strCurrentCompany .BusinessTelephoneNumber = strCurrentBusinessPhone .BusinessFaxNumber = strCurrentBusinessFax .HomeTelephoneNumber = strCurrentHomePhone End With
Men gør den ikke det rigtige? Som jeg læser det, så findes Navn 1-3 allerede som kontaktperson og den har oprettet den fjerde. Det jeg ikke kan se er om der burde være ændret noget for navn 1-3.
Nope, ingen af kontakterne eksisterer i Outlook :/. Og jeg forstår heller ikke hvorfor den smider de to første beskeder. Den burde vel starte med et navn...
Det at den skriver navn 1-3 må betyde at de findes i outlook et eller andet sted - den skriver jo kun navnet hvis den får sat olContact til noget i dette statement:
Umiddelbart ville jeg gætte på at de to første sætninger kom fra indsættelsen af navn 4, som jo ikke var der i forvejen. Hvad gør den med navn 4, hvis du kører det igen, hvor navn 4 jo så eksisterer?
Ok, så... :). Det undrer mig også lidt, at der ikke er nogen der lige smutter forbi her med løsningen? Jeg havde ikke regnet med at det ville være et problem for de hajer der er her inde.
Zimbra - mit navn - Contacts. Det skulle være korrekt :)
Jeg tænker om der sker noget vi ikke kan gennemskue fordi du har sat on error resume next - så fanger du aldrig, når der sker en fejl. Så prøve evt at lave noget anden fejlhåndtering.
Jeg er vist desværre ikke til den store hjælp i dag, så måske du skal lukke her, og så oprette et nyt spørgsmål under Outlook - det kan være der kommer nogle bedre kvalificerede forbi der :o)
Jeg tror jeg har luret det. Problemet er som du skriver den sætning hvor du slår navnet op. olContact bliver ikke nulstillet fordi opslaget fejler når det er en ukendt kontakt, og derfor peger den stadig på den kontakt der lige er blevet indsat. Denne overskrives så med de nye informationer. Derfor er det kun den sidste der ender med at være sat ind.
Så prøv at nulstille olContact før opslaget:
Set olContact = Nothing Set olContact = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items.Item(strCurrentFirstName & " " & strCurrentLastName)
Der håbede jeg sgu lige at du havde den... Nu sker der simpelthen ingenting. Ikke engang en enkelt msgbox. Jeg synes ellers, det løs logisk det du skrev.
Hmmm... meget mystisk - for første den gang den kører igennem bør der jo ikke være nogen forskel ved eksplicit at sætte olContact til Nothing - så den burde jo komme til der hvor den skriver "Not nothing"??? Har du prøvet at steppe igennem stille og roligt med F8, og se hvad olContact bliver sat til?
Det kan jeg godt forstå - jeg har heller ikke fortalt, at jeg havde taget den sætning ud. Jeg gjorde det for netop at registrere hvis der opstod fejl - om jeg så fik en besked om hvad fejlen var.
Skal jeg oprette en ny tråd med 100 ekstra point og lægge den ind her?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.