我有一个表,该表包含从行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
答案 0 :(得分:0)
我要调查的第一个问题是Sheet1
。格式为SheetN
的工作表名称是Excel在工作表中使用的内部名称。创建工作簿的第一个工作表时,Sheet1
是Worksheets("Sheet1")
,Sheet2
是Worksheets("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
。