Excel VBA创建错误

时间:2015-06-30 17:19:37

标签: excel vba excel-vba

我正在尝试编写一个宏来阅读电子表格。每当某人有一年或更晚的任务时,都会发送他们的主管电子邮件。

我想出了如何向每位主管发送一封电子邮件,但我想知道我是否可以扫描所有人并将其添加到一封电子邮件中。我试图修改它,但我无法得到它(这是我VBA的第二天,呵呵)

Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range

Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")

On Error GoTo cleanup
For Each cell In Columns("D").Cells.SpecialCells(xlCellTypeConstants)
    If cell.Value Like "?*@?*.?*" And _
       LCase(Cells(cell.Row, "E").Value) = "yes" _
       And LCase(Cells(cell.Row, "H").Value) <> "send" Then

        Set OutMail = OutApp.CreateItem(0)

        On Error Resume Next
        With OutMail
            .To = cell.Value
            .Subject = "Reminder"
            If Cells(cell.Row, "E").Value = "YES" Then
                .body = Cells(cell.Row, "B") & " " & Cells(cell.Row, "A")
                .Send

                On Error GoTo 0
                Cells(cell.Row, "H").Value = "send"
                Set OutMail = Nothing

    End If
Next cell

cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:0)

这是未经测试的,但请告诉我它的工作原理:

Sub test()
Dim OutApp        As Object
Dim OutMail       As Object
Dim cell          As Range
Dim bodyText      As String  'this is new

Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")

bodyText = ""

On Error GoTo cleanup
For Each cell In Columns("D").Cells.SpecialCells(xlCellTypeConstants)
    If cell.Value Like "?*@?*.?*" And LCase(Cells(cell.row, "E").Value) = "yes" And LCase(Cells(cell.row, "H").Value) <> "send" Then
        Set OutMail = OutApp.CreateItem(0)

        On Error Resume Next

        With OutMail
            .To = cell.Value
            .Subject = "Reminder"
            If Cells(cell.row, "E").Value = "YES" Then
                'The next line should add the text, and a new line character, so the next cell that needs this will simply be added to the string
                bodyText = Cells(cell.row, "B") & " " & Cells(cell.row, "A") & vbCrLf
            End If
        End With

        On Error GoTo 0
        Cells(cell.row, "H").Value = "send"
        Set OutMail = Nothing
    End If
Next cell

OutMail.body = bodyText
OutMail.Send

cleanup:
Set OutApp = Nothing
Application.ScreenUpdating = True

End Sub