Скопировать диапазон ячеек из Excel в тело письма в Outlook - PullRequest
0 голосов
/ 21 сентября 2010

Как я могу скопировать диапазон ячеек из Excel в тело письма в Outlook (не добавлять файл Excel в качестве вложения), используя VBA.Мне просто нужно, чтобы содержимое было телом почты Outlook.Может ли кто-нибудь помочь мне написать код для этого с помощью макроса?

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Вы можете найти упакованное решение здесь: http://www.rondebruin.nl/mail/folder1/mail4.htm

Sub Mail_Range()
'Working in 2000-2010
    Dim Source As Range
    Dim Dest As Workbook
    Dim wb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim I As Long

    Set Source = Nothing
    On Error Resume Next
    Set Source = Range("A1:K50").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Source Is Nothing Then
        MsgBox "The source is not a range or the sheet is protected, " & _
               "please correct and try again.", vbOKOnly
        Exit Sub
    End If

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

    Set wb = ActiveWorkbook
    Set Dest = Workbooks.Add(xlWBATWorksheet)

    Source.Copy
    With Dest.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial Paste:=xlPasteValues
        .Cells(1).PasteSpecial Paste:=xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
    End With

    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Range of " & wb.Name & " " _
                 & Format(Now, "dd-mmm-yy h-mm-ss")

    If Val(Application.Version) < 12 Then
        'You use Excel 2000-2003
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        'You use Excel 2007-2010
        FileExtStr = ".xlsx": FileFormatNum = 51
    End If

    With Dest
        .SaveAs TempFilePath & TempFileName & FileExtStr, _
                FileFormat:=FileFormatNum
        On Error Resume Next
        For I = 1 To 3
            .SendMail "ron@debruin.nl", _
                      "This is the Subject line"
            If Err.Number = 0 Then Exit For
        Next I
        On Error GoTo 0
        .Close SaveChanges:=False
    End With

    'Delete the file you have send
    Kill TempFilePath & TempFileName & FileExtStr

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

С уважением,

1 голос
/ 11 апреля 2012

См. здесь , если это может вам помочь.

Я искал решение для копирования / вставки нескольких ячеек Excel 2007 в почтовое тело Outlook с VBA, но ни прямое копирование / вставка, ни MsgBody.HTMLBody = Range.Text, ни буфер обмена (через DataObject) не работали. Затем я подумал об этом предыдущем решении, и оно решает мою проблему, надеюсь, это тоже поможет вам:)

Ура!

...