vba - 从 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
解决方案
我要调查的第一个问题是Sheet1
. 表单的工作表名称SheetN
是 Excel 的工作表内部名称。创建工作簿的第一个工作表时,Sheet1
is Worksheets("Sheet1")
、Sheet2
isWorksheets("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")
最后,我会Sheet1
用WshtEmail
.
推荐阅读
- ruby-on-rails - 如何处理 Rails 中特定于环境的设置?
- gitlab - 如何在 GitLab CI 上的多项目管道中运行作业到作业的链接
- ios - 滑动单元格以从 Core Data 更改当前单元格内的值
- excel - 我可以在没有 VBA 的情况下连接数组的每个值吗?
- asp.net-core - 我可以强制 MVC-6-Grid 理解字段上的数据注释吗
- php - 从正则表达式中排除符号 [PHP]
- windows - Excel 2010 COUNTIF():您键入的公式包含错误
- python - 根据另一列在 pandas 中创建一个特征
- kubernetes - 本地持久卷中的容量
- python - 为什么在赋值之前引用局部变量'x'虽然我在赋值后使用它