Avatar billede starf Nybegynder
28. september 2011 - 11:37 Der er 12 kommentarer og
1 løsning

output kommer ud i forkert rækkefølge

Jeg har et stykke kode, der gennemgår min outlook kalender for at finde aftaler. Mit problem ligger i at outputtet kommer ud omvendt, altså med de aftaler der er imorgen kommer i bunden, og dem der er i næste uge, kommer i toppen. Nogle der kan se hvorfor det gør dette? og hvordan jeg får det vendt om?

Set objFolder = objNameSpace.GetSharedDefaultFolder(myRecipient, 9)
Set MyItems = objFolder.Items

strOutput = strOutput & "<h2>Møder næste uge:</h2>"
icount = 0
For Each CurrentAppointment in MyItems
If CurrentAppointment.Start > date And CurrentAppointment.Start <= dtNextWeek Then

icount = icount + 1
strOutput = strOutput & icount & ". " & CurrentAppointment.Subject & vbTab & " <b>Start Tid:</b> " & CurrentAppointment.Start & " <b>Varighed</b> " & CurrentAppointment.Duration &  vbCRLF
if len(CurrentAppointment.Body) > 0 then
strOutput = strOutput  & CurrentAppointment.body &  vbCrLF & vbCrLF
else
strOutput = strOutput & vbCrLf
end if
End If
Next


Set objMsg =  objOutlook.CreateItem(olMailItem)

objMsg.To = ""
objMsg.Subject = objFolder & Date()
objMsg.Display
strOutput = replace(strOutput,vbCrLF,"<br>")
objMsg.HTMLBody = strOutput
Avatar billede supertekst Ekspert
28. september 2011 - 11:41 #1
Måske:
Ved at smide dem over i Excel og sorter efter dato
Avatar billede starf Nybegynder
28. september 2011 - 11:51 #2
Det er så ikke en mulighed.
Avatar billede montago Praktikant
28. september 2011 - 15:32 #3
Du kan lave om på konkateneringen:
fra
strOutput = strOutput  & CurrentAppointment.body &  vbCrLF & vbCrLF
else
strOutput = strOutput & vbCrLf

til

strOutput = CurrentAppointment.body &  vbCrLF & vbCrLF & strOutput
else
strOutput = vbCrLf & strOutput

på den måde bytter du om på rækkefølgen helt 'gratis'
Avatar billede starf Nybegynder
28. september 2011 - 15:40 #4
du har ret det virker, hvad så hvis jeg har ændret det til sådan her:

---------------start-----------------

Const olFolderCalendar = 9


Set Application = CreateObject("Outlook.application")
Set myNameSpace = Application.GetNameSpace("MAPI")

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set myRecipient = myNameSpace.CreateRecipient("IT-Mødelokale It-afdelingen")
Set objFolder = objNameSpace.GetSharedDefaultFolder(myRecipient, 9)

Set colItems = objFolder.Items
   
Set fso = CreateObject("Scripting.FileSystemObject")

Set fl = fso.OpenTextFile("C:\Temp\Kalender.txt", 2, True)
fl.Write(strOutput)


Set colFilteredItems = colItems.Restrict("[IsRecurring] = FALSE")       


For Each objItem In colFilteredItems
    Set objPattern = objItem.GetRecurrencePattern
    If objPattern.PatternStartDate > date Then
        fl.Write("Dato: " & objItem.Start & " Møde: " & objItem.Subject & " Varighed: " & objItem.Duration)
        fl.WriteBlankLines(1)     

    End If
   
Next

fl.Close : Set fl = Nothing
Set fso = Nothing

Set Application = Nothing

Set myNameSpace = Nothing


Set objOutlook = Nothing

Set objNamespace = Nothing

----------------slut-------------------

er der en let måde at vende outputtet om her også?
Avatar billede montago Praktikant
28. september 2011 - 15:45 #5
Har man ikke LINQ i VB# ?? eller er det plain VB du programmere ?

anyways, så kan du altid iterere en collection alle de veje du vil:

i stedet for en ForEach:
For Each objItem In colFilteredItems
    Set objPattern = objItem.GetRecurrencePattern
    If objPattern.PatternStartDate > date Then
        fl.Write("Dato: " & objItem.Start & " Møde: " & objItem.Subject & " Varighed: " & objItem.Duration)
        fl.WriteBlankLines(1)     

    End If
   
Next

bruger du en omvendt iterator:

Set i = colFilteredItems.Count
For i to 0 step -1
    set objItem = colFilteredItems(i)
    Set objPattern = objItem.GetRecurrencePattern
    If objPattern.PatternStartDate > date Then
        fl.Write("Dato: " & objItem.Start & " Møde: " & objItem.Subject & " Varighed: " & objItem.Duration)
        fl.WriteBlankLines(1)     

    End If
Next
Avatar billede starf Nybegynder
28. september 2011 - 15:56 #6
Det er plain vba :(

hvis jeg gør sådan giver linie 24 som er

For i to 0 step -1

fejl Tegnet "=" var ventet
Avatar billede montago Praktikant
28. september 2011 - 16:37 #7
nårja (koder aldrig VB mere)...

For i = colFilteredItems.Count to 0 step -1
    set objItem = colFilteredItems(i)
    Set objPattern = objItem.GetRecurrencePattern
    If objPattern.PatternStartDate > date Then
        fl.Write("Dato: " & objItem.Start & " Møde: " & objItem.Subject & " Varighed: " & objItem.Duration)
        fl.WriteBlankLines(1)     

    End If
Next
Avatar billede starf Nybegynder
28. september 2011 - 18:37 #8
så er det denne her der giver problemer:

    set objItem = colFilteredItems(i)

fejl "matrix index er uden for området" hvad det end betyder.
Avatar billede montago Praktikant
28. september 2011 - 18:47 #9
har du selv skrevet koden eller er det altsammen copy paste uden at vide hvad der sker ?

For i = colFilteredItems.Count to 0 step -1
ændres til:
For i = colFilteredItems.Count-1 to 0 step -1
Avatar billede starf Nybegynder
28. september 2011 - 18:54 #10
det er en kombination af copy paste og ting der er skrevet om. Giver dog stadig samme fejl.
Avatar billede starf Nybegynder
29. september 2011 - 11:40 #11
Kom med et svar :)

løsningen var:
For i = colFilteredItems.Count-1 to 1 step -1
Avatar billede starf Nybegynder
17. november 2011 - 20:15 #12
venter på svar?
Avatar billede starf Nybegynder
08. februar 2013 - 12:24 #13
luk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester