Reply all intercept Outlook 2010

Status
Not open for further replies.

markyy

Member
Outlook version
Outlook 2010 64 bit
Email Account
Exchange Server 2010
So I am an intern with very little VB experience, but my employer has tasked me with *attempting* to find or create a macro to intercept the reply all action to prompt a dialog box with options for "Yes" and "No". I found a few scripts that are similar to what we need the majority did not work at all, though the one posted at http://www.outlookcode.com/codedetail.aspx?id=1299 prompted the dialog box. It did so on both reply and reply all. If you choose the "no" option in that script it brings you to the message replying to the sender (Which I along with a few on my team like) BUT management wants it to basically do nothing if you say no. The script that I have now is an edited version of the script posted in the link above. Could anyone steer me in the right direction with this? Or link me to a script that is known to work?

Thanks.


Dim WithEvents colInsp As Outlook.Inspectors
Dim WithEvents msg As Outlook.mailItem
Dim replyAll As Boolean
Dim oLook As Outlook.Application

Private Sub Application_Startup()
Set colInsp = Application.Inspectors

End Sub

Private Sub colInsp_NewInspector(ByVal Inspector As Inspector)

Dim mymsg As String
Dim myResult As Integer
Dim count As Integer
Dim i As Integer
On Error Resume Next

If TypeOf Inspector.CurrentItem Is Outlook.mailItem Then


Set msg = Inspector.CurrentItem
' check if new item
If msg.Size = 0 Then
' check if replyall
If msg.Recipients.count > 1 Then
mymsg = "Do you really want to reply to all original recipients?"
myResult = MsgBox(mymsg, vbYesNo, "Flame Protector")
If myResult = vbNo Then
' remove all recipients except the first one


replyAll = False


'count = msg.Recipients.count
'For i = count To 2 Step -1
' msg.Recipients.Remove i
'Next
End If
End If
End If
Set msg = Nothing
End If
End Sub

Private Sub msg_Open(Cancel As Boolean)
If replyAll = False Then
Cancel = True
End If
End Sub

Private Sub msg_ReplyAll(ByVal Response As Object, Cancel As Boolean)
If replyAll = False Then
Cancel = True
End If
End Sub
 

markyy

Member
Outlook version
Outlook 2010 64 bit
Email Account
Exchange Server 2010
Sorry I didnt have the code in this format in the first post.


Code:
Dim WithEvents colInsp As Outlook.Inspectors
Dim WithEvents msg As Outlook.mailItem
Dim replyAll As Boolean
Dim oLook As Outlook.Application

Private Sub Application_Startup()
    Set colInsp = Application.Inspectors
   
End Sub

Private Sub colInsp_NewInspector(ByVal Inspector As Inspector)
   
    Dim mymsg As String
    Dim myResult As Integer
    Dim count As Integer
    Dim i As Integer
    On Error Resume Next
    
    If TypeOf Inspector.CurrentItem Is Outlook.mailItem Then

   
        Set msg = Inspector.CurrentItem
        ' check if new item
        If msg.Size = 0 Then
            ' check if replyall
            If msg.Recipients.count > 1 Then
                mymsg = "Do you really want to reply to all original recipients?"
                myResult = MsgBox(mymsg, vbYesNo, "Flame Protector")
                If myResult = vbNo Then
                    ' remove all recipients except the first one
                  
                  
               replyAll = False

                                       
                    'count = msg.Recipients.count
                    'For i = count To 2 Step -1
                     '   msg.Recipients.Remove i
                    'Next
                End If
            End If
        End If
        Set msg = Nothing
    End If
End Sub

Private Sub msg_Open(Cancel As Boolean)
If replyAll = False Then
Cancel = True
End If
End Sub
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
That seems like a lot of code just to check when the Replyall button is clicked. The code from outlookcode.com checks the recipient count on the message after it opens (that is the NewInspector), so it's going to leave the compose message open. This one traps the ReplyAll button click and lets you cancel it.
Code:
Option Explicit
Private WithEvents oExpl As Explorer
Private WithEvents oItem As MailItem
Dim oResponse As MailItem
Dim myAddy As String
Private bDiscardEvents As Boolean


Private Sub Application_Startup()
  Set oExpl = Application.ActiveExplorer
  bDiscardEvents = False
End Sub

Private Sub oExpl_SelectionChange()
  On Error Resume Next
  Set oItem = oExpl.Selection.Item(1)
End Sub

Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)
 
  If MsgBox("Are you sure you want to reply to all of the senders of this message?" _
  , vbYesNo + vbQuestion, "Confirm Reply To All") = vbNo Then
  Cancel = True
  End If
End Sub
 

markyy

Member
Outlook version
Outlook 2010 64 bit
Email Account
Exchange Server 2010
That seems like a lot of code just to check when the Replyall button is clicked. The code from outlookcode.com checks the recipient count on the message after it opens (that is the NewInspector), so it's going to leave the compose message open. This one traps the ReplyAll button click and lets you cancel it.
Code:
Option Explicit
Private WithEvents oExpl As Explorer
Private WithEvents oItem As MailItem
Dim oResponse As MailItem
Dim myAddy As String
Private bDiscardEvents As Boolean


Private Sub Application_Startup()
  Set oExpl = Application.ActiveExplorer
  bDiscardEvents = False
End Sub

Private Sub oExpl_SelectionChange()
  On Error Resume Next
  Set oItem = oExpl.Selection.Item(1)
End Sub

Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)

  If MsgBox("Are you sure you want to reply to all of the senders of this message?" _
  , vbYesNo + vbQuestion, "Confirm Reply To All") = vbNo Then
  Cancel = True
  End If
End Sub

Awesome this worked great!! Now is there a way to distribute this to other machines? I tried sending over "ThisOutlookSession.cls" But that did not work. I also looked into using Visual Studio to create a com-Addin, but I feel like that is putting myself in way over my head. Like I said I am very new to all of this so every bit of help I get is awesome. Thanks again Diane!
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Outlook VBA is not easy to deploy. You can distribute the entire project file (*.otm), which would replace an existing project file, though. Deploying a single file works, too, you just need to import it manually.

BTW: There's one situation where the shown code doesn't work. If you right click on a message in the folder view that's not selected already, then the SelectionChange event doesn't trigger (which I consider a bug), thus you won't reveive the item's events.
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
You can't install macros automatically - but you can send everyone a text file with the code and instructions to set it up.
 
Status
Not open for further replies.
Top