• 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

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.

Subscribe
Notify of
31 Comments
newest
oldest most voted
Inline Feedbacks
View all comments

Dwain Wuerfel (@guest_218793)
October 10, 2021 1:04 am
#218793

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.

0
0
Reply
Jon Read (@guest_211833)
August 30, 2018 10:36 am
#211833

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

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Jon Read
August 30, 2018 5:44 pm
#211836

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.

1
0
Reply
Jon Read (@guest_211840)
Reply to  Diane Poremsky
August 31, 2018 3:32 am
#211840

Fantastic - thanks Diane! :)

0
0
Reply
Junz (@guest_204815)
February 22, 2017 3:02 pm
#204815

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

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Junz
February 22, 2017 3:57 pm
#204817

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.

0
0
Reply
Junz (@guest_204812)
February 22, 2017 10:59 am
#204812

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

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Junz
February 22, 2017 5:09 pm
#204819

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/ .)

0
0
Reply
kyfbof (@guest_202951)
November 16, 2016 2:35 pm
#202951

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.

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  kyfbof
February 6, 2017 1:29 am
#204363

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.

0
0
Reply
Richard A (@guest_200148)
July 21, 2016 8:51 am
#200148

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?

0
0
Reply
Richard A (@guest_200130)
July 20, 2016 3:54 pm
#200130

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?

0
0
Reply
stephen whitred (@guest_198958)
May 25, 2016 7:30 pm
#198958

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

0
0
Reply

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

Latest EMO: Vol. 30 Issue 16

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
  • Use Classic Outlook, not New Outlook
  • How to Remove the Primary Account from Outlook
  • Disable "Always ask before opening" Dialog
  • This operation has been cancelled due to restrictions
  • Adjusting Outlook's Zoom Setting in Email
  • How to Hide or Delete Outlook's Default Folders
  • Reset the New Outlook Profile
  • Save Attachments to the Hard Drive
  • Outlook SecureTemp Files Folder
  • Add Attachments and Set Email Fields During a Mail Merge
  • 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
  • Opening PST files in New Outlook
  • New Outlook: Show To, CC, BCC in Replies
  • Insert Word Document into Email using VBA
  • Delete Empty Folders using PowerShell
  • Warn Before Deleting a Contact
  • Classic Outlook is NOT Going Away in 2026
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

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

Opening PST files in New Outlook

New Outlook: Show To, CC, BCC in Replies

Insert Word Document into Email using VBA

Delete Empty Folders using PowerShell

Warn Before Deleting a Contact

Classic Outlook is NOT Going Away in 2026

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 © 2025 Slipstick Systems. All rights reserved.
Slipstick Systems is not affiliated with Microsoft Corporation.

wpDiscuz

Sign up for Exchange Messaging Outlook

Our weekly Outlook & Exchange newsletter (bi-weekly during the summer)






Please note: If you subscribed to Exchange Messaging Outlook before August 2019, please re-subscribe.

Never see this message again.

You are going to send email to

Move Comment