Vraag : Hoe te een voorwerp van Excel van geheugen proper om te doden.

Wij allen hebben het gezien.  Dat dwaze EXCEL.EXE blijft ingezeten in geheugen geen kwestie welke benadering u kiest.  Ik heb zelfs veelvoudige voorwerpen EXCEL.EXE in de proceslijst in taakmanager zien verschijnen wanneer mijn code in feite slechts één voorkomen opent.  Ik kwam met een manier op de proppen om alle Excel van geheugen te doden.  Ik hoop dit uw angst in matter.

1 helpt:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
Imports Systeem
De invoer System.Diagnostics

Privé Sub (ByVal afzender als Voorwerp, ByVal e als System.Drawing.Printing.PrintEventArgs) Handvatten printdocument1_EndPrint printdocument1.EndPrint

        Doe terwijl Waar
            'dood al ingezetene uitblinkt in geheugen met extreem nadeel
            Als CloseAllResidentExcels () = Waar toen
                De uitgang 
            Beëindig als
        Lijn
        
        'reinit uw vars hier
        xlApp = C (CreateObject („Excel.Application“), Excel.Application)
        wbkToShow = xlApp.Workbooks.Add (XlWBATemplate.xlWBATWorksheet)
        wshToShow = DirectCast (wbkToShow.Worksheets („Sheet1“), Excel.Worksheet)

    Sub van het eind
    Privé Functie CloseAllResidentExcels () zoals Van Boole

        CloseAllResidentExcels = Vals

        Probeer
            'lijn dit proces tot er geen geldige id's om zijn terug te keren
            De schemerige VRC als Proces
            Schemerige localByName als Proces () = Process.GetProcessesByName („EXCEL“)
            Het VRC = Process.GetProcessById (localByName (0). Identiteitskaart)
            Prc.Kill ()

        Vangst ex als Uitzondering
            CloseAllResidentExcels = Waar
        Het eind probeert

    De Functie van het eind
Related Oplossingen: excel die in memory blijven uit

Antwoord : Hoe te een voorwerp van Excel van geheugen proper om te doden.

ReleaseComObject en FinalReleaseComObject werken niet altijd.  (Als zij ooit).  Dit is de enige manier ik ExcelApp heb kunnen vrij consistantly doden waarin ik werk.  Dit doodt een andere reeds-open Dossiers van Excel niet….slechts op dat ogenblik geopend door uw app omdat u uw voorwerp ExcelApp overgaat.

Ik gebruik enkel de „()“ sectie Application.DoEvents om het een kleine hoeveelheid tijd te geven te sluiten.  U kunt niet het nodig hebben.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
Verklaar de Lib „user32“ alias „PostMessageA“ van de Functie van PostMessage (ByVal hwnd als Int32, ByVal wMsg als Int32, _
    ByVal wParam als Int32, ByVal lParam als Int32) als Int32

Const WM_QUIT = &H12


Privé SubExcelWorker

    MyExcel als Microsoft.Office.Interop.Excel.ApplicationClass
    
    'Bazelde - de nonsens doet al uw Excel Stuffz

    MyExcel.Quit

    PostMessage (Excel.Hwnd, WM_QUIT, 0, 0)

    Schemerige I als Int32
    Voor I = 0 tot 10000
        Application.DoEvents ()
    Daarna

    MyExcel = niets

Sub van het eind
Andere oplossingen  
 
programming4us programming4us