Как мне отредактировать мой код VBA из Excel, чтобы включить определенную строку в тему, если выполнены условия? - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно знать, как автоматически изменить мою тему письма на имя в столбце A, если соответствующий столбец FH равен утвержденному или ожидающему рассмотрения.У меня есть 2 электронных письма, которые срабатывают на основе значений ячейки, равных утвержденным и ожидающим рассмотрения, но мне нужно, чтобы в теме содержалось имя человека "Столбец А", если F, G, ИЛИ H меняются

Я разместил свой код ниже,любая помощь будет принята с благодарностью.

Sub Approved()

Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "Team," & vbNewLine & vbNewLine & _
"Approved. Update us when completed." & vbNewLine & _
"HR"

On Error Resume Next

With OutMail
.To = ""
.CC = ""
.BCC = ""
.Subject = "Term Request: 1/1 Test Approved"
.body = strbody
.Display

End With

On Error GoTo 0

Set OutMail = Nothing

Set OutApp = Nothing
End Sub

Private Sub CommandButton1_Click()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "Team," & vbNewLine & vbNewLine & _

On Error Resume Next

With OutMail
.To = ""
.CC = ""
.BCC = ""
.Subject = "Term Request: 1/1 Test"
.body = strbody
.Display

 End With

On Error GoTo 0

Set OutMail = Nothing

Set OutApp = Nothing
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("F3:H14")) Is Nothing Then

    Select Case Target.Value

    'if Pending: Send term Email
        Case "Pending"
                Call CommandButton1_Click

    'If Approved: Send Approval Email
        Case "Approved"
                Call Approved
    End Select

    End If
 End Sub

1 Ответ

0 голосов
/ 22 февраля 2019

Прежде всего, вам необходим цикл через все ячейки в Target, потому что Target не обязательно является одной ячейкой, но может быть диапазоном нескольких ячеек, и ваш код не будет работать на этом.

Вам нужно настроить ваши процедуры (например, Sub Approved), чтобы они принимали параметр PersonName, который используется для субъекта:

Sub Approved(ByVal PersonName As String)
    'your code …

    .Subject = "Term Request: 1/1 Test for " & PersonName

    'your code …
End Sub

И, наконец, вам нужно прочитать столбец A измененной ячейки вваше событие Worksheet_Change и укажите его в качестве параметра для вашей процедуры Approved PersonName:=Target.Parent.Cells(Cell.Row, "A")

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Target.Parent.Range("F3:H14"))

    If Not AffectedRange Is Nothing Then
        Dim Cell As Range
        For Each Cell In AffectedRange.Cells 'loop through all changed cells

            Select Case Cell.Value
                Case "Pending"  'if Pending: Send term Email
                    CommandButton1_Click PersonName:=Target.Parent.Cells(Cell.Row, "A").Value

                Case "Approved" 'If Approved: Send Approval Email
                    Approved PersonName:=Target.Parent.Cells(Cell.Row, "A").Value
            End Select

        Next Cell
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...