首页 > 解决方案 > 从 Excel - 使用 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

标签: vbaoutlook

解决方案


我要调查的第一个问题是Sheet1. 表单的工作表名称SheetN是 Excel 的工作表内部名称。创建工作簿的第一个工作表时,Sheet1is Worksheets("Sheet1")Sheet2isWorksheets("Sheet2")等等。但是,一旦您开始重命名或移动工作表,这种对应关系就会丢失。我怀疑Sheet1不是包含电子邮件详细信息的工作表。

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

如果您查看 VBA 编辑器的资源管理器面板,您将看到如下内容:

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

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

如果工作簿有一个工作表,则将名称保留为默认的“Sheet1”也许是可以接受的。我认为最好将工作表重命名为有意义的名称,例如“EmailDetails”。当您在 6 个月或 12 个月后返回此工作簿时,有意义的名称会使您更容易理解工作簿。

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

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

最后,我会Sheet1WshtEmail.


推荐阅读