使用VBA在工作表中发送包含地址的电子邮件

时间:2019-06-19 10:58:25

标签: excel vba outlook

我有一个名为“测试”的工作表,其中A列是电子邮件地址列表。 我想向所有地址发送电子邮件,并使用以下代码

Sub EmailSend()

Dim objOutlook As Object
Dim objMail As Object
Dim i As Integer


Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)


For i = 1 To 10


With objMail
   .to = Sheets("Test").Range("A" & i).Value
   .Subject = "hi"
   .body = _ 
      "Hi " & Sheets("Test").Range("B" & i) & Sheets("links").Range("G" & 1)
   .send
End With
Next i


End Sub

不幸的是,该makro只向A1中的地址发送了一封电子邮件,然后在行.to = Sheets("Test").Range("A" & i).Value中出现错误,错误消息显示:元素已移动或删除。

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

我猜您尝试发送的第二行可能有错误。因此,请使用下面的代码,并检查“立即”窗口中显示的内容。

更新: 我在CreateItem循环中添加了For行,并为每个邮件对其进行了重置。可能是错误消息所抱怨的邮件项目。

Sub EmailSend()

Dim objOutlook As Object
Dim objMail As Object
Dim i As Integer

Set objOutlook = CreateObject("Outlook.Application")

For i = 1 To 10
Set objMail = objOutlook.CreateItem(0)

With objMail
    Debug.Print Sheets("Test").Range("A" & i).Value
   .to = Sheets("Test").Range("A" & i).Value
   .Subject = "hi"
   .body = _
      "Hi " & Sheets("Test").Range("B" & i) & Sheets("links").Range("G" & 1)
   .display
   '.send
End With
Set objMail = Nothing

Next i

End Sub