08. august 2003 - 07:25Der er
17 kommentarer og 1 løsning
Information fra Exchange server in i VBA-kode i Excel.
Hej.
Jeg har for nyligt stillet at spørgsmål der ligner dette en lille smule, men jeg føler ikke rigtig at svaret på sidste spørgsmål ahr været fyldetsgørende nok. Derfor stiller jeg et nyt spørgsmål der er en anelse mere præcist.
Jeg har brug for at få informationer fra en Exchangeserver ind i Excel når jeg kører noget VBA kode fra Excel (2000). De personer jeg ønsker at få information fra har givet mig alle rettigheder til at se i deres kalender.
Et uddrag af min kode ser p.t. således ud:
MyMailGroup = Range("G6")
Set gSession = CreateObject("MAPI.Session")
gSession.Logon "Outlook"
Set addList = gSession.AddressLists("Global Address List") Set addMailList = addList.AddressEntries(MyMailGroup)
CurrentRowValue = 2
For Each addEntry In addMailList.Members iFreeBusyCode = addEntry.GetFreeBusy(Now, DateAdd("n", 1, Now), 1) iFreeNameCode = addEntry.Name(Now, DateAdd("n", 1, Now), 1)
Med ovenstående kode får jeg navn samt denne specielle free/busy code ind der fortæller om den enkeltes "ledighed" p.t. Alt ender, som du jo tyudeligt fremgår, blot i en tabel i Excel.
Jeg er dog ydermere interesseret i at får fat i subject teksten på den appointment den pågældende person har nu, samt hvornår den nuværende appointment hos person x slutter. Hvordan skriver jeg dette ind i koden?
Et lille tillægsspørgsmål:
Hvis jeg i stedet for at køre igennem hele mail listen, godt kender navnene på dem jeg ønsker at få informationen fra, hvordan håndtere jeg så den?
Sorry.. Men hvis du kigger på de forskellige spørgsmål var det faktisk kun et af spørgsmålene der rent faktisk var kommet et svar på. Resten var kommentarer...
Men for at undgå at de bare skal ligge og hænge har jeg nu lukket alle mine spørgsmål.. Så nu skulle der være ryddet op... Men man skal sku holde tungen lige i munden her. Nogle gange bliver man røflet for at lukke for tidligt og andre gange for sent... Pyha, man må sku lære og begå sig... :o)
Kedde65: Jeg har brug for at vide "subject" på den aftale den pågældende person har på nuværende tidspunkt (Now). Desuden har jeg behov for at vide hvornår den aftale de har nu (Now) over færdig (EndTime).
Informationen er jo normalt tilgængelig for mig når jeg opretter en aftale i outlook, og så invitere personer til mødet. Idet jeg skriver deres navn i outlook, fremgår en statuslinje der fortæller hvornår de er optaget af andre møder. Hvis jeg holder musen hen over en af disse aftaler kan jeg se start og slut tidspunkt som emnet for aftalen. Det er præcis den information jeg er interesseret i. :o)
I hastighedsårsager skal jeg lige have omskrevet ovenstående kode, så jeg kan spørge direkte efter f.eks. "Hansen, Ole" - så jeg ikke behøver at gå hele min adressbook igennem...
den første udgave her, den henter bare fra den pågældende bruger der er logget ind i systemet. Du skal huske at sætte en reference til Microsoft Outlook 9.0 Object Library for at det virker.
Sub test() Dim oApplication As Outlook.Application Dim ns As NameSpace Dim cal As MAPIFolder Dim calApp As Items Dim item As AppointmentItem Set oApplication = New Outlook.Application Set ns = oApplication.GetNamespace("MAPI")
Set cal = ns.GetDefaultFolder(olFolderCalendar) Dato = Date Set calApp = cal.Items.Restrict("[start]>='#" & Dato & "#'")
calApp.Sort "[start]" calApp.IncludeRecurrences = True For Each item In calApp If item.Start <= Now And item.End >= Now Then MsgBox item.Start & vbCrLf & item.Subject exit for End If Next
Set ns = Nothing Set oApplication = Nothing End Sub
Næste udgave henter fra en specifik bruger.
Sub test() Dim oApplication As Outlook.Application Dim ns As NameSpace Dim cal As MAPIFolder Dim calApp As Items Dim rec As Recipient Dim item As AppointmentItem Set oApplication = New Outlook.Application Set ns = oApplication.GetNamespace("MAPI") Set rec = ns.CreateRecipient(Range("a1").Value) Set cal = ns.GetSharedDefaultFolder(rec, olFolderCalendar)
Dato = Date Set calApp = cal.Items.Restrict("[start]>='#" & Dato & "#'")
calApp.Sort "[start]" calApp.IncludeRecurrences = True For Each item In calApp If item.Start <= Now And item.End >= Now Then MsgBox item.Start & vbCrLf & item.Subject Exit For End If Next
Set ns = Nothing Set oApplication = Nothing End Sub
Jeg får desværre først mulighed for at teste det i morgen (tirsdag) - jeg har desværre ikke været i nærheden af projektet siden fredag. Men jeg skal huske at vende tilbage med status. På forhånd tak for din hjælp.. Du hører fra mig.
Det ser ud som om at det virker, men det tager jo 1.000 år for den at søge efter en bestemt modtager. Min Outlook kommer op og siger: Requesting Data from Microsoft Exchange Server....bla bla bla.. Det tager omkring 20-25 sekunder.. Er det muligt at gøre noget ved dette? Den anden kode du gav mig helt i starten får jo fat i Free/Busy koden i løbet af få sekunder.. Det er måske ikke det samme??
OK - det må jeg så bare leve med i koden... Øv øv... :o)
Tak for din hjælp, den har givet mig masser af indsigt i problemstilling, og jeg har nu fået en løsning jeg kan leve lidt med... Men hvis der eksistere andre og hurtigere løsninger, så hører jeg gerne fra dig...
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.