如何在Excel VBA中运行多个“For / Each”循环

时间:2015-02-13 01:11:54

标签: excel vba

我正在使用Excel文档自动化VBA电子邮件附件脚本。数据集如下所示

 File Name      Email     Body
 Sample 1       john@     Hello!
 Sample 2       mary @    Hello!

我正在尝试做什么告诉excel在“email”列下为每个人创建一封电子邮件,然后在电子邮件正文的“正文”列中写下该文本,然后查找并附加在“文件名”列下找到其姓名的文件。所以John @会收到一封带有“Hello!”主体的电子邮件。和样本1附件。

对于每个循环,这将需要三个单独的,这让我很困惑:

到目前为止,这是我的代码,但所有这些都是找到附件:

Sub Attachment()


Dim colb As Range, mycell As Range, mycell2 As Range, mycell3 As Range
Set colb = Range(Range("B2"), Range("B2").End(xlDown))
Set colc = Range(Range("C2"), Range("C2").End(xlDown))
Set cold = Range(Range("D2"), Range("C2").End(xlDown))


For Each mycell In colb

Dim path As String
path = mycell.Value


Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    Set myAttachments = OutMail.Attachments

On Error Resume Next
With OutMail
    .To = ""
    .CC = ""
    .BCC = ""
    .Subject = "Test"
    .Body = ""
    .Display
End With
On Error GoTo 0

myAttachments.Add "C:\R\" & path

Set OutMail = Nothing
Set OutApp = Nothing

Next

End Sub

1 个答案:

答案 0 :(得分:1)

我不是100%肯定你在说什么,因为我不认为需要3个循环。你能不能只将代码更新到这个?

With OutMail
    .To = mycell.Offset(0, 1).Text
    .CC = ""
    .BCC = ""
    .Subject = "Test"
    .Body = mycell.Offset(0, 2).Text
    .Display
End With

这将引用和偏离mycell以获取收件人和正文

在这种情况下,你可以将整个程序砍下来:

Sub Attachment()
Dim colb As Range, mycell As Range
Set colb = Range(Range("B2"), Range("B2").End(xlDown))
For Each mycell In colb
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    Set myAttachments = OutMail.Attachments
    On Error Resume Next
    With OutMail
        .To = mycell.Offset(0, 1).Text
        .Subject = "Test"
        .Body = mycell.Offset(0, 2).Text
        .Display
    End With
    myAttachments.Add "C:\R\" & mycell.Text
    Set OutMail = Nothing
    Set OutApp = Nothing
    Next
End Sub
相关问题