Avatar billede henrike Nybegynder
26. august 2014 - 08:11 Der er 13 kommentarer

Rettelse til VBA kode i Outlook

Jeg har en VBA kode som fungerer godt - dog med en enkelt undtagelse.

Den printer vedhæftede pdf-dokumenter i mails der ligger i en mappe der hedder

.To print

Herefter flyttes mailen til mappen

..Printed


Men jeg kunne godt tænke mig, at den printede og flyttede samtlige mails i mappen .To print - men den tager kun en mail og man skal derfor vente til den er printet og så køre makroen igen for hver mail der ligger i mappen.

På en eller anden måde skal den kontrollere om mappen .To print er tom og hvis den ikke er så skal den starte forfra indtil mappen er tom.

Kan nogle hjælpe??

Koden er som følger:

Public Sub PrintAttachments()
    Dim Inbox As MAPIFolder
    Dim Item As MailItem
    Dim Atmt As Attachment
    Dim FileName As String
    Dim i As Integer

    Set Inbox = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders.Item("..To Print")
    Set Printed = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders.Item(".Printed")

    For Each Item In Inbox.Items
        For Each Atmt In Item.Attachments
          If Right(Atmt.FileName, 3) = "pdf" Then
            FileName = "H:\Temp\" & Atmt.FileName
          Atmt.SaveAsFile FileName
            Shell """C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"" /h /p """ + FileName + """", vbHide
          End If
        Next
    Item.Move Printed
    Next

    Set Inbox = Nothing
End Sub
Avatar billede claes57 Ekspert
26. august 2014 - 10:24 #1
Det burde den gøre allerede med
    For Each Item In Inbox.Items
Dvs løbe alle mails igennem.
Avatar billede henrike Nybegynder
26. august 2014 - 11:19 #2
Ja det var du ret i, men det gør den ikke.

Jeg ved ikke hvorfor den ikke gør det??
Avatar billede claes57 Ekspert
26. august 2014 - 11:25 #3
en test -
lav et printscreen af .to mappen så du har alle filnavne
udkommenter en linje (fx shell...)
kør

hvis alle filer flyttes til .printed, så er det den kommando, der får ødelagt tæller i loop. Den skal så gerne flyttes til en anden rutine, så den har sine egne data at rode med.
Avatar billede claes57 Ekspert
26. august 2014 - 11:27 #4
btw - årsagen til prinscreen er, at du bagefter kan flytte filerne tilbage til .to, og køre en ny test da udskrift jo mangler.
Og skal I virkelig bruge så meget papir? det er da lettere at opbevare og håndtere pdf-filerne i sig selv.
Avatar billede henrike Nybegynder
26. august 2014 - 11:46 #5
Hejsa

Jeg har nu to mails i .To print mappen (hver mail har en vedhæftet fil)

Kører jeg makroen så flyttes den første mail i mappen til ..Printed

Og den udskriver kun den ene vedhæftede fil i den mail der flyttes....
Avatar billede claes57 Ekspert
26. august 2014 - 11:55 #6
prøv igen - og sæt en ' i starten på linjen med shell, så den IKKE udskriver (kører linjen) men laver alt andet. Kan den så flytte begge filer?
Avatar billede henrike Nybegynder
26. august 2014 - 12:40 #7
Jeg har prøvet dette:

'Shell """C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"" /h /p """ + FileName + """", vbHide

Derved bliver linjen grøn.

Jeg kører makroen igen og den flytter stadig kun en fil (og laver ingen udskrift).
Avatar billede claes57 Ekspert
26. august 2014 - 12:51 #8
ok - så prøver vi med linjen
  Item.Move Printed
sæt et ' foran - og ret shell til, så den virker igen.
Så skal begge mail få udskrevet pdf'er, men der flyttes ikke.
Avatar billede henrike Nybegynder
26. august 2014 - 15:13 #9
Det er korrekt som du skriver - begge pdf'er bliver udskrevet, men de to mails bliver ikke flyttet
Avatar billede claes57 Ekspert
26. august 2014 - 15:38 #10
ok - når man laver en move, så ødelægger man items-tælleren.

Her kommer lidt pseudokode som oplæg til at rette det
Hvis du i starten af sub tilføjer et
Dim navne as array
og senere erstatter
Item.Move Printed
med
navne additem item.name (eller hvad det nu hedder)
så skal du lige før linjen
Set Inbox = Nothing
lave et
for i=1 to antalinavne (find lige ud af antal)
  move navne(i) printed
next

så vil den først flytte mails efter den har udskrevet, og pga tabel, så er der taget højde for at den ikke flytter evt tilkomne mails undervejs.
Avatar billede henrike Nybegynder
26. august 2014 - 16:10 #11
Jeg er desværre ikke så hård til VBA kodning, så jeg er desværre ikke helt med på hvilke ændringer jeg skal lave :-(

Når du skriver navne hvad betyder det så?

Første del af koden, skal det nu være:

Public Sub PrintAttachments()
    Dim navne as array
    Dim Inbox As MAPIFolder
    Dim Item As MailItem
    Dim Atmt As Attachment
    Dim FileName As String
    Dim i As Integer

Og Item.Move Printed erstattes med

navne additem item.name

Og den sidste del hvor du skriver - find lige ud af antal. Er det antal mails eller? (kan jo være forskelligt fra dag til dag.

På forhånd tak!
Avatar billede henrike Nybegynder
29. august 2014 - 08:59 #12
Jeg har desværre ikke fået makroen til at fungere endnu!

Nogle der kan hjælpe?

Claes57 har du set de spørgsmål jeg har stillet ovenfor?
Avatar billede henrike Nybegynder
08. september 2014 - 14:49 #13
Hejsa

Det virker jo så langt at den printer alle filerne - pt. skal man så manuelt flytte filerne efterfølgende.

Hvis vi ikke kommer længere så må du gerne skrive et svar så du kan få nogle velfortjente point.

Mvh.
Henrik
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

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