在VBA上自动发送邮件在第二次迭代中失败

时间:2019-07-17 15:06:36

标签: excel vba automation

我修改了VBA代码以发送到X邮件地址X附件。在第一次迭代中,代码可以完美运行,邮件将以正确的文件原样发送。在第二次迭代中,代码在附加文件时停止(在objMail.Attachments.Add archivoFuente行上显示此屏幕:​​

Se ha producido el error...

我的代码从第一张纸中获取主数据,其中第二列中包含邮件地址,而用户名和文件扩展名中的文件名都经过了标准化处理,第三列中。完成文件名后,将其附加到目录,然后添加正文,主题和其他内容供用户在邮件中查看,最后发送邮件,并清空字符串变量以开始文本迭代,但是随后遇到即使文件夹中的文件以及与标准文件名相同的文件名也会出现错误...

Sub bulkMail()
Dim outlookApp As Outlook.Application
Dim objMail As Outlook.MailItem
Dim archivoFuente, toMail, ccMail As String
Dim i, j As Integer
Dim fila As Long

fila = Cells(Rows.Count, 2).End(xlUp).Row

'On Error Resume Next

Set outlookApp = New Outlook.Application
Set objMail = outlookApp.CreateItem(olMailItem)

For i = 2 To fila

    toMail = Cells(i, 2) ' & ";"
    archivoFuente = "C:\Users\..." & Cells(i, 3)
    objMail.Attachments.Add archivoFuente ' on the second iteration, stops here

    ThisWorkbook.Save
    'archivoFuente = ThisWorkbook.FullName
    'objMail.Attachments.Add archivoFuente

    objMail.To = toMail
    objMail.Subject = "TEST"
    objMail.Body = "LOREM," & vbNewLine & "IPSUM." & vbNewLine & "BYE."

    objMail.Send

    toMail = ""
    archivoFuente = ""

Next i

MsgBox "DONE!"

End Sub

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

简单的解决方法:将Set objMail = outlookApp.CreateItem(olMailItem) 移入循环中。

每行需要一个新的邮件项目。代码原样失败,因为您试图将文件附加到刚发送的电子邮件中(第一次迭代)。

您可以解决的其他问题:

  • Dim archivoFuente, toMail, ccMail As String-只有ccMailString。您正在寻找Dim archivoFuente As String, toMail As String, ccMail As String
  • Dim i, j As Integer-应该为Dim i As Long, j As Long。 Excel具有超过Integer无法处理的行。