用于多个匹配单元检测的宏

时间:2015-03-25 05:34:40

标签: excel vba excel-vba outlook

我正在实现一个宏,它检查E列是否有距当前日期7天的日期。

如果单元格日期 - 当前日期= 7

然后发送包含具有匹配单元格的行的电子邮件。 这是我的编码,它成功运作,除了一个问题。

Sub Workbook_Open()

Dim rngStart As Range
Dim rngEnd As Range
Dim rngCell As Range
Dim strHtmlHead As String
Dim strHtmlFoot As String
Dim strMsgBody As String
Dim strMsgBody1 As String
Dim strMsg As String
Dim objEmail As Object
Dim OutlookApp As Object
Dim OutlookMail As Object

'On Error GoTo ErrHnd

'only run if between midnight and 2AM
'If Hour(Now) < 2 Then

'setup basic HTML message header and footer


'setup start of body of message
strMsgBody = "The following task(s) are due in less than 7 days :"

'Worksheet name
With Worksheets("Sheet1")
    'set start of date range
    Set rngStart = .Range("E1")
    'find end of date range
    Set rngEnd = .Range("E" & CStr(Application.Rows.Count)).End(xlUp)

    'loop through all used cells in column G
    For Each rngCell In .Range(rngStart, rngEnd)
        'test if date is equal to 7 days from today
        If IsDate(rngCell.Value) Then
        If rngCell.Value - Int(Now) = 7 Then
            'add to message - use task name from column A (offset -3)
            'change as required
            strMsgBody1 = strMsgBody & "<Br>" & "<Br>" & "Task: " & rngCell.Offset(0, -3).Text _
                & " is due on  " & rngCell.Text & "<Br> " & "<Br> " & "Therefore please take necessary action"
        End If
        End If
    Next rngCell

    'Note last test time/date
    rngEnd.Offset(1, -3) = Now
    rngEnd.Offset(1, -3).NumberFormat = "dd/mm/yy"
End With

'put message together
strMsg = strMsgBody1

'test message
'MsgBox strMsg

'create the e-mail object


Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)

With OutlookMail

.To = "adrianadriananthony@outlook.com"
.CC = ""
.BCC = ""
.Subject = "Task Alert"
.HTMLBody = strMsg
.Send
End With


Set OutlookMail = Nothing
Set OutlookApp = Nothing

Application.DisplayAlerts = True
Application.ScreenUpdating = True


'remove the e-mail object

Exit Sub

'error handler
ErrHnd:
Err.Clear

End Sub

当有两个或多个记录的日期与标准匹配时

单元格日期 - 当前日期= 7

然后电子邮件中只显示一条记录并发送到电子邮件地址。

例如,有三条记录如下所示:

enter image description here

并且仅检测到第三条记录并将其附加到电子邮件正文中。

我需要知道为什么会这样? 如何编辑我的代码以更正此问题?

1 个答案:

答案 0 :(得分:1)

要解决此问题,请删除strMsgBody1声明并将所有匹配项替换为strMsgBody。你不需要第二个变量。