• Outlook User
  • New Outlook app
  • Outlook.com
  • Outlook Mac
  • Outlook & iCloud
  • Developer
  • Microsoft 365 Admin
    • Common Problems
    • Microsoft 365
    • Outlook BCM
    • Utilities & Addins

Create a List of Meeting Attendees and Responses

Slipstick Systems

› Developer › Create a List of Meeting Attendees and Responses

Last reviewed on September 16, 2019     31 Comments

Applies to: Outlook (classic), Outlook 2007, Outlook 2010

Outlook 2010 and up includes a Copy Status to Clipboard command under the Tracking tab (or use Ctrl+A, C to Select All, and Copy), but prior to Outlook 2010, the only way to get a list of meeting attendees and their responses was by taking a screenshot or using VBA.

Use the Copy in Clipboard command to get tracking details in Outlook 2010 and up

This code sample gets the appointment details and attendees (along with their responses) and inserts it into a new Outlook message form, which you can print, send or copy the data for use in other applications.

create a list of responses

See More Information for links to VBA code samples that send the information to Word or Excel.

Don't forget to adjust your macro security settings to allow macros to run!

Get Meeting Attendee List Macro

To use, open Outlook's VBA Editor by pressing Alt+F11. Right click on the Project1 in the left pane and choose Insert > Module. Copy this code and paste it into the Module.

Get the GetCurrentItem function from Outlook VBA: work with open item or selected item and paste it at the end of the module.

Then select or open a meeting you organized and run the macro to create a message containing the meeting details. The total counts of accepted, declined, tentative, and no response is added to the list.

Sub GetAttendeeList()
' GetCurrentItem function: https://slipstick.me/9hu-b
Dim objApp As Outlook.Application
Dim objItem As Object
Dim objAttendees As Outlook.Recipients
Dim objAttendeeReq As String
Dim objAttendeeOpt As String
Dim objOrganizer As String
Dim dtStart As Date
Dim dtEnd As Date
Dim strSubject As String
Dim strLocation As String
Dim strNotes As String
Dim strMeetStatus As String
Dim strCopyData As String
Dim strCount  as String 

On Error Resume Next
 
Set objApp = CreateObject("Outlook.Application")
Set objItem = GetCurrentItem()
Set objAttendees = objItem.Recipients
 
On Error GoTo EndClean:

' Is it an appointment
If objItem.Class <> 26 Then
  MsgBox "This code only works with meetings."
  GoTo EndClean:
End If
 
' Get the data
dtStart = objItem.Start
dtEnd = objItem.End
strSubject = objItem.Subject
strLocation = objItem.Location
strNotes = objItem.Body
objOrganizer = objItem.Organizer
objAttendeeReq = ""
objAttendeeOpt = ""
 
' Get The Attendee List
For x = 1 To objAttendees.Count
   strMeetStatus = ""
   Select Case objAttendees(x).MeetingResponseStatus
     Case 0
       strMeetStatus = "No Response"
       ino = ino + 1
     Case 1
       strMeetStatus = "Organizer"
       ino = ino + 1
     Case 2
       strMeetStatus = "Tentative"
       it = it + 1
     Case 3
       strMeetStatus = "Accepted"
       ia = ia + 1
     Case 4
       strMeetStatus = "Declined"
       ide = ide + 1
   End Select
If objAttendees(x).Name <> objOrganizer Then  
   If objAttendees(x).Type = olRequired Then
      objAttendeeReq = objAttendeeReq & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   Else
      objAttendeeOpt = objAttendeeOpt & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   End If
 End If
Next
  
 strCopyData = "Organizer: " & objOrganizer & vbCrLf & "Subject:  " & strSubject & vbCrLf & _
  "Location: " & strLocation & vbCrLf & "Start:    " & dtStart & vbCrLf & "End:     " & dtEnd & _
  vbCrLf & vbCrLf & "Required: " & vbCrLf & objAttendeeReq & vbCrLf & "Optional: " & _
  vbCrLf & objAttendeeOpt & vbCrLf & "NOTES " & vbCrLf & strNotes
  
 strCount = "Accepted: " & ia & vbCrLf & _
  "Declined: " & ide & vbCrLf & _
  "Tentative: " & it & vbCrLf & _
  "No response: " & ino
    
Set ListAttendees = Application.CreateItem(olMailItem)
  ListAttendees.Body = strCopyData & vbCrLf & strCount
  ListAttendees.Display
   
EndClean:
Set objApp = Nothing
Set objItem = Nothing
Set objAttendees = Nothing
End Sub

Include other contact fields

If you want to include other contact fields in the printout, you can do a lookup of the contact then add any contact field to the string stored in objAttendeeReq and objAttendeeOpt as seen in the snippet below.

Because the attendee's name may include the email address in Fullname (email@address) format, I'm using just the email address in the search query. I'm using the mailing address field because it will always have an entry, should you have a mix of Home and Business addresses in your contacts. Alternately, you could use an If statement - if the business address is blank use the home address instead.

Naturally, for this to work you need to have a contact for the attendee, with the field you are using filled in.

strAttendeeName = objAttendees(x).address

Set oContact = colItems.Find("[Email1Address] = '" & strAttendeeName & "'")
         
     If Not oContact Is Nothing Then
         strCity = oContact.MailingAddressCity & ", " & oContact.MailingAddressState
     End If
     
If objAttendees(x).Type = olRequired Then
      objAttendeeReq = objAttendeeReq & objAttendees(x).name & vbTab & strMeetStatus & vbTab & strCity & vbCrLf
   Else
      objAttendeeOpt = objAttendeeOpt & objAttendees(x).name & vbTab & strMeetStatus & vbTab & strCity & vbCrLf
   End If

Next

A full working macro containing the code snippet is at Include Contact Fields Macro.

 

Copy the Invitees and Responses to the Meeting Body (Notes field)

A user needed to Move meeting invitations from her calendar to shared calendar but doing so erased the tracking results. While you can't prevent that from happening, you can preserve the tracking history by copying it to the Notes field in the appointments. When you only need to add the tracking results to a few meetings, doing it manually is fast - select all and copy the tracking then paste it in the body - a macro is faster if you need to add the tracking to a lot of meetings. It's also formatted a little nicer.

As written, you'll select the meeting and run the macro. Rinse and Repeat for every meeting. (It goes fast if you add a button for the macro the ribbon.) It could be tweaked to add the tracking results to every meeting in your calendar or only for selected meetings.

Get the GetCurrentItem function from Outlook VBA: work with open item or selected item and paste it at the end of the module. This allows you to use the macro with an open or selected meeting.

Sub CopyAttendeesToBody()
' GetCurrentItem function: https://slipstick.me/9hu-b
Dim objApp As Outlook.Application
Dim objItem As Object
Dim objAttendees As Outlook.Recipients
Dim objAttendeeReq As String
Dim objAttendeeOpt As String
Dim objOrganizer As String
Dim dtStart As Date
Dim dtEnd As Date
Dim strSubject As String
Dim strLocation As String
Dim strNotes As String
Dim strMeetStatus As String
Dim strCopyData As String
Dim strCount  As String

On Error Resume Next
 
Set objApp = CreateObject("Outlook.Application")
Set objItem = GetCurrentItem()
Set objAttendees = objItem.Recipients
 
On Error GoTo EndClean:

' Is it an appointment
If objItem.Class <> 26 Then
  MsgBox "This code only works with meetings."
  GoTo EndClean:
End If
 
' Get the data
objOrganizer = objItem.Organizer
objAttendeeReq = ""
objAttendeeOpt = ""
 
' Get The Attendee List
For x = 1 To objAttendees.Count
   strMeetStatus = ""
   Select Case objAttendees(x).MeetingResponseStatus
     Case 0
       strMeetStatus = "No Response"
       ino = ino + 1
     Case 1
       strMeetStatus = "Organizer"
       ino = ino + 1
     Case 2
       strMeetStatus = "Tentative"
       it = it + 1
     Case 3
       strMeetStatus = "Accepted"
       ia = ia + 1
     Case 4
       strMeetStatus = "Declined"
       ide = ide + 1
   End Select
  
If objAttendees(x).Name <> objOrganizer Then
   If objAttendees(x).Type = olRequired Then
      objAttendeeReq = objAttendeeReq & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   Else
      objAttendeeOpt = objAttendeeOpt & objAttendees(x).Name & vbTab & strMeetStatus & vbCrLf
   End If
End If
Next

 strCopyData = "Required: " & vbCrLf & objAttendeeReq & vbCrLf & "Optional: " & _
  vbCrLf & objAttendeeOpt
  
 strCount = "Accepted: " & ia & vbCrLf & _
  "Declined: " & ide & vbCrLf & _
  "Tentative: " & it & vbCrLf & _
  "No response: " & ino
    
  objItem.Body = strCopyData & vbCrLf & strCount & vbCrLf & vbCrLf & objItem.Body
  objItem.Save  '.Display
   
EndClean:
Set objApp = Nothing
Set objItem = Nothing
Set objAttendees = Nothing
End Sub

More Information

Print appointment with attendee status The master code; it prints the appointment details and attendee responses to a Word document.
Outlook Meeting Tracking Export prints the attendee responses to Excel.

Create a List of Meeting Attendees and Responses was last modified: September 16th, 2019 by Diane Poremsky
Post Views: 15

Related Posts:

  • Send an email to attendees who have not responded
  • Send an Email When a Reminder Fires
  • How to print a list of recurring dates using VBA
  • Automatically Add a Category to Accepted Meetings

About Diane Poremsky

A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

Comments

  1. Dwain Wuerfel says

    October 10, 2021 at 1:04 am

    I've been trying to use your sample code for 'Send a message to all attendees' and running into a bit of an issue because one of the names being used results in a duplicate name. There is no issue if I select the name from the address book as it is resolved, but when just grabbing from the meeting it is creating the required field with both my name, organizer, and the required contact as a semi-colon separated value. I thought I could split this value, then add each value to a recipient object and resolve. I even did a subsequent check if resolved and still get same error when trying to send.

    Since I'm using your base sample didn't think it was necessary to include my actual code if I explained the issue.

    Reply
  2. Jon Read says

    August 30, 2018 at 10:36 am

    Hi Diane.
    I don't have access to Outlook VBA due to onsite security, but I do to Excel VBA. What changes would I need to make to enable this to run from Excel. PS. It would be handy if it could cycle through all items in the calendar writing the recipients to a spreadsheet.
    Thanks

    Reply
    • Diane Poremsky says

      August 30, 2018 at 5:44 pm

      Really? One is as safe as the other. :) You basically just need to fix the references to read outlook from excel. The macro at https://www.slipstick.com/developer/code-samples/macro-export-outlook-fields-excel/ has an excel version (linked to a text file) - while it can easily be tweaked to work on any folder. If you don't need recurring events, that should actually work.

      I'll take a look at it tonight - it shouldn't be too much effort to convert it.

      Reply
      • Jon Read says

        August 31, 2018 at 3:32 am

        Fantastic - thanks Diane! :)

  3. Junz says

    February 22, 2017 at 3:02 pm

    Thank you this is very helpful. Is they anyway to add the city the attendee is from as well?

    Reply
    • Diane Poremsky says

      February 22, 2017 at 3:57 pm

      You'd need to do a look up of their contact as its not something that is recorded in the meeting tracking (this code just reads the tracking). I have a sample that does a lookup of contacts - it just needs put together with this. The process is slightly different if looking up in exchange gal, but is doable.

      Reply
  4. Junz says

    February 22, 2017 at 10:59 am

    Thank you. Is it possible to also get the attendees City for instance Attendee A is in New York and Attendee B is in Los Angeles in the same macro result

    Reply
    • Diane Poremsky says

      February 22, 2017 at 5:09 pm

      I can't resist and interesting challenge - attendee-city-macro.txt looks up contacts and adds the city and state of the mailing address - you could use business or home address, but if you don't use the same field consistently, you won't get a value. Could also do an if - if no business address, get home, but i was more interested in just making it work. It only looks in the default contacts folder, not the GAL.

      (I ended up using the find routine in the macro at https://www.slipstick.com/developer/create-contacts-from-messages/ .)

      Reply
  5. kyfbof says

    November 16, 2016 at 2:35 pm

    This targets only the "active" appointment. I wish that we can expand this to list all meetings for a particular day. For each meeting, print out the participants' responses.

    Reply
    • Diane Poremsky says

      February 6, 2017 at 1:29 am

      It would be possible to loop through everything for all meetings on the same day as the selected meeting but i don't have a code sample currently.

      Reply
  6. Richard A says

    July 21, 2016 at 8:51 am

    This is very helpful. But is there a way to embed a table in the email body, so that I can create a couple of columns of names, or even names with a box next to each to indicate presence or absence?

    Reply
  7. Richard A says

    July 20, 2016 at 3:54 pm

    This is very helpful. I would like to format the attendees as a table embedded in the body of the outlook message though, so I could organize them into more than one column. How might that be done? Which references might i need to add to the VB editor?

    Reply
  8. stephen whitred says

    May 25, 2016 at 7:30 pm

    Thanks very much it's exactly what I was looking for!

    Reply
  9. NGA BELLINO says

    May 9, 2016 at 3:05 am

    Thoughtful comments . I Appreciate the points , Does someone know where my assistant might get ahold of a fillable a form version to complete ?

    Reply
    • Diane Poremsky says

      May 11, 2016 at 12:42 am

      What type of form do you need? (email or paper)

      Reply
  10. Sandra Rutan says

    August 11, 2015 at 12:46 pm

    This macro worked great on my last version of Word - but does not work on Word 2013. Any suggestions on how to modify it?

    Reply
    • Diane Poremsky says

      August 13, 2015 at 1:48 am

      Any error messages? What happens when you try to run it?

      Reply
  11. Alex Smith says

    February 4, 2015 at 1:41 pm

    Is there a way to modify this code to generate an Excel document instead of a new Outlook message?

    Reply
    • Diane Poremsky says

      February 5, 2015 at 12:31 am

      Yes, you can do that. See https://jazzerup.blogspot.com/2008/09/outlook-meeting-tracking-export.html for the Excel version.

      Reply
  12. Diane says

    December 19, 2014 at 8:03 pm

    I am wondering why a "yes" response from an invitee using gmail does not showup when I track invitee responses. Is this not possible to see in Outlook without them having to reply with a message?

    Reply
    • Diane Poremsky says

      December 29, 2014 at 12:54 am

      If Outlook gets the response in the correct format, it will automatically update the responses but unless you are using Outlook to read gmail and accept the meeting, gmail doesn't send a response.

      Reply
  13. Paul says

    September 17, 2014 at 8:57 am

    Isn't it weird, though, that Microsoft has missed this really obvious piece of functionality? Surely a button that "lists all attendees" wouldn't be too much to ask?

    Reply
  14. JC says

    May 13, 2014 at 11:11 am

    Can you add the Recipients title to the output?

    Reply
    • Diane Poremsky says

      May 13, 2014 at 3:52 pm

      No, it only picks up the information that is in the meeting request, it doesn't cross reference their contact. Sorry

      Reply
  15. walter says

    October 14, 2013 at 5:58 pm

    Is it possible to capture a modified response like " I can't make it too busy"

    Reply
    • Diane Poremsky says

      October 14, 2013 at 6:36 pm

      No, sorry, the responses are limited to what is included in outlook. You can't add more options.

      Reply
  16. Glen says

    June 12, 2013 at 8:21 am

    Brilliant! Exactly what I was looking for! Thank you very much for this!

    Reply
  17. Gene says

    January 11, 2013 at 8:56 am

    This is exactly the thing I was looking for! However, it says "No Response (or Organizer)" for every person invited to the meeting. I have accepted the request (and I know many others have as well) so I'm not sure what went wrong. Any thoughts? I'm using Outlook 2007

    Reply
    • Diane Poremsky says

      January 11, 2013 at 7:17 pm

      Are you the meeting organizer? Can you see the Tracking for the meeting? The macro uses the tracking data and only gets the tracking data if your account can see it too.

      Reply
  18. John says

    June 14, 2012 at 11:27 am

    I used to copy responses all the time from the older outlook without a screenshot or VBA. To do this, I have a special folder setup for "Meeting Reponses", along with a rule with "Accepted", "Declined", or "Tentative" in the subject, to move those responses to the Meeting Responses folder. Within the folder, I had the messages grouped by the Appointment "Start" field, and I have (at a minimum) the sender's name and subject fields visible. Now, I can copy the list for a meeting by selecting all of the messages and pressing CTRL-C. I usually then paste this into Excel, delete the columns that I don' t need (if any extra columns exist), and separate the first word out of the subject field. Now, I can sort and count the responses (useful if you need to order lunch for a meeting).

    Reply
    • Diane Poremsky says

      June 14, 2012 at 12:56 pm

      That is a good idea if you don't mind keeping copies of the responses. Copying data and pasting it into a document is one of my favorite Outlook features but I never thought about keeping the responses. Thanks!

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Visit Slipstick Forums.
What's New at Slipstick.com

Latest EMO: Vol. 31 Issue 3

Subscribe to Exchange Messaging Outlook






Support Services

Do you need help setting up Outlook, moving your email to a new computer, migrating or configuring Office 365, or just need some one-on-one assistance?

Our Sponsors

CompanionLink
ReliefJet
  • Popular
  • Latest
  • Week Month All
  • Jetpack plugin with Stats module needs to be enabled.
  • Error Opening iCloud Appointments in Classic Outlook
  • Opt out of Microsoft 365 Companion Apps
  • Mail Templates in Outlook for Windows (and Web)
  • Urban legend: Microsoft Deletes Old Outlook.com Messages
  • Buttons in the New Message Notifications
  • Move Deleted Items to Another Folder Automatically
  • Open Outlook Templates using PowerShell
  • Count and List Folders in Classic Outlook
  • Google Workspace and Outlook with POP Mail
  • Import EML Files into New Outlook
Ajax spinner

Recent Bugs List

Microsoft keeps a running list of issues affecting recently released updates at Fixes or workarounds for recent issues in classic Outlook (Windows).

For new Outlook for Windows: Fixes or workarounds for recent issues in new Outlook for Windows .

Outlook for Mac Recent issues: Fixes or workarounds for recent issues in Outlook for Mac

Outlook.com Recent issues: Fixes or workarounds for recent issues on Outlook.com

Office Update History

Update history for supported Office versions is at Update history for Office

Outlook Suggestions and Feedback

Outlook Feedback covers Outlook as an email client, including Outlook Android, iOS, Mac, and Windows clients, as well as the browser extension (PWA) and Outlook on the web.

Outlook (new) Feedback. Use this for feedback and suggestions for Outlook (new).

Use Outlook.com Feedback for suggestions or feedback about Outlook.com accounts.

Other Microsoft 365 applications and services




New Outlook Articles

Error Opening iCloud Appointments in Classic Outlook

Opt out of Microsoft 365 Companion Apps

Mail Templates in Outlook for Windows (and Web)

Urban legend: Microsoft Deletes Old Outlook.com Messages

Buttons in the New Message Notifications

Move Deleted Items to Another Folder Automatically

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Google Workspace and Outlook with POP Mail

Import EML Files into New Outlook

Newest Code Samples

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Insert Word Document into Email using VBA

Warn Before Deleting a Contact

Use PowerShell to Delete Attachments

Remove RE:, FWD:, and Other Prefixes from Subject Line

Change the Mailing Address Using PowerShell

Categorize @Mentioned Messages

Send an Email When You Open Outlook

Delete Old Calendar Events using VBA

VBA Basics

How to use the VBA Editor

Work with open item or selected item

Working with All Items in a Folder or Selected Items

VBA and non-default Outlook Folders

Backup and save your Outlook VBA macros

Get text using Left, Right, Mid, Len, InStr

Using Arrays in Outlook macros

Use RegEx to extract message text

Paste clipboard contents

Windows Folder Picker

Custom Forms

Designing Microsoft Outlook Forms

Set a custom form as default

Developer Resources

Developer Resources

Developer Tools

VBOffice.net samples

SlovakTech.com

Outlook MVP David Lee

Repair PST

Convert an OST to PST

Repair damaged PST file

Repair large PST File

Remove password from PST

Merge Two Data Files

Sync & Share Outlook Data

  • Share Calendar & Contacts
  • Synchronize two computers
  • Sync Calendar and Contacts Using Outlook.com
  • Sync Outlook & Android Devices
  • Sync Google Calendar with Outlook
  • Access Folders in Other Users Mailboxes

Diane Poremsky [Outlook MVP]

Make a donation

Mail Tools

Sending and Retrieval Tools

Mass Mail Tools

Compose Tools

Duplicate Remover Tools

Mail Tools for Outlook

Online Services

Calendar Tools

Schedule Management

Calendar Printing Tools

Calendar Reminder Tools

Calendar Dates & Data

Time and Billing Tools

Meeting Productivity Tools

Duplicate Remover Tools

Productivity

Productivity Tools

Automatic Message Processing Tools

Special Function Automatic Processing Tools

Housekeeping and Message Management

Task Tools

Project and Business Management Tools

Choosing the Folder to Save a Sent Message In

Run Rules on messages after reading

Help & Suggestions

Submit Outlook Feature Requests

Slipstick Support Services

Buy Microsoft 365 Office Software and Services

Visit Slipstick Forums.

What's New at Slipstick.com

Home | Outlook User | Exchange Administrator | Office 365 | Outlook.com | Outlook Developer
Outlook for Mac | Common Problems | Utilities & Addins | Tutorials
Outlook & iCloud Issues | Outlook Apps
EMO Archives | About Slipstick | Slipstick Forums
Submit New or Updated Outlook and Exchange Server Utilities

Send comments using our Feedback page
Copyright © 2026 Slipstick Systems. All rights reserved.
Slipstick Systems is not affiliated with Microsoft Corporation.