Sub ExportVotingStatisticsExcel()
Dim objMail As Outlook.MailItem
Dim objRecipient As Outlook.Recipient
Dim objVoteDictionary As Object
Dim varVotingCounts As Variant
Dim varVotingOptions As Variant
Dim varVotingOption As Variant
Dim i As Long
Dim objExcelApp As Excel.Application
Dim objExcelWorkbook As Excel.Workbook
Dim objExcelWorksheet As Excel.Worksheet
Dim nRow As Integer
Dim strStatus As String
Dim strExcelFile As String
Set objMail = Application.ActiveExplorer.Selection(1)
'Create a new excel worksheet
Set objExcelApp = CreateObject("Excel.Application")
Set objExcelWorkbook = objExcelApp.Workbooks.Add
Set objExcelWorksheet = objExcelWorkbook.Sheets(1)
'Fill in the predefined values
With objExcelWorksheet
.Cells(1, 1) = "Voting Results for Email:"
.Cells(1, 2) = objMail.Subject
.Cells(3, 1) = "Voting Options"
.Cells(3, 2) = "Count"
End With
Set objVoteDictionary = CreateObject("Scripting.Dictionary")
'get the default voting options
varVotingOptions = Split(objMail.VotingOptions, ";")
'Add the voting responses to the dictionary
For Each varVotingOption In varVotingOptions
objVoteDictionary.Add varVotingOption, 0
Next
'Add a custom voting response - "No Reply"
objVoteDictionary.Add "No Reply", 0
'Process the all voting responses
For Each objRecipient In objMail.Recipients
If objRecipient.TrackingStatus = olTrackingReplied Then
If objVoteDictionary.Exists(objRecipient.AutoResponse) Then
objVoteDictionary.Item(objRecipient.AutoResponse) = objVoteDictionary.Item(objRecipient.AutoResponse) + 1
strStatus = objRecipient.Name & ";" & objRecipient.AutoResponse & vbCrLf & strStatus
Else
objVoteDictionary.Add objRecipient.AutoResponse, 1
strStatus = objRecipient.Name & ";No Reply" & vbCrLf & strStatus
End If
Else
objVoteDictionary.Item("No Reply") = objVoteDictionary.Item("No Reply") + 1
strStatus = objRecipient.Name & ";No Reply" & vbCrLf & strStatus
End If
Next
'Get the voting options and vote counts
varVotingOptions = objVoteDictionary.Keys
varVotingCounts = objVoteDictionary.Items
'Fill in the values in specific cells
nRow = 4
For i = LBound(varVotingOptions) To UBound(varVotingOptions)
With objExcelWorksheet
.Cells(nRow, 1) = varVotingOptions(i)
.Cells(nRow, 2) = varVotingCounts(i)
End With
nRow = nRow + 1
Next
nRow = nRow + 1
' split the recipients and their votes
Dim varStatus() As String
Dim varCol As Variant
Dim varRow As Variant
Dim InxSplit As Long
Dim nCol As Long
varStatus = VBA.Split(strStatus, vbLf)
If UBound(varStatus) > 0 Then
For InxSplit = 0 To UBound(varStatus)
nRow = nRow + 1
' split each row
varRow = VBA.Split(varStatus(InxSplit), ";")
nCol = 1
For Each varCol In varRow
objExcelWorksheet.Cells(nRow, nCol).Value = varCol
nCol = nCol + 1
Next varCol
Next
End If
'Save the new Excel file
objExcelWorksheet.Columns("A:B").AutoFit
strExcelFile = "l:\Voting Results " & Format(Now, "YYYY-MM-DD hh-mm-ss") & ".xlsx"
objExcelWorkbook.Close True, strExcelFile
MsgBox "Complete!", vbExclamation
End Sub