Option 1
Die einfachste Möglichkeit in Ihrem speziellen Fall wäre die bauen Speichern und beenden Sie Befehle in das Excel-Makro und nicht in 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
Sie könnten bis zum Ende der "Fragen sie mich in Frage workflow.xlsm" fügen Sie dann die folgende Datei:
Das heißt, könnten Sie Ihre Outlook-Code ändern
Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=True
Application.Quit
Hinweis: Wenn Sie das Makro auch manuell oder in anderen Anwendungsfällen ausführen, in denen die Arbeitsmappe nicht gespeichert, geschlossen und beendet werden soll, können Sie dem Makro AskMeFlow eine Eingabevariable hinzufügen, die standardmäßig auf False gesetzt ist, aber auf Wahr durch Outlook. Ich denke, das liegt etwas außerhalb des Rahmens dieser Antwort, daher werde ich nicht näher darauf eingehen, aber lassen Sie es mich wissen, wenn Sie an dieser Option interessiert sind.
Option 2
Abgefaßtes. Siehe Uris Lösung; Die Verbesserungen, die ich vorgeschlagen habe, verändern diese Lösung nicht grundlegend.
Option 3
Je nach Art des Codes Excel, können Sie es in eine Funktion einschalten und die Ausgangsgröße erfassen. So etwas wie die folgende Liste:
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
Sie würden dann AskMeFlow zu einer Funktion ändern und fügen Sie den folgenden Code ein:
Function AskMeFlow() as String
AskMeFlow = "Uncaught error executing Excel code."
'Your code here
AskMeFlow = "Excel code completed successfully!"
End Function
Bitte zeigen Sie uns die entsprechende Teile Ihres Codes. (Dh nicht die ganze Sache) –
‚Dim appExcel Wie Excel.Application Dim wkb Als Excel.Workbook Set appExcel = Create ("Excel.Application") appExcel.Workbooks.Open (" C: \ Frag mich Workflow-Frage XLSM ") appExcel.Visible = True appExcel.Run " 'Frag mich workflow.xlsm Frage'! AskMeFlow" ---- Hier warte ich will, bis das Makro erfolgt ---- appExcel .DisplayAlerts = Falsch appExcel.ActiveWorkbook.Save appExcel.Quit Festlegen appExcel = Nothing Set wkb = Nichts End Sub ' – user3016795
Ich kann mir vorstellen, dass Sie sich selbst davon überzeugen können, dass dies völlig unleserlich ist ... Bitte bearbeiten Sie Ihre Frage, legen Sie Ihren Code dort und formatieren Sie ihn richtig mit dem '{}' Knopf. –