Arrays 如何在VBA中使用.body上的集合项?

Arrays 如何在VBA中使用.body上的集合项?,arrays,excel,vba,loops,collections,Arrays,Excel,Vba,Loops,Collections,如何将内容集合插入电子邮件的.HTMLBody中 Option Explicit Dim Managers As Collection Sub PopulateManagers() Set Managers = New Collection Dim currWS As Worksheet Set currWS = ThisWorkbook.Worksheets("publico") With currWS Dim loopRange As R

如何将内容集合插入电子邮件的.HTMLBody中

Option Explicit

Dim Managers As Collection

Sub PopulateManagers()

    Set Managers = New Collection
    Dim currWS As Worksheet
    Set currWS = ThisWorkbook.Worksheets("publico")
    With currWS
        Dim loopRange As Range
        Set loopRange = .Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)) 'H2 to the last used row; assuming it's the column for manager emails
    End With
    Dim currCell As Range
    For Each currCell In loopRange
        If currCell.value = vbNullString Then 'no manager; try for a head manager
            If currCell.Offset(0, 1).value = vbNullString Then 'no managers at all
                Dim currManagerEmail As String
                currManagerEmail = "NoManagerFound"
            Else
                currManagerEmail = currCell.Offset(0, 1).Text
            End If
        Else
            currManagerEmail = currCell.Text
        End If
        Dim currManager As Manager
        Set currManager = Nothing
        On Error Resume Next
            Set currManager = Managers(currManagerEmail)
        On Error GoTo 0
        If currManager Is Nothing Then
            Set currManager = New Manager
            currManager.ManagerEmail = currManagerEmail
            Managers.Add currManager, Key:=currManager.ManagerEmail
        End If
        Dim currClient As Client
        Set currClient = New Client
        currClient.ClientID = currWS.Cells(currCell.Row, 1).Text 'assumes client ID is in column 1
        If currWS.Cells(currCell.Row, 1).Text <> "" Then
        currManager.Clients.Add currClient, Key:=currClient.ClientID
        Else: End If
    Next


    Dim OutlookApp As Object
    Dim emailformatado As Object
    Dim destinatario As String
    Dim comcopia As String
    Dim assunto As String
   'Dim body_ As String
    Dim anexo As String
    Dim corpodoemail As String
    Set OutlookApp = CreateObject("Outlook.Application")

    For Each currManager In Managers
     assunto = Sheets("CAPA").Range("F8").value 'Assunto do e-mail, conforme CAPA.
           'publicoalvo = cell.Offset(0, 2).Value
           'body_ = Sheets("CAPA").Range("D2").Value
            corpodoemail = Sheets("CAPA").Range("F11").value & "<br><br>" & _
            Sheets("CAPA").Range("F13").value & "<br><br>" '& _
            Managers & "<br><br><br>"
           'comcopia = cell.Offset(0, 3).Value         'Caso necessário, adaptar para enviar email com cópia.
           'anexo = cell.Offset(0, 4).Value            'Caso necessário, adaptar para incluir anexo ao email.

           'Montagem e envio dos emails.
            Set emailformatado = OutlookApp.CreateItem(0)
            With emailformatado
                .To = currManager.ManagerEmail
               '.CC = comcopia
                .Subject = assunto
                .HTMLBody = corpodoemail '& publicoalvo
                '.Attachments.Add anexo
                '.Display
            End With
            emailformatado.Send
            Next

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

End Sub
我从下面的代码中收集了一些项目,其中包含电子邮件地址及其相应的客户端。我必须在集合中循环,发送一封电子邮件,并在每封电子邮件中附加客户列表

Option Explicit

Dim Managers As Collection

Sub PopulateManagers()

    Set Managers = New Collection
    Dim currWS As Worksheet
    Set currWS = ThisWorkbook.Worksheets("publico")
    With currWS
        Dim loopRange As Range
        Set loopRange = .Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)) 'H2 to the last used row; assuming it's the column for manager emails
    End With
    Dim currCell As Range
    For Each currCell In loopRange
        If currCell.value = vbNullString Then 'no manager; try for a head manager
            If currCell.Offset(0, 1).value = vbNullString Then 'no managers at all
                Dim currManagerEmail As String
                currManagerEmail = "NoManagerFound"
            Else
                currManagerEmail = currCell.Offset(0, 1).Text
            End If
        Else
            currManagerEmail = currCell.Text
        End If
        Dim currManager As Manager
        Set currManager = Nothing
        On Error Resume Next
            Set currManager = Managers(currManagerEmail)
        On Error GoTo 0
        If currManager Is Nothing Then
            Set currManager = New Manager
            currManager.ManagerEmail = currManagerEmail
            Managers.Add currManager, Key:=currManager.ManagerEmail
        End If
        Dim currClient As Client
        Set currClient = New Client
        currClient.ClientID = currWS.Cells(currCell.Row, 1).Text 'assumes client ID is in column 1
        If currWS.Cells(currCell.Row, 1).Text <> "" Then
        currManager.Clients.Add currClient, Key:=currClient.ClientID
        Else: End If
    Next


    Dim OutlookApp As Object
    Dim emailformatado As Object
    Dim destinatario As String
    Dim comcopia As String
    Dim assunto As String
   'Dim body_ As String
    Dim anexo As String
    Dim corpodoemail As String
    Set OutlookApp = CreateObject("Outlook.Application")

    For Each currManager In Managers
     assunto = Sheets("CAPA").Range("F8").value 'Assunto do e-mail, conforme CAPA.
           'publicoalvo = cell.Offset(0, 2).Value
           'body_ = Sheets("CAPA").Range("D2").Value
            corpodoemail = Sheets("CAPA").Range("F11").value & "<br><br>" & _
            Sheets("CAPA").Range("F13").value & "<br><br>" '& _
            Managers & "<br><br><br>"
           'comcopia = cell.Offset(0, 3).Value         'Caso necessário, adaptar para enviar email com cópia.
           'anexo = cell.Offset(0, 4).Value            'Caso necessário, adaptar para incluir anexo ao email.

           'Montagem e envio dos emails.
            Set emailformatado = OutlookApp.CreateItem(0)
            With emailformatado
                .To = currManager.ManagerEmail
               '.CC = comcopia
                .Subject = assunto
                .HTMLBody = corpodoemail '& publicoalvo
                '.Attachments.Add anexo
                '.Display
            End With
            emailformatado.Send
            Next

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

End Sub
选项显式
作为集合的Dim管理器
次级人口管理者()
集合管理器=新集合
将当前文档作为工作表
设置currWS=ThisWorkbook.Worksheets(“publico”)
用咖喱
变暗范围作为范围
将loopRange=.Range(.Cells(2,8),.Cells(.UsedRange.Rows.Count,8))H2设置为最后使用的行;假设它是经理电子邮件的专栏
以
Dim Curr单元格作为范围
对于loopRange中的每个单元格
如果currCell.value=vbNullString,则“无管理器;试着找一个总经理
如果currCell.Offset(0,1).value=vbNullString,则“根本没有管理器”
Dim CURRMANAGERAMIL作为字符串
currmageremail=“NoManagerFound”
其他的
currManagerEmail=currCell.Offset(0,1).Text
如果结束
其他的
currManagerEmail=currCell.Text
如果结束
以经理身份任命经理
设置currManager=Nothing
出错时继续下一步
设置currManager=Manager(CurrManagerMail)
错误转到0
如果经理什么都不是
设置当前管理器=新管理器
currManager.ManagerEmail=currManagerEmail
Managers.Add currManager,Key:=currManager.ManagerEmail
如果结束
将客户机设置为客户机
Set currClient=新客户端
currClient.ClientID=currWS.Cells(currCell.Row,1).Text'假定客户端ID在第1列中
如果currWS.Cells(currCell.Row,1).Text“”,则
currManager.Clients.Add currClient,键:=currClient.ClientID
否则:如果
下一个
Dim OutlookApp作为对象
Dim emailformatado作为对象
作为字符串的模糊目标
朦胧的幻觉
像绳子一样暗的
“暗体”作为字符串
Dim anexo作为字符串
Dim corpodoemail作为字符串
设置OutlookApp=CreateObject(“Outlook.Application”)
对于经理中的每个经理
ASSUTO=工作表(“CAPA”)。范围(“F8”)。值“ASSUTO”用于发送电子邮件,确认CAPA。
'publicoalvo=cell.Offset(0,2).Value
“主体=板材(“CAPA”).范围(“D2”).值
corpodoemail=Sheets(“CAPA”).范围(“F11”).值和_
图纸(“CAPA”).范围(“F13”).值和_
经理&“


” 'comcopia=cell.Offset(0,3).Value'Caso necessário,adapter para enviar email comópia。 “anexo=cell.Offset(0,4).Value”Caso necessário,adapter para包括anexo ao电子邮件。 “Montagem e envio发送电子邮件。 设置emailformatado=OutlookApp.CreateItem(0) 用emailformatado .To=currManager.ManagerEmail “.CC=comcopia .Subject=assto .HTMLBody=corpodoemail'&publicoalvo '.Attachments.Add anexo "展示, 以 emailformatado.Send 下一个 应用 .EnableEvents=True .ScreenUpdate=True 以 端接头
收集工作正在很好地构建和存储信息,但我很难将这些信息转换为电子邮件

Option Explicit

Dim Managers As Collection

Sub PopulateManagers()

    Set Managers = New Collection
    Dim currWS As Worksheet
    Set currWS = ThisWorkbook.Worksheets("publico")
    With currWS
        Dim loopRange As Range
        Set loopRange = .Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)) 'H2 to the last used row; assuming it's the column for manager emails
    End With
    Dim currCell As Range
    For Each currCell In loopRange
        If currCell.value = vbNullString Then 'no manager; try for a head manager
            If currCell.Offset(0, 1).value = vbNullString Then 'no managers at all
                Dim currManagerEmail As String
                currManagerEmail = "NoManagerFound"
            Else
                currManagerEmail = currCell.Offset(0, 1).Text
            End If
        Else
            currManagerEmail = currCell.Text
        End If
        Dim currManager As Manager
        Set currManager = Nothing
        On Error Resume Next
            Set currManager = Managers(currManagerEmail)
        On Error GoTo 0
        If currManager Is Nothing Then
            Set currManager = New Manager
            currManager.ManagerEmail = currManagerEmail
            Managers.Add currManager, Key:=currManager.ManagerEmail
        End If
        Dim currClient As Client
        Set currClient = New Client
        currClient.ClientID = currWS.Cells(currCell.Row, 1).Text 'assumes client ID is in column 1
        If currWS.Cells(currCell.Row, 1).Text <> "" Then
        currManager.Clients.Add currClient, Key:=currClient.ClientID
        Else: End If
    Next


    Dim OutlookApp As Object
    Dim emailformatado As Object
    Dim destinatario As String
    Dim comcopia As String
    Dim assunto As String
   'Dim body_ As String
    Dim anexo As String
    Dim corpodoemail As String
    Set OutlookApp = CreateObject("Outlook.Application")

    For Each currManager In Managers
     assunto = Sheets("CAPA").Range("F8").value 'Assunto do e-mail, conforme CAPA.
           'publicoalvo = cell.Offset(0, 2).Value
           'body_ = Sheets("CAPA").Range("D2").Value
            corpodoemail = Sheets("CAPA").Range("F11").value & "<br><br>" & _
            Sheets("CAPA").Range("F13").value & "<br><br>" '& _
            Managers & "<br><br><br>"
           'comcopia = cell.Offset(0, 3).Value         'Caso necessário, adaptar para enviar email com cópia.
           'anexo = cell.Offset(0, 4).Value            'Caso necessário, adaptar para incluir anexo ao email.

           'Montagem e envio dos emails.
            Set emailformatado = OutlookApp.CreateItem(0)
            With emailformatado
                .To = currManager.ManagerEmail
               '.CC = comcopia
                .Subject = assunto
                .HTMLBody = corpodoemail '& publicoalvo
                '.Attachments.Add anexo
                '.Display
            End With
            emailformatado.Send
            Next

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

End Sub
如何将此信息转换为电子邮件

Option Explicit

Dim Managers As Collection

Sub PopulateManagers()

    Set Managers = New Collection
    Dim currWS As Worksheet
    Set currWS = ThisWorkbook.Worksheets("publico")
    With currWS
        Dim loopRange As Range
        Set loopRange = .Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)) 'H2 to the last used row; assuming it's the column for manager emails
    End With
    Dim currCell As Range
    For Each currCell In loopRange
        If currCell.value = vbNullString Then 'no manager; try for a head manager
            If currCell.Offset(0, 1).value = vbNullString Then 'no managers at all
                Dim currManagerEmail As String
                currManagerEmail = "NoManagerFound"
            Else
                currManagerEmail = currCell.Offset(0, 1).Text
            End If
        Else
            currManagerEmail = currCell.Text
        End If
        Dim currManager As Manager
        Set currManager = Nothing
        On Error Resume Next
            Set currManager = Managers(currManagerEmail)
        On Error GoTo 0
        If currManager Is Nothing Then
            Set currManager = New Manager
            currManager.ManagerEmail = currManagerEmail
            Managers.Add currManager, Key:=currManager.ManagerEmail
        End If
        Dim currClient As Client
        Set currClient = New Client
        currClient.ClientID = currWS.Cells(currCell.Row, 1).Text 'assumes client ID is in column 1
        If currWS.Cells(currCell.Row, 1).Text <> "" Then
        currManager.Clients.Add currClient, Key:=currClient.ClientID
        Else: End If
    Next


    Dim OutlookApp As Object
    Dim emailformatado As Object
    Dim destinatario As String
    Dim comcopia As String
    Dim assunto As String
   'Dim body_ As String
    Dim anexo As String
    Dim corpodoemail As String
    Set OutlookApp = CreateObject("Outlook.Application")

    For Each currManager In Managers
     assunto = Sheets("CAPA").Range("F8").value 'Assunto do e-mail, conforme CAPA.
           'publicoalvo = cell.Offset(0, 2).Value
           'body_ = Sheets("CAPA").Range("D2").Value
            corpodoemail = Sheets("CAPA").Range("F11").value & "<br><br>" & _
            Sheets("CAPA").Range("F13").value & "<br><br>" '& _
            Managers & "<br><br><br>"
           'comcopia = cell.Offset(0, 3).Value         'Caso necessário, adaptar para enviar email com cópia.
           'anexo = cell.Offset(0, 4).Value            'Caso necessário, adaptar para incluir anexo ao email.

           'Montagem e envio dos emails.
            Set emailformatado = OutlookApp.CreateItem(0)
            With emailformatado
                .To = currManager.ManagerEmail
               '.CC = comcopia
                .Subject = assunto
                .HTMLBody = corpodoemail '& publicoalvo
                '.Attachments.Add anexo
                '.Display
            End With
            emailformatado.Send
            Next

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

End Sub

你好。你有什么问题?发生了什么事?我很难将收集项目输入Outlook电子邮件正文。@Luiscrado。我正在寻找一种方法来添加corret集合项,该项来自“此处显示部分中的currManager:corpodoemail=Sheets(“CAPA”).Range(“F11”).value&“

”和“Sheets”(“CAPA”).Range(“F13”).value&“

”和“Managers&“

Option Explicit

Dim Managers As Collection

Sub PopulateManagers()

    Set Managers = New Collection
    Dim currWS As Worksheet
    Set currWS = ThisWorkbook.Worksheets("publico")
    With currWS
        Dim loopRange As Range
        Set loopRange = .Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)) 'H2 to the last used row; assuming it's the column for manager emails
    End With
    Dim currCell As Range
    For Each currCell In loopRange
        If currCell.value = vbNullString Then 'no manager; try for a head manager
            If currCell.Offset(0, 1).value = vbNullString Then 'no managers at all
                Dim currManagerEmail As String
                currManagerEmail = "NoManagerFound"
            Else
                currManagerEmail = currCell.Offset(0, 1).Text
            End If
        Else
            currManagerEmail = currCell.Text
        End If
        Dim currManager As Manager
        Set currManager = Nothing
        On Error Resume Next
            Set currManager = Managers(currManagerEmail)
        On Error GoTo 0
        If currManager Is Nothing Then
            Set currManager = New Manager
            currManager.ManagerEmail = currManagerEmail
            Managers.Add currManager, Key:=currManager.ManagerEmail
        End If
        Dim currClient As Client
        Set currClient = New Client
        currClient.ClientID = currWS.Cells(currCell.Row, 1).Text 'assumes client ID is in column 1
        If currWS.Cells(currCell.Row, 1).Text <> "" Then
        currManager.Clients.Add currClient, Key:=currClient.ClientID
        Else: End If
    Next


    Dim OutlookApp As Object
    Dim emailformatado As Object
    Dim destinatario As String
    Dim comcopia As String
    Dim assunto As String
   'Dim body_ As String
    Dim anexo As String
    Dim corpodoemail As String
    Set OutlookApp = CreateObject("Outlook.Application")

    For Each currManager In Managers
     assunto = Sheets("CAPA").Range("F8").value 'Assunto do e-mail, conforme CAPA.
           'publicoalvo = cell.Offset(0, 2).Value
           'body_ = Sheets("CAPA").Range("D2").Value
            corpodoemail = Sheets("CAPA").Range("F11").value & "<br><br>" & _
            Sheets("CAPA").Range("F13").value & "<br><br>" '& _
            Managers & "<br><br><br>"
           'comcopia = cell.Offset(0, 3).Value         'Caso necessário, adaptar para enviar email com cópia.
           'anexo = cell.Offset(0, 4).Value            'Caso necessário, adaptar para incluir anexo ao email.

           'Montagem e envio dos emails.
            Set emailformatado = OutlookApp.CreateItem(0)
            With emailformatado
                .To = currManager.ManagerEmail
               '.CC = comcopia
                .Subject = assunto
                .HTMLBody = corpodoemail '& publicoalvo
                '.Attachments.Add anexo
                '.Display
            End With
            emailformatado.Send
            Next

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

End Sub