Code Samples for Businesses, Schools & Developers

First Published 26 Jan 2024

Creating meetings and appointments in Outlook is very straightforward.

Create Appointment
For online meetings hosted in Microsoft Teams or Zoom, you can use the ribbon menu items to include the connection details and then send invitations to all participants.

It is also easy to setup a series of regularly repeating events where the recurrence fits a regular schedule.
For example, every Friday at 15:00 or the first Wednesday of each month at 18:00.

Recurring Meetings
However, it is less obvious how to create copies of appointments / meetings where there is no defined pattern.
The easiest way to copy an appointment is to hold down the Ctrl key whilst you drag the appointment to a new day/time.

Doing this without holding down the Ctrl key will instead MOVE the appointment to the new date/time.

In the past, you could also copy meetings in exactly the same way. However, from version 2311 onwards, this action is blocked and this error message appears:

Copy Meetings Blocked
Following an exchange in a thread at Access World Forums Outlook Calendar event replication, I am very grateful to AWF member Kitayama for alerting me to this Microsoft Outlook help article: Outlook blocks copying meetings with “Copying meetings is not supported.”

As the article makes clear, it wass a deliberate decision to block copying of meetings in version 2311 as doing so can apparently cause unspecified 'unexpected errors'.

More helpfully, the article also states how to restore the earlier functionality by adding a new DWORD registry key called EnableMeetingCopy with value = 1 to the path:

Registry Fix
The easiest way of doing this is using a registry script.
Copy the code below into a text editor such as Notepad. Save the file as e.g. OutlookMeetingFix.reg and close it.
Then run the script either by double clicking the file (or right click and select Merge)


Windows Registry Editor Version 5.00


If you are not comfortable with editing the registry, you can instead use the following approach (also suggested by Kitayama and reproduced here with permission)

Create a Copy Appointment ribbon item

Copy Appointment
1.   Open Outlook and press Alt+F11 to launch the Visual Basic Editor (VBE)
2.   Open the VBE using Alt+F11 and add a new module. Copy the code below into the module:


Sub CopyAppointment()

Dim objOL As Outlook.Application
Dim objSelection As Outlook.Selection
Dim objItem As Object
Dim result As String
Dim dt As String

Set objOL = Outlook.Application

dt = InputBox("Enter the new Date and Time . . . ")
If Not IsDate(dt) Then
     MsgBox dt & " Is not a date."
     Exit Sub
End If

'Get the selected item
Select Case TypeName(objOL.ActiveWindow)
Case "Explorer"
      Set objSelection = objOL.ActiveExplorer.Selection
      If objSelection.Count > 0 Then
            Set objItem = objSelection.Item(1)
            result = MsgBox("No item selected. Please make a selection first.")
            Exit Sub
      End If

Case "Inspector"
      Set objItem = objOL.ActiveInspector.CurrentItem

Case Else
      result = MsgBox("Please make a selection in the Calendar or open an item first.")
      Exit Sub
End Select

Dim olAppt As Outlook.AppointmentItem
Dim olApptCopy As Outlook.AppointmentItem

Set olApptCopy = Outlook.CreateItem(olAppointmentItem)

' Start Copy
If objItem.Class = olAppointment Then
      Set olAppt = objItem
      With olApptCopy
            .Start = CDate(dt)
            .End = CDate(dt)
            .Subject = olAppt.Subject
            .Location = olAppt.Location
            .Body = olAppt.Body
            .Categories = olAppt.Categories
            .AllDayEvent = olAppt.AllDayEvent
      End With

      'Display copied item for editing before saving

      'OR save copied item direct to calendar
      ' olApptCopy.Save

      'Selected item isn't an appointment item
      result = MsgBox("Please make a selection in the Calendar or open an item first.")
      Exit Sub
End If
Set objOL = Nothing
Set objItem = Nothing
Set olAppt = Nothing
Set olApptCopy = Nothing
End Sub

3.   Close the VBE and return to Outlook.
4.   Open the Outlook calendar
5.   Click File -> Options (From the Calendar menu . . . Not the Outlook Menu)
6.   Select Customize Ribbon, Select Macros, Select All Tabs and under Appointment tab add a new Group.
7.   Add CopyAppointment macro to this group, rename both group and macro name to something you prefer. You can also change the icon while renaming.

Customise Ribbon
8. Click OK and close the Options dialog

Typical usage:

1.   Open the calendar, click and select an appointment.
2.   Click the Copy Appointment button in the ribbon to open an input box
3.   In the input box, type a date or date/time value (e.g. 2024/01/25 08:00)
4.   The selected appointment will now be opened for editing if necessary e.g. add an end time
5.   Save and Close to add the new appointment or meeting to your calendar

If preferred, you can change olApptCopy.Display in the code to olApptCopy.Save.
Doing this will omit step 4 and add the appoinment at the specified start time, but with no end time / duration.

Click to download:

      Module code:         modCopyAppointment      .bas file (zipped)

      Registry script:     OutlookMeetingFix            .reg file (zipped)


Please use the contact form below to let me know whether you found this article interesting/useful or if you have any questions/comments.

Please also consider making a donation towards the costs of maintaining this website. Thank you

Colin Riddington           Mendip Data Systems                 Last Updated 26 Jan 2024

Return to Code Samples Page

Return to Top