Send an email when workbook is saved

南笙酒味 提交于 2019-12-08 11:45:00

问题


I am trying to send an email that will update users of changes to a spread sheet. I am trying to make it so that when the document is saved there will be an email automatically sent with a list of the changes.

Does anyone know if it is possible to automate email upon saving the document?


回答1:


You can use this code here not fancy as Chip Pearson but easy to understand, This method also relies on using outlook:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Outlook As Object, EMail As Object

Set Outlook = CreateObject("Outlook.Application")

Set EMail = Outlook.CreateItem(0)

With EMail
    .To = "EmailAddress1@Server.com; Email2@aol.com"
    .CC = ""
    .BCC = ""
    .Subject = "Put your subject here"
    .Body = "Add you E-Mail Message Here"
    .Attachments.Add ActiveWorkbook.FullName ' To add active Workbook as attachment
    .Attachments.Add "C:\Test.xlsx" ' To add other files just use path, Excel files, pictures, documents pdf's ect.
    .Display   'or use .Send to skip preview
End With


Set EMail = Nothing

Set Outlook = Nothing

End Sub

To set this up Here is the full guide:

First open up the VBA window using ALT + F11 then Select Worbook on the window to the right, Then workbook from the drop down:

Then from the Drop down on the right Select BeforeSave:

Then paste your code there:

You should end with this:




回答2:


It should be. You'll need to place your code in the Workbook_BeforeSave event, so it is triggered when the workbook is saved.

Chip Pearson has a good article on Sending E-mail from VBA




回答3:


You need to put the code in ThisWorkbook code section. Workbook_BeforeSave event is triggered before workbook is save. Hope below code gives you an idea how it can be accomplished.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Identify here list of changes
    ' You can pass as a string to SendMail

    Dim strChanges As String
    strChanges = "test"

    SendMail strChanges

End Sub


Sub SendMail(msg As String)

    Dim iMsg As Object
    Dim iConf As Object
    Dim Flds As Variant


    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")

    iConf.Load -1
    Set Flds = iConf.Fields

'Configure the below details

    With Flds
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "test-002"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Update
    End With

    With iMsg

        Set .Configuration = iConf
        .To = "test@gmail.com"
        .From = "test@gmail.com"
        .Subject = "msg" & " " & Date & " " & Time
        .TextBody = msg
        .Send
    End With

    Set iMsg = Nothing
    Set iConf = Nothing

End Sub


来源:https://stackoverflow.com/questions/16964917/send-an-email-when-workbook-is-saved

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!