【问题标题】:Export from Excel to Outlook从 Excel 导出到 Outlook
【发布时间】:2012-12-07 04:50:05
【问题描述】:

我的工作簿有 5 个不同的工作表,我需要复制这五个工作表并将其粘贴到 5 个不同的邮件中。最好是 HTML。

以下编写的代码仅将不同的工作表附加到 Outlook。我需要电子邮件正文下方的 HTML。请注意,我在工作表中的范围因工作簿而异,但工作表名称保持不变。

  Function BrowseForFolder(Optional OpenAt As Variant) As Variant
'Function purpose: To Browser for a user selected folder.
'If the "OpenAt" path is provided, open the browser at that directory
'NOTE: If invalid, it will open at the Desktop level
'BrowseForFolder was a code originally written by Ron De Bruin, I love this function!

Dim ShellApp As Object

'Create a file browser window at the default folder
Set ShellApp = CreateObject("Shell.Application"). _
BrowseForFolder(0, "Please choose a folder", 0, OpenAt)

'Set the folder to that selected. (On error in case cancelled)
On Error Resume Next
BrowseForFolder = ShellApp.self.Path
On Error GoTo 0

'Destroy the Shell Application
Set ShellApp = Nothing

'Check for invalid or non-entries and send to the Invalid error
'handler if found
'Valid selections can begin L: (where L is a letter) or
'\\ (as in \\servername\sharename. All others are invalid
Select Case Mid(BrowseForFolder, 2, 1)
Case Is = ":"
If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
Case Is = "\"
If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
Case Else
GoTo Invalid
End Select

Exit Function

Invalid:
'If it was determined that the selection was invalid, set to False
BrowseForFolder = False

End Function

Sub SaveWorksheets()
'saves each worksheet as a separate file in a specific folder.
Dim ThisFolder As String
Dim NameOfFile As String
Dim Period As String
Dim RecipName As String

ThisFolder = BrowseForFolder()

Application.ScreenUpdating = False

Dim ws As Worksheet
Dim wsName As String
For Each ws In ActiveWorkbook.Worksheets
wsName = ws.Name

If wsName <> "Data" Then

Period = ws.Cells(4, 1).Value 'put the row and column numbers of the report date here.
RecipName = ws.Cells(1, 29).Value 'put the row and column numbers of the email address here
NameOfFile = ThisFolder & "\" & "Termination Report " & wsName & " " & Period & ".xlsx"

ws.Select
ws.Copy
ActiveWorkbook.SaveAs Filename:= _
NameOfFile, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
Call EmailWorkbooks(RecipName, NameOfFile)
End If

Next ws
End Sub

Sub EmailWorkbooks(RecipName, NameOfFile)

Dim OutApp As Object
Dim OutMail As Object

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

Msg = "Attached is the xyz report for your review. Please let me know if you have any questions" & vbCrLf & vbCrLf _
& "Thanks," & vbCrLf & vbCrLf _
& "Your Name Here" & vbCrLf _
& "Your Title" & vbCrLf _
& "Your contact info"

Subj = "XYZ Report" & " " & Period

On Error Resume Next
With OutMail
.To = RecipName
'.CC =
.Subject = Subj
.Body = Msg
.Attachments.Add (NameOfFile)
.Save
End With
On Error GoTo 0

End Sub 

【问题讨论】:

    标签: vba excel outlook


    【解决方案1】:

    你可以使用 PublishObjects 集合的 Add 方法,简短的例子:

    Sub InsertSheetContent()
      Dim onePublishObject As PublishObject
      Dim oneSheet As Worksheet
      Dim scriptingObject As Object
      Dim outlookApplication As Object
      Dim outlookMail As Object
      Dim htmlBody As String
      Dim htmlFile As String
      Dim textStream
    
      Set scriptingObject = CreateObject("Scripting.FileSystemObject")
      Set outlookApplication = CreateObject("Outlook.Application")
    
      For Each oneSheet In ThisWorkbook.Worksheets
        htmlFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name & "_" & oneSheet.Name & ".html"
        Set onePublishObject = ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
                                                                Filename:=htmlFile, _
                                                                Sheet:=oneSheet.Name, _
                                                                Source:=oneSheet.UsedRange.Address, _
                                                                HtmlType:=xlHtmlStatic, _
                                                                DivID:=oneSheet.Name)
        onePublishObject.Publish Create:=True
    
        Set textStream = scriptingObject.OpenTextFile(htmlFile)
        htmlBody = textStream.ReadAll
    
        Set outlookMail = outlookApplication.CreateItem(0)
        With outlookMail
            .htmlBody = htmlBody
            .Display
        End With
      Next oneSheet
    
    End Sub
    

    【讨论】:

    • 如何修改代码?我想将您和我发布的代码合并为一个。请帮忙
    • 这里是示例文件的链接skydrive.live.com/…
    • 发布对象会产生一些(全部?)智能手机无法接受的劣质 Html。如果这是一个问题,我可能有一个解决方案。
    • @TonyDallimore 我将在桌面环境中操作......所以这并不重要:)
    • 如何将其发送到不同的地址?创建的每封邮件都需要发送给不同的人。我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多