Вариант 1
Самый простой вариант в вашем конкретном случае будет строить сохранить и закрыть команды в макросе Excel, а не в Outlook.
То есть, вы можете изменить свой код Outlook, чтобы:
Sub AskMeAlerts()
Dim appExcel As Excel.Application
Dim wkb As Excel.Workbook 'Is this declaration necessary for some code elsewhere? You do not use this variable and I would recommend removing the declaration.
Set appExcel = CreateObject("Excel.Application")
With appExcel
.Workbooks.Open ("C:\Ask me question workflow.xlsm")
.Visible = True
.Run "'Ask me question workflow.xlsm'!AskMeFlow"
'No need to explicitly set alert values or save workbook as Excel macro will handle this.
End With
Set appExcel = Nothing
Set wkb = Nothing 'Again, is this necessary?
End Sub
Затем можно добавить следующее в конце «Спросите меня вопрос workflow.xlsm» Файл:
Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=True
Application.Quit
Примечание. Если вы также будете запускать макрос вручную или в других случаях, когда вы не хотите, чтобы книга сохраняла, закрывала и закрывала, вы могли бы рассмотреть возможность добавления входной переменной в макрос AskMeFlow, который по умолчанию имеет значение False, но установлен на Верно Outlook. Я думаю, что это немного выходит за рамки этого ответа, поэтому я не буду подробно останавливаться, но дайте мне знать, если вы заинтересованы в этом варианте.
Вариант 2
отредактированное. См. Решение Ури; улучшения, которые я предложил, принципиально не изменяют это решение.
Вариант 3
В зависимости от характера кода Excel, вы можете превратить его в функцию и захватить выходную переменную. Что-то вроде ниже:
Sub AskMeAlerts()
Dim appExcel As Excel.Application
Dim wkb As Excel.Workbook
Dim StrOutput as string
StrOutput = "Excel macro did not complete."
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open ("C:\Ask me question workflow.xlsm")
appExcel.Visible = True
StrOutput = appExcel.Run "'Ask me question workflow.xlsm'!AskMeFlow"
MsgBox StrOutput
appExcel.DisplayAlerts = False
appExcel.ActiveWorkbook.Save
appExcel.Quit Set appExcel = Nothing
Set wkb = Nothing
End Sub
Вы бы затем изменить AskMeFlow функцию и добавьте следующий код:
Function AskMeFlow() as String
AskMeFlow = "Uncaught error executing Excel code."
'Your code here
AskMeFlow = "Excel code completed successfully!"
End Function
Пожалуйста, покажите нам соответствующий частей вашего кода. (То есть не вся вещь) –
«Dim appExcel Как Excel.Application Dim ВКБ Как Excel.Workbook Set appExcel = CreateObject ("Excel.Application") appExcel.Workbooks.Open (" C: \ Задайте мне вопрос рабочего процесса .xlsm ") appExcel.Visible = True appExcel.Run " 'Спросите меня вопрос workflow.xlsm'! AskMeFlow" ---- Здесь я хочу ждать, пока макрос сделано ---- appExcel .DisplayAlerts = False appExcel.ActiveWorkbook.Save appExcel.Quit Set appExcel = Nothing Set wkb = Nothing End Sub ' – user3016795
Я думаю, вы сами можете убедиться, что это совершенно неразборчиво ... Пожалуйста, отредактируйте свой вопрос, разместите там свой код и отформатируйте его правильно, используя кнопку '{}'. –