Opzione 1
L'opzione più semplice nel tuo caso specifico sarebbe quello di costruire il salva e chiudi i comandi nella macro di Excel anziché in quella di Outlook.
Che è, si potrebbe modificare il codice di Outlook per:
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
Si potrebbe quindi aggiungere il seguente alla fine del "Chiedimi discussione workflow.xlsm" file:
Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=True
Application.Quit
Nota: se esegui la macro manualmente o in altri casi d'uso in cui non vuoi che la cartella di lavoro salvi, chiudi e chiudi, potresti considerare l'aggiunta di una variabile di input alla macro AskMeFlow che è impostata su False ma è impostata su Vero da Outlook. Penso che questo sia leggermente al di fuori della portata di questa risposta, quindi non approfondirò ulteriormente, ma fammi sapere se sei interessato a questa opzione.
Opzione 2
Redacted. Vedi la soluzione di Uri; i miglioramenti che ho suggerito non modificano sostanzialmente questa soluzione.
Opzione 3
A seconda della natura del codice di Excel, si potrebbe trasformare in una funzione e catturare la variabile di uscita. Qualcosa come il qui sotto:
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
Si potrebbe quindi cambiare AskMeFlow a una funzione e aggiungere il seguente codice:
Function AskMeFlow() as String
AskMeFlow = "Uncaught error executing Excel code."
'Your code here
AskMeFlow = "Excel code completed successfully!"
End Function
fonte
2016-02-25 23:12:42
prego ci mostra il relativo parti del tuo codice. (Cioè non il tutto) –
'Dim appExcel Come Excel.Application Dim wkb Come Excel.Workbook Set appExcel = CreateObject ("Excel.Application") appExcel.Workbooks.Open ("C: \ Chiedimi in discussione del flusso di lavoro .xlsm ") appExcel.Visible = true appExcel.Run " 'Chiedimi dubbio workflow.xlsm'! AskMeFlow" ---- Qui voglio aspettare la macro è fatto ---- appExcel .DisplayAlerts = False appExcel.ActiveWorkbook.Save appExcel.Quit Imposta appExcel = Nulla Set wkb = Nothing End Sub ' – user3016795
Immagino che tu possa vedere da solo che questo è completamente illeggibile ... Modifica la tua domanda, inserisci il tuo codice lì e formattalo correttamente usando il pulsante '{}'. –