2017-03-29 4 views
1

Mein VBA-Code in Powerpoint "tötet" nicht meine Excel-Anwendung. es läuft immer noch, wenn ich einen Blick in Task-Manager habe.Powerpoint VBA schließen nicht Excel

Ich möchte es auf die richtige Weise schließen, anstatt zu töten.

Wer könnte mir helfen? Ich habe bereits gesucht und versucht, es funktioniert, aber ohne Glück.

Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow) 
If Wn.View.CurrentShowPosition = 2 Then 

    Dim xlApp As Object 
    Dim xlWorkBook As Object 

    Set xlApp = CreateObject("Excel.Application") 
    xlApp.Visible = False 
    Set xlWorkBook = xlApp.Workbooks.Open("D:\ELE_powerpoint\book1.xlsx", True, False) 

    With xlWorkBook.ActiveSheet 
    txt1 = xlWorkBook.sheets(1).Range("A2") 
    txt2 = xlWorkBook.sheets(1).Range("A3") 
    txt3 = xlWorkBook.sheets(1).Range("A4") 
    End With 

    ActivePresentation.Slides(2).Shapes("a2").TextFrame.TextRange = txt1 
    ActivePresentation.Slides(2).Shapes("a3").TextFrame.TextRange = txt2 
    ActivePresentation.Slides(2).Shapes("a4").TextFrame.TextRange = txt3 

    Set xlApp = Nothing 
    Set xlWorkBook = Nothing 

End If 
End Sub 
+1

'xlApp.Quit' wird es tun –

Antwort

1
Set xlApp = Nothing 

Diese Anweisung den Verweis auf NothingxlApp Objekt setzt. Es zerstört nicht das Objekt, auf das es sich bezieht, aber es verhindert, dass weiterer Code diesen Verweis verwendet.

Excel ist eine ziemlich komplexe Anwendung; Das Erstellen einer Instanz eines Excel.Application-Objekts hat viele Auswirkungen, und um sich ordnungsgemäß herunterzufahren, muss es eine bestimmte Befehlsfolge durchlaufen (Excel- und COM-Add-Ins entladen, alle geöffneten Dateien schließen, VBE abbrechen, falls dies der Fall ist) wurde initialisiert - was wiederum seine eigenen Add-Ins usw. zum Absturz bringen muss - indem Sie Ihre Referenz auf Nothing setzen, sagen Sie "Ich brauche es nicht mehr" - aber was ist mit den COM-Add-Ins, die immer noch benutze es? Diese Arbeitsmappe, die noch geöffnet ist, ist ein Workbook Objekt mit einer Application -Eigenschaft, die auch das gleiche Objekt referenziert, das Sie bezogen haben - und diese Referenzen sind noch nicht weg!

Als Tim und Tom sagte, müssen Sie die Quit Methode der Excel.Application Instanz anzurufen, so dass sie sich nach oben reinigen.

Und wenn das das letzte ist, was Ihr Code tut, dann brauchen Sie wahrscheinlich nicht einmal Set xlApp = Nothing, da die VBA-Laufzeit weiß, dass sie nicht an der xlApp-Referenz festhalten muss, nachdem sie außerhalb des Bereichs liegt; Set xlWorkbook = Nothing ist auch überflüssig.

Kündigen Excel wird das unmodifizierte Arbeitsmappe schließen Sie geöffnet haben, aber da Sie öffnete es, würde ich argumentieren, dass es eine gute Form, es selbst zu schließen - nur xlWorkbook.Close aufrufen, bevor Sie xlApp.Quit nennen.

+0

Einfach unglaublich. danke Leute! – ante011

2

Versuchen xlApp.Quit vor Set xlApp = Nothing

Verwandte Themen