从Outlook调用Excel宏会冻结Outlook

时间:2018-08-22 20:25:04

标签: excel vba excel-vba outlook outlook-vba

我在创建一个Outlook宏(打开一个文件,调用一个Excel宏并保存电子邮件草稿)时遇到了很多困难。

在流程方面,我知道让Excel宏发送邮件比在程序之间切换要容易得多,但是由于文件大和其他不重要的限制,目前无法实现。

这是Outlook代码

Sub bodeemail()
    Dim ExApp As Excel.Application
    Dim ExWbk As Workbook
    Set ExApp = New Excel.Application
    Set ExWbk = ExApp.Workbooks.Open("X:\Dropbox\xxxx\xxxx.xlsm")
    ExApp.Visible = False

    ExWbk.Application.Run "Module1.BodeFlash"

     ExWbk.Close SaveChanges:=False

End Sub

这是Excel代码。

Sub BODEFlash()
    ThisWorkbook.Sheets("Email 2.0").Activate
    bode = ActiveSheet.Cells(1, "AG")
    bodetext = Format(bode, "#,###")

    Dim OutApp As Object
    Set OutApp = CreateObject("Outlook.Application")
    Dim OutMail As Object
    Set OutMail = OutApp.CreateItem(olMailItem)

    Dim signature As String
    Dim tstamp As String
    Dim strBody As String


    Application.ScreenUpdating = True

    ' Subject location
    tstamp = "Subject " & Format(Date, "mm/dd/yyyy")
    OutMail.Display
    signature = OutMail.HTMLBody

    ' Change change email list here


    On Error Resume Next
    With OutMail
        .To = "foo@bar.com" 
        .BCC = ""
        .Subject = tstamp
        .HTMLBody = "Flash Approved. " & bodetext & vbNewLine & signature
        .Save
    End With

    'Tidy Up

    Set OutApp = Nothing
    Set OutMail = Nothing

End Sub

我感觉这与对象库或DoWhile子句有关,但无法对其进行限定。宏运行,创建电子邮件并立即冻结Outlook(必须在任务管理器中重新启动)。

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

据您的代码显示,Outlook仍在等待excel。因此将永远不会超出:ExWbk.Application.Run "Module1.BodeFlash"

我建议将您的excel代码结尾:

Application.Quit

,看看是否可行。它应该完全退出excel应用程序,但我不知道它是否也会关闭Outlook。