I have a couple of similar code samples on another page - one of the macros copies a cancelled meeting to an appointment, the other copies a meeting before the organizer cancels it. This macro just copies a meeting request to an appointment.
Why would you want to copy a meeting? In my case, to add it to the calendar that syncs with my blackberry. If I forward the meeting, my default address is exposed to the organizer. Meeting organizers might want a copy they can use to block off time before or after the meeting, or to use for meeting notes.
iCloud users may want to copy appointments instead of meeting to avoid issues with the iCloud sending out meeting invitations.
This code sample uses the GetCurrentItem function (included) and works with either selected meetings or opened meetings.
Copy Meeting to an Appointment
To use, open the VBA Editor and paste the code into a module. Select a meeting them run the macro.
Sub copyMeeting() Dim oAppt As AppointmentItem Dim cAppt As AppointmentItem Set cAppt = GetCurrentItem() Set oAppt = Application.CreateItem(olAppointmentItem) oAppt.Subject = "Copied: " & cAppt.Subject oAppt.Start = cAppt.Start oAppt.Duration = cAppt.Duration oAppt.Location = cAppt.Location oAppt.Save Set oAppt = Nothing Set cAppt = Nothing End Sub Function GetCurrentItem() As Object Dim objApp As Outlook.Application Set objApp = Application On Error Resume Next Select Case TypeName(objApp.ActiveWindow) Case "Explorer" Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1) Case "Inspector" Set GetCurrentItem = objApp.ActiveInspector.CurrentItem End Select Set objApp = Nothing End Function
Copy appointments to a different calendar
If you are using this macro to copy meetings as appointments to another calendar, such as the iCloud, you need to tweak the code to use folders in other data stores.
You will need to get the code at Working with VBA and non-default Outlook Folders to set the folder to the iCloud folder. Paste it in the VB Editor, at the end of this code.
Note: This will work with any data file, not just iCloud. Change the path in the objCalendarFolder line to use the name of the data file (as seen in the Folder list) and calendar path.
Sub copyMeetingtofolder() Dim objCalendarFolder As Outlook.Folder Dim oAppt As AppointmentItem Dim cAppt As AppointmentItem Set cAppt = GetCurrentItem() Set oAppt = Application.CreateItem(olAppointmentItem) Set objCalendarFolder = GetFolderPath("iCloud\calendar") oAppt.Subject = "Copied: " & cAppt.Subject oAppt.Start = cAppt.Start oAppt.Duration = cAppt.Duration oAppt.Location = cAppt.Location oAppt.Save oAppt.Move objCalendarFolder Set oAppt = Nothing Set cAppt = Nothing Set objCalendarFolder = Nothing End Sub Function GetCurrentItem() As Object Dim objApp As Outlook.Application Set objApp = Application On Error Resume Next Select Case TypeName(objApp.ActiveWindow) Case "Explorer" Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1) Case "Inspector" Set GetCurrentItem = objApp.ActiveInspector.CurrentItem End Select Set objApp = Nothing End Function
Block off travel time
You can use macros similar to the code on these pages to block off travel time by changing the fields.
oAppt.subject = "downtime: " & cAppt.subject oAppt.Start = cAppt.End oAppt.Duration = 15
I corrected it...now if it would copy the color I had assinged to the original, it would be great.
What did you do to fix the error? It might help someone else.
Color categories would be:
oAppt.Categories = cAppt.Categories
I'm seeing the same error, and not a VB programmer for sure, so what is the fix?
Office Professional Plus 2010 64 bit.
That should work... I always test the macros in Outlook 2010 and 2013.
The issue seems to be that GetCurrentItem() returns an Object which cannot be directly assigned to the cAppt variable which is declared as an AppointmentItem. Changing cAppt to be of type Object and inlining the code from GetCurrentItem() resolves my original issue. However, I like the idea of the GetCurrentItem() function but cannot figure out how to cast the Object returned to an object of type AppointmentItem.
It *should* work exactly as written. (It does here.) What version of Outlook do you use?
I've copied the above code and the GetFolderPath() code into a module but during execution I get a Run-time error '13': Type mismatch upon returning from the GetCurrentItem() function. I stepped into GetCurrentItem() and it seems to run OK.
I do not have anything in ThisOutlookSession().
Any idea what I'm missing?
Cool stuff....but how do I cancel the meeting that I copied if I receive a cancellation request from the original sender?
You can select and delete the copy you created. If you want to keep the copy for your records, edit the subject to say cancelled.