从Excel-使用VBA代码满足条件时发送电子邮件提醒

时间:2019-07-02 05:01:13

标签: vba outlook outlook-vba

我有一个表,该表包含从行1到200和从行A到T的数据,我需要VBA代码才能将电子邮件提醒发送给多个收件人。表格中有一些日期,我使用过if条件,并通过定义将返回"YES"的列来到达日期。凡出现YES的地方,都应发送带有相应主题(Column K)的相应邮件(Column C

我能够创建定义和创建邮件并发送邮件。但无法使用for循环和IF条件来匹配条件,并无法使用.to = ""发送到收件人列表

Sub Sendmail()

Dim ol As Outlook.Application
Dim olmail As Outlook.MailItem


Set ol = New Outlook.Application

For i = 1 To Sheet1.Cells(Rows.Count, 16).End(xlUp).Row

    Set olmail = ol.CreateItem(olMailItem)
    With olmail
        .To = Sheet1.Cells(i, 16).Value
        .Subject = Sheet1.Cells(i, 3).Value & Sheet1.Cells(i, 4).Value
        .Body = Range("C2").Value
        .Display
        '.send

    End With

Next

 Set ol = Nothing
 Set olmail = Nothing

End Sub

Outlook应用程序正在打开,但没有邮件ID

1 个答案:

答案 0 :(得分:0)

我要调查的第一个问题是Sheet1。格式为SheetN的工作表名称是Excel在工作表中使用的内部名称。创建工作簿的第一个工作表时,Sheet1Worksheets("Sheet1")Sheet2Worksheets("Sheet2"),依此类推。但是一旦开始重命名或移动工作表,这种对应关系可能会丢失。我怀疑Sheet1不是包含电子邮件详细信息的工作表。

注意:“ Sheet1”是英文版Excel中第一个工作表的默认名称。如果您的语言不是英语,则默认名称可能适合您的语言。

如果您查看VBA编辑器的“资源管理器”面板,则会看到以下内容:

 VBAProject (YourNameForWorkbook.xlsm)
  - Microsoft Excel Objects
      Sheet1 (YourNameForWorksheet1)
      Sheet2 (YourNameForWorksheet2)
  - Microsoft Excel Objects
      Module1
      YourNameForModule

负号放在方盒中。如果有加号,则不会扩展该组。单击加号展开。 Sheet1是您期望的工作表吗?如果没有,下面的说明将有所帮助。如果Sheet1是您期望的工作表,我们将需要寻找其他原因。

如果工作簿只有一个工作表,则可以将名称保留为默认的“ Sheet1”。我认为始终最好将工作表重命名为有意义的名称,例如“ EmailDetails”。当您在六到十二个月内返回此工作簿时,有意义的名称使理解工作簿变得容易得多。

接下来,我将再添加两个语句:

Dim WshtEmail As Worksheet
Set WshtEmail = Worksheets("EmailDetails")

最后,我将每个Sheet1替换为WshtEmail