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

我正在执行一个macros来检查E列date是否离当前date7天。

如果单元格date – 当前date= 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 

如果有两个或更多logging与date相符,则符合标准

细胞date – 当前date= 7

那么只有一个logging显示在电子邮件中并发送到电子邮件地址。

例如有三条logging如下所示:

在这里输入图像说明

并且只有第三个logging被检测到并附加到电子邮件的正文。

我需要知道为什么会发生这种情况? 我如何编辑我的代码来纠正?

要解决这个问题,请删除strMsgBody1声明,并用strMsgBodyreplace每个发生的strMsgBody 。 你不需要第二个variables。