For Each循环跳过数组中的第一项

时间:2017-06-28 00:26:21

标签: excel-vba vba excel

我使用了Ron de Bruin的Outlook电子邮件生成器,对.To,.CC,.Subject,.Body字段进行了一些修改。我还包括一些编码,以便将发票文件附加到电子邮件中。

将跳过附件列表中的第一个组。

Sub Create_Email()
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Don't forget to copy the function RangetoHTML in the module.
'Working in Excel 2000-2016
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim StrBody As String
    Dim Bundle As Variant, Group As Variant
        Bundle = Split(Worksheets("Extra").Range("G2").Value, ",")
        StrBody = Range("D5").Value & "<br>" & _
                  Range("D6").Value & "<br>" & _
                  Range("D7").Value & "<br>" & _
                  Range("D8").Value & "<br>" & _
                  Range("D9").Value & "<br><br><br><br>"
        mola = Range("B2").Value
        maybe = Format(mola, "mm")
        real = Format(mola, "mmmm yyyy")
        nope = Format(mola, "yyyy")
        InvPath = ("U:\BILLREC\M & R EG Billing\Invoices\" & nope & "\" & maybe & " " & real & "\" & "Electronic Invoices" & "\")

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = Range("C2").Value
        .CC = Range("D2").Value
        .Subject = Range("C5").Value
        .HTMLBody = StrBody
        For Each Group In Bundle
            pdfFile = "Group" & Group & ".pdf"
            .Attachments.Add InvPath & pdfFile
        Next Group
        For Each Group In Bundle
            xlsFile = "Group" & Group & ".xlsx"
            .Attachments.Add InvPath & xlsFile
        Next Group
        .Display
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

&#34;捆绑&#34;数组源自工作簿本身的vlookup,基于组号,采用####,####,##,####格式。

最终,除非文件没有使用我们的标准命名约定命名,否则它会起作用,或者它是列表中的第一个组号。

如果有一个&#34;组&#34;数字,它根本不附加文件。 (我认为这个问题是出于同样的原因 - 它是数组中的第一个项目。)

1 个答案:

答案 0 :(得分:0)

非常感谢你/ barrow,他的建议让我看到它在项目计数中真正缺少Bundle(0)。

  

您可以尝试在GetAttr之后添加快速健全性检查   创建InvPath - GetAttr只返回一些文件属性或   如果文件不存在则抛出错误53。尝试:MsgBox InvPath&amp;   &#34;组&#34; &安培;捆绑(0)&amp; &#34; .PDF&#34; &安培; &#34; :&#34; &安培; GetAttr(InvPath&amp;&#34; Group&#34;&amp;   捆绑(0)&amp; &#34; .pdf&#34;)如果这不会引发错误,那么至少我们   可以说文件存在

我的解决方案是将一个额外的分隔符连接到分割的源单元格中。因此,Worksheets("Extra").Range("G2").Value会返回=CONCATENATE(","," ",VLOOKUP(Interface!A2,Data!A:D,4,FALSE))而不是VLOOKUP(Interface!A2,Data!A:D,4,FALSE).的结果。它似乎是伏都教,但它强制拆分以识别Bundle = Split(Worksheets("Extra").Range("G2").Value, ",")中的第一个分隔符,从而识别第一个项目在集合中。

感谢大家,感谢您的帮助!