This VBA will copy the selected appointment. Use it to copy recurring events as single appointments to take notes so you can avoid editing the occurrence.
This creates an appointment from the selected occurrence. This code can be used either by selecting a recurring appointment in the Calendar or by opening the occurrence, then running the macro.
You can use VBA to convert a series to individual appointments. See Copy Recurring Appointment Series to Appointments for the code. If you just need a list of dates, see How to print a list of recurring dates using VBA.
Copy Recurring Appointment Code
Public Sub CopyRecurring()
Dim oAppt As Outlook.AppointmentItem
Dim newAppt As Outlook.AppointmentItem
If TypeName(ActiveExplorer.Selection.Item(1)) = "AppointmentItem" Then
Set oAppt = GetCurrentItem()
Set newAppt = ActiveExplorer.CurrentFolder.Items.Add(olAppointmentItem)
newAppt.Start = oAppt.Start
newAppt.End = oAppt.End
newAppt.Subject = oAppt.Subject & "(Copy)"
newAppt.Body = oAppt.Body
newAppt.Location = oAppt.Location
newAppt.Categories= oAppt.Categories
If oAppt.Attachments.Count > 0 Then
CopyAttachments oAppt, newAppt
End If
newAppt.Display
Set newAppt = Nothing
Else
MsgBox "Sorry, you need to select an appointment"
End If
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
Sub CopyAttachments(objSourceItem, objTargetItem)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In objSourceItem.Attachments
strFile = strPath & objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next
Set fldTemp = Nothing
Set fso = Nothing
End Sub
Hello!
I love this VBA, can we tweak it a little bit? I believe, I'm asking for a loop to add :)
So if I select a single day in my outlook calendar, I would like this macro to copy each occurence series as per selected day.
Let say I've 1 occuring meeting at 10 am and another at 2 pm.my desired output would be to both meetings be copied as appointments (not occuring). this way I do not have to click on each occuring appointment and run macro, instead I can select a day and run macro for all reccurring appointments today :)
VBA? Nothing built into Outlook for this? If not...it is a product defect and needs to be tracked as such.
If the calendar views, you can right-click and drag -and Outlook *should* create a single event but you need to drag to a different time period (or day if using month view) . The macro does it in place and it no more steps than dragging.