Когда дата введена, макрос запускается - PullRequest
0 голосов
/ 25 июня 2018

Как добавить код, который будет запускаться автоматически при вводе даты.Если код включает в себя другие ячейки - нужно ли их заполнять в первую очередь.Идея заключается в том, чтобы ввести сегодняшнюю дату и отправить электронное письмо.Код Email работает, но мне нужно, чтобы код запускался автоматически.

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

1 Ответ

0 голосов
/ 26 июня 2018

Я верю, что это то, что вы хотите.Когда значение в A1 обновляется, оно сначала проверяет, является ли запись датой.Если запись недействительна, вы получите первый код MsgBox.

Если запись является допустимой датой, пользователю будет предложено отправить электронное письмо.Если они выберут No, макрос закончится.Если они выберут Yes, ваш Email Sub начнет выполняться.

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

Если вы не хотите, чтобы пользователь выбирал Yes или No для отправки электронного письма, и вы хотите, чтобы это произошло, как только запись в A1 была проверенав качестве даты, затем измените свой оператор IF на следующее:

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

Примечание:

Вы также должны обновить его, чтобы оно выполнялось только тогда, когда определенный диапазон (или, возможно, отдельная ячейка вэтот случай) изменен.В противном случае макрос сработает при изменении ЛЮБОЙ ячейки.Вместо этого определите диапазон, который должен запускать этот макрос, а затем вызовите макрос, когда измененная ячейка перекрывается (или Intersects) с предварительно определенным диапазоном.

...