【问题标题】:When a date is Entered the Macro will run输入日期后,宏将运行
【发布时间】:2018-12-04 12:17:18
【问题描述】:

如何添加在输入日期时自动运行的代码。如果代码包含其他单元格 - 是否需要先填充它们。这个想法是输入今天的日期并发送电子邮件。代码电子邮件有效,但我需要代码自动运行。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If IsDate(Range("A1").Value) Then
    'MsgBox "Plase enter a date in A1"
    'response = MsgBox(msg, vbYesNo)
    'If response = vbYes Then
    email
Else
End If
'End If
End Sub


Sub email()

Dim r       As Range
Dim cell    As Range

Set r = Range("A1:S20")

For Each cell In r

    If cell.Value = Date Then

        Dim Email_Subject, Email_Send_From, Email_Send_To, _
            Email_Cc, Email_Bcc, Email_Body As String
        Dim Mail_Object, Mail_Single As Variant

        Email_Subject = Cells(cell.Row, "C").Value
        Email_Send_From = "Jean@test.com"
        Email_Send_To = "Joe@test.com"
        Email_Cc = ""
        Email_Bcc = ""
        Email_Body = "Hi " & Cells(cell.Row, "c").Value _
                     & vbNewLine & vbNewLine & _
                     Cells(cell.Row, "D").Value & _
                     " has been submited"

        On Error GoTo debugs
        Set Mail_Object = CreateObject("Outlook.Application")
        Set Mail_Single = Mail_Object.CreateItem(0)
        With Mail_Single
            .Subject = Email_Subject
            .To = Email_Send_To
            .cc = Email_Cc
            .BCC = Email_Bcc
            .Body = Email_Body
            .send
        End With

    End If

Next


Exit Sub

debugs:
If Err.Description <> "" Then MsgBox Err.Description
End Sub

【问题讨论】:

    标签: excel vba date email


    【解决方案1】:

    我相信这就是你想要的。当A1 中的值更新时,它将首先验证条目是否为日期。如果输入的日期无效,您将收到代码中的第一个MsgBox

    如果条目有效日期,系统将询问用户是否要发送电子邮件。如果他们选择No,宏将结束。如果他们选择Yes,您的电子邮件子将开始执行。

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim Response As String
    
    If Not IsDate(Range("A1").Value) Then
        MsgBox "Plase enter a valid date in A1"
    Else
        Response = MsgBox("Do you want to send email?", vbYesNo)
        If Response = vbYes Then Call Email
    End If
    
    End Sub
    

    如果您不希望用户必须选择YesNo 来发送电子邮件,并且希望在A1 中的条目被验证为日期后立即发生,然后更改您对此的 IF 声明:

    If Not IsDate(Range("A1").Value) Then
        MsgBox "Plase enter a valid date in A1"
    Else
        Call Email
    End If
    

    旁注

    您还应该将其更新为仅在更改某个范围(或者在这种情况下可能是单个单元格)时执行。否则,宏将在任何单元格更改时触发。相反,确定应该触发此宏的范围,然后在更改的单元格与您的预定范围重叠(或Intersects)时调用宏。

    【讨论】:

    • 谢谢。我会申请并回复评论。
    • 我提出了这个问题,并正在使用效果很好的第二种解决方案。
    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多