To get my email, tasks and mind organized, I am trying to use the Getting Things Done method developed by David Allen (English book/Dutch book). Because I am using Outlook as “external storage system”, I read an additonal book (Iedere dag je hoofd en inbox leeg (dutch book)) about implementing GTD within Outlook.
The main idea of this book is that you copy emails to task lists or your agenda during the processing phase with the use of some shortcuts. With the default Copy to folder functionality of Outlook, this works quite okey with two exceptions:
- Attachments are not copied to a task/agenda item
- You don’t have a reference to the original message, so you are not able to reply if you finished a task or need additional information
I developed a macro with some VBA code which will create a new Outlook item (appointment or task) and attaches the orginal message to this new item. This way I can always open the original email (with attachments) and sent a reply without looking up the email in the archive folder first.
Sub CopyEmailToNewItem()
Dim objMailItem As Outlook.mailItem
If (ActiveExplorer.Selection.Count = 1) And (ActiveExplorer.Selection.Item(1).Class = olMail) Then
Set objMailItem = ActiveExplorer.Selection.Item(1)
End If
Dim NameSpace As Outlook.NameSpace
Set NameSpace = Outlook.GetNamespace("MAPI")
Dim selectedFolder As Folder
Set selectedFolder = NameSpace.PickFolder
Const attPath As String = "C:\temp\"
Set objNewItem = selectedFolder.Items.Add(selectedFolder.DefaultItemType)
With objNewItem
.Subject = objMailItem.Subject
.Body = objMailItem.Body
objMailItem.SaveAs attPath & objMailItem.EntryID
.Attachments.Add attPath & objMailItem.EntryID, olEmbeddeditem, , "Orginal message"
Kill (attPath & objMailItem.EntryID)
.Display
End With
End Sub



Johan, ik ben halverwege hetzelfde boek dat jij ook hebt gelezen (Elke dag je hoofd en inbox leeg). Ik ben inderdaad tegen hetzelfde probleem als jij aangelopen. Ik heb je code even uitgeprobeerd en dit is inderdaad wel een oplossing. Ik heb nog wel een paar wensen, maar bezit te weinig kennis van VBA om het zelf aan te passen, maar wellicht zou jij er nog eens naar kunnen kijken. Ik wil eigen 3 knoppen en daarmee wil ik het volgende doen:
- verplaats item naar de map 'Kort Archief'. Code hiervoor heb ik inmiddels gevonden, dat lukt dus wel.
- kopieer item (met evt bijlagen) naar een afspraak
- kopieer item (met evt bijlagen) naar een afspraak
In jouw code komt de lijst waaruit een map/taak/agenda gekozen kan worden. Ik wil eigenlijk dmv sneltoetsen (gekoppeld aan een knop) direct een item overzetten naar een mailbox (Kort Archief), afspraak of taak.
Dat is de eerste wens. De tweede is de omschrijving van het nieuwgemaakte item wat je de standaardnaam "Orginal message" meegeeft. Ik zou dat eigenlijk automatisch het onderwerp van het bericht als naam willen geven.
Zie je kans om de 2 wensen om te zetten in de benodigde code?
Joost,
Om een email direct naar een vooraf ingestelde locatie te kopieren heb ik de bestaande code iets aangepast.
Sub CopyEmailToNewItemAtPredefinedLocation(pathToLocation As String) Dim objMailItem As Outlook.MailItem If (ActiveExplorer.Selection.Count = 1) And (ActiveExplorer.Selection.Item(1).Class = olMail) Then Set objMailItem = ActiveExplorer.Selection.Item(1) End If Dim selectedFolder As folder Set selectedFolder = GetFolderByPath(pathToLocation) Const attPath As String = "C:\temp\" Set objNewItem = selectedFolder.Items.Add(selectedFolder.DefaultItemType) With objNewItem .Subject = objMailItem.Subject .Body = objMailItem.Body objMailItem.SaveAs attPath & objMailItem.EntryID .Attachments.Add attPath & objMailItem.EntryID, olEmbeddeditem, , "Orginal message" Kill (attPath & objMailItem.EntryID) .Display End With End Sub Function GetFolderByPath(pathName As String) As folder Dim nameSpace As Outlook.nameSpace Dim pathNameParts() As String Dim foundFolder As folder pathNameParts = Split(pathName, "\") Set nameSpace = Outlook.GetNamespace("MAPI") Set folderCollection = nameSpace.folders For Each pathNamePart In pathNameParts Set foundFolder = folderCollection(pathNamePart) Set folderCollection = foundFolder.folders Next pathNamePart Set GetFolderByPath = foundFolder End FunctionDe GetFolderByPath functie zoekt aan de hand van een path de juiste folder (locatie) op. Om bijvoorbeeld direct naar de Agenda te kopieren is het path in mijn situatie mijnemailadres@domainnaam.nl\Calendar. De path naam hangt een beetje af van hoe je mailbox binnen Outlook heet. Bij mij is dat mijn emailadres maar je kan het ook MailBox Werk hebben genoemd. Dit moet je dus even uitzoeken. Deze GetFolderByPath functie wordt gebruikt door aangepaste CopyEmailToNewItemAtPredefinedLocation methode.
Om vervolgens knoppen (met eventuele sneltoetsen) te koppelen aan deze functionaliteit heb ik twee extra methodes gemaakt welke het path doorgeven aan de CopyEmailToNewItemAtPredefinedLocation.
Sub CopyEmailToCalendar() CopyEmailToNewItemAtPredefinedLocation ("mijnemailadres@domainnaam.nl\Calendar") End Sub Sub CopyEmailToTasks() CopyEmailToNewItemAtPredefinedLocation ("mijnemailadres@domainnaam.nl\Tasks") End SubOp je tweede vraag of in plaats van "Original Message" de oorspronkelijke titel van de email getoond kan worden als attachment naam, moet de volgende regel
aangepast worden naar
Wellicht kun je met deze informatie weer vooruit. Succes
Johan, werkt prima zoals ik het had aangegeven.
Ik zie nog 2 dingen die ik graag anders zou willen zien:
1. Het ingevoegde mailitem staat onder de platte tekst. Bij een lange mail moet je dan helemaal naar onderen scrollen om de oorspronkelijk mail te openen. Ik zou liever het ingevoegde mailitem gelijk bovenaan willen hebben en daaronder de platte tekst.
2. Bij de platte tekst wordt een link helemaal met de kode HYPERLINK ... getoond. Dat staat heel onrustig.
In mijn oorspronkelijke mail heb ik staan: (en dat zou ik dan ook willen zien)
http://www.outlook-tips.net/code-samples/save-and-delete-attachments/
http://www.vbaexpress.com/kb/getarticle.php?kb_id=981
en dit wordt weergegeven als:
HYPERLINK "https://www.upcmail.net/do/redirect?url=http%253A%252F%252Fwww.outlook-tips.net%252Fcode-samples%252Fsave-and-delete-attachments%252F&hmac=ffb7168c23dd04f655fd034f9dc21c9e" \nhttp://www.outlook-tips.net/code-samples/save-and-delete-attachments/
HYPERLINK "https://www.upcmail.net/do/redirect?url=http%253A%252F%252Fwww.vbaexpress.com%252Fkb%252Fgetarticle.php%253Fkb_id%253D981&hmac=19c7c0602b8f633cdf599985ddbe8819" \nhttp://www.vbaexpress.com/kb/getarticle.php?kb_id=981
Kun je dat ook nog oplossen?