VBA Outlook调用Excel宏并等到宏完成

use*_*795 13 excel outlook vba wait outlook-vba

我从Outlook规则脚本调用Excel宏.

该过程是:获取邮件,运行运行Outlook脚本的Outlook规则,从该脚本打开Excel,运行Excel宏,关闭Excel.

如何在Outlook规则脚本中验证Excel宏已完成,以保存并关闭应用程序?

 Sub AskMeAlerts()
 Dim appExcel As Excel.Application 
 Dim wkb As Excel.Workbook 
 Set appExcel = CreateObject("Excel.Application") 
 appExcel.Workbooks.Open ("C:\Ask me question workflow.xlsm") 
 appExcel.Visible = True 
 appExcel.Run "'Ask me question workflow.xlsm'!AskMeFlow" 
 appExcel.DisplayAlerts = False 
 appExcel.ActiveWorkbook.Save 
 appExcel.Quit Set appExcel = Nothing 
 Set wkb = Nothing 
 End Sub
Run Code Online (Sandbox Code Playgroud)

bre*_*tdj 4

你可以

  1. 将 Excel 宏移植到 Outlook 中并直接运行
  2. 使用标志来捕获代码完成

下面的代码使用第一个工作表 A1 中的标记来捕获正在运行的代码(在 Excel 部分)。我还修改了你的代码(它是早期和后期绑定的混合)

展望代码

 Sub AskMeAlerts()
 Dim appExcel As Excel.Application
 Set appExcel = New Excel.Application
 With appExcel
     .DisplayAlerts = False
     .Workbooks.Open ("C:\TEMP\Ask me question workflow.xlsm")
     .Run "'Ask me question workflow.xlsm'!AskMeFlow"
     If .activeworkbook.sheets(1).[a1].Value = "Complete" Then
         MsgBox "Code has run"
         .activeworkbook.sheets(1).[a1].Value = vbNullString
         .activeworkbook.Save
        .DisplayAlerts = True
         .activeworkbook.Close
         appExcel.Quit
        Set appExcel = Nothing
     End If
 End With
End Sub
Run Code Online (Sandbox Code Playgroud)

excel代码

Sub AskMeFloW()
'do stuff
ThisWorkbook.Sheets(1).[a1] = "Complete"
End Sub
Run Code Online (Sandbox Code Playgroud)