VBA - объединение двух событий изменения рабочего листа - PullRequest
1 голос
/ 29 апреля 2020

После полудня,

У меня есть событие изменения рабочего листа, код которого приведен ниже:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("K6:K50")) Is Nothing Then
        If IsDate(Target) Then
            MsgBox "You have entered a date in Attempt 5, you must now send an email to request a text message chaser, click ok to open the email to be sent", vbOKOnly, "Warning"
            Send_Emails
        End If
    End If
End Sub

Sub Send_Emails()
'This code is early binding i.e in Tools > Reference >You have check "MICROSOFT OUTLOOK 14.0 OBJECT LIBRARY"

    Dim OutlookApp As Outlook.Application
    Dim OutlookMail As Outlook.MailItem

    Set OutlookApp = New Outlook.Application
    Set OutlookMail = OutlookApp.CreateItem(olMailItem)

    With OutlookMail
        .BodyFormat = olFormatHTML
        .Display
        .HTMLBody = "<BODY style=font-size:11pt;font-family:Arial>Hi, <br> <br> Can a new text chaser be sent to the client of this file please? <br> <br> <br> <br> Thank you </BODY>" & .HTMLBody
        'last .HTMLBody includes signature from the outlook.
                                                   '<br> includes line breaks b/w two lines
        .To = "xxx"
        .CC = "xxx"
        .Subject = "New Text Message chaser request"
        .Display
    End With

End Sub

Это событие ищет дату в заданном диапазоне, а затем создает всплывающее окно, а затем, когда Ok нажимается, появляется сообщение электронной почты. Это отлично работает.

Теперь у меня есть следующий код:

Private Sub Worksheet_Selection_Change(ByVal Target As Range)
If Target.Column = 24 Then
    Target.Offset(1, -19).Select
End If
End Sub

Этот код из того, что я понимаю, должен активироваться, когда нажата клавиша enter в ячейке столбца X, а затем перейти к следующей пустой ячейке. в столбце E готов для ввода данных. Мне сказали, что вы не можете иметь более одного события worksheet_change на рабочем листе, есть ли способ заставить их обоих работать с одним листом, но не привязанными друг к другу, т.е. я хочу, чтобы они оба запускались независимо друг от друга.

Если это не может быть сделано, может ли кто-нибудь помочь мне выяснить, как go из ячейки в столбце X в следующую пустую ячейку в столбце E готово для следующей строки ввода данных?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Нашел ответ в другом месте,

Private Sub Worksheet_SelectionChange (ByVal Target As Range), если Target.CountLarge> 1, затем выйти из Sub, если Target.Column> 24, то Cells (Target.Row + 1, "E" ). Выберите End Sub

0 голосов
/ 29 апреля 2020

Просто переместите блок If Target.Column... в существующий Worksheet_Change:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("K6:K50")) Is Nothing Then
        If IsDate(Target) Then
            MsgBox "You have entered a date in Attempt 5, you must now send an email to request a text message chaser, click ok to open the email to be sent", vbOKOnly, "Warning"
            Send_Emails
        End If
    End If

    If Target.Column = 24 Then
        Target.Offset(1, -19).Select
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...