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
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.
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.
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.
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.
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.
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
Synes godt om
Ny brugerNybegynder
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.