[VB6] Excel proces blijft bestaan

Pagina: 1
Acties:
  • 214 views sinds 30-01-2008
  • Reageer

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
Ik heb een applicatie gemaakt en daarbij zoek ik de naam van het eerste Sheet op van een Excel document. Echter blijft het proces EXCEL.EXE bestaan, ook als ik de applicatie zelf afsluit.
Het gebeurd regelmatig dat ik 15 of 20 keer een excel opent om de code uit te voeren, daarna staat dus 15 tot 20 keer EXCEL geladen (á 20 Mb).
Hier op got en Google heb ik al aardig wat reacties gelezen want ik ben dus niet de enigste met het probleem, echter geen enkele oplossing werkt bij mij.

Ik gebruik nu de volgende code:
Visual Basic:
1
2
3
4
5
6
7
8
Dim objExcel As New Excel.Application
objExcel.Visible = False
objExcel.DisplayAlerts = False
objExcel.ScreenUpdating = False
TableName = objExcel.Workbooks.Open(TempMap & "\" & BestandsNaam).ActiveSheet.Name
objExcel.Workbooks.Close
objExcel.Quit
Set objExcel = Nothing

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

je splits best instantiering & toewijzing op:
dim oe as excel.application
set oe=new excel.application
screenupdating is niet nodig
als je de close methode gebruikt op de workbookscollectie, dan kan je geen false parameter meegeven om ook bij wijziging van het workbook het succesvol zonder interveniërende dialogbox af te sluiten, dus gebruik je beter
oe.workbooks(1).close false

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
Nou ik snap er nog steeds helemaal niks van. Ik heb alle combinaties geprobeerd die mij logisch leken, ook heb ik nog een aantal dingen geprobeerd wat op internet stond, maar helaas.

Ik gebruik nu dit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmbTable.Clear
Dim objExcel As Excel.Application
Set objExcel = Excel.Application

objExcel.Workbooks.Open (TempMap & "\" & BestandsNaam)

Dim AantalSheets
AantalSheets = 1
Do While AantalSheets <= objExcel.ActiveWorkbook.Sheets.Count
    cmbTable.AddItem objExcel.ActiveWorkbook.Sheets(AantalSheets).Name
    AantalSheets = AantalSheets + 1
Loop

objExcel.ActiveWorkbook.Close False
objExcel.Workbooks.Close
objExcel.Application.Quit
objExcel.Quit
Set objExcel = Nothing

Ik snap het gewoon niet waarom het proces blijft bestaand :?

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Ik heb jouw eerste coding gedraaid in een Access-module: geen problemen. Bij 'Set objExcel = Nothing' wordt Excel netjes uit de tasklist verwijderd.
In welke omgeving programmeer je dit en hoe roep je e.e.a. aan?

Vlinders moet je volgen, niet vangen...


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
PaulZ schreef op dinsdag 30 november 2004 @ 14:11:
Ik heb jouw eerste coding gedraaid in een Access-module: geen problemen. Bij 'Set objExcel = Nothing' wordt Excel netjes uit de tasklist verwijderd.
In welke omgeving programmeer je dit en hoe roep je e.e.a. aan?
Ik werk in Visual Basic 6.0 Professional. Ik heb de references "Microsoft Excel 11.0 Object Library" toegevoegd, en bovenstaande code is het enigste wat ik gebruik binnen mijn applicatie.

Zou het misschien komen dat ik Office 2003 hebt?

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 19-05 16:24

Tukk

De α-man met het ẞ-brein

Ik ken dit probleem,
ik heb een .exe gemaakt die alles met excel netjes deed, net als jij nu.

Op mijn laptop bleef het excel-object bestaan, dezelfde executable gaf bij een collega die dezelfde config heeft als ik (win 2k en office 2k) geen enkel probleem, alles werd netjes afgesloten. Ik neem aan dat niet jij iets fout doet, maar dat er binnen excel/windows iets fout gaat.

Ik kan je de oplossing niet geven, maar ik ben benieuwd of iemand de oorzaak weet. Ik had me al rot gezocht met google en op MSDN.

[ Voor 5% gewijzigd door Tukk op 30-11-2004 14:25 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
Dat is idd erg irri, zeker omdat je bijna zeker weet dat ikzelf iets fout hebt gedaan. Maar als je op internet gaat zoeken kom je echt héél veel mensen tegen die het probleem hebben, helaas hun oplossing werkt dus niet bij mij.

Ik hoop dat er iemand hier de gouden tip heeft :)

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

Pprecies, Iik heb de code in MS Ooffice 2003 (MS Word VBA) gedraaid, met een verwijzing naar excel object library 11.0, en de code draait perfect. Hij sluit excel goed af. Ik denk dat het aan vb6 ligt.

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 19-05 16:24

Tukk

De α-man met het ẞ-brein

Polderdijk schreef op dinsdag 30 november 2004 @ 14:28:
Dat is idd erg irri, zeker omdat je bijna zeker weet dat ikzelf iets fout hebt gedaan. Maar als je op internet gaat zoeken kom je echt héél veel mensen tegen die het probleem hebben, helaas hun oplossing werkt dus niet bij mij.

Ik hoop dat er iemand hier de gouden tip heeft :)
Bij mij ging het op mijn laptop wel goed als ik geen Workbook opende.

Visual Basic:
1
2
3
4
5
Dim objExcel As Excel.Application 
Set objExcel = Excel.Application 

objExcel.Quit 
Set objExcel = Nothing


Bij bovenstaande code ging excel wel netjes weg.

[ Voor 5% gewijzigd door Tukk op 30-11-2004 14:35 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
Bedankt voor je link, maar deze had ik idd al gevonden en geprobeerd, maar helaas zonder succes. Ook andere topics op GoT die mogelijk het goede antwoord geven, heb ik geprobeerd zonder succes.

Ik ben weer ff met van alles en nogwat aan het spelen, maar mocht het niet lukken is het geen ramp omdat maar een aantal mensen het zullen gebruiken.

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

Ik heb ook een vergelijkbaar probleem gehad in VBA. Pas nadat ik ALLE (sub)objecten fatsoenlijk had afgesloten werd het excel object afgesloten.
Misschien heeft het te maken met het bestand dat je opent, of de variabelen die je instelt?

Kijk anders hier eens:

http://www.vbcity.com/forums/topic.asp?tid=76537

http://msdn.microsoft.com...omponentshutdownrules.asp

Verwijderd

Probeer eens het opslaan van het workbook voordat je hem afsluit?

[ Voor 23% gewijzigd door Verwijderd op 01-12-2004 13:54 ]


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Verwijderd schreef op dinsdag 30 november 2004 @ 14:30:
Pprecies, Iik heb de code in MS Ooffice 2003 (MS Word VBA) gedraaid, met een verwijzing naar excel object library 11.0, en de code draait perfect. Hij sluit excel goed af. Ik denk dat het aan vb6 ligt.
Hetzelfde euvel krijg ik nu ook indien ik VB.Net gebruik (met Office XP).
Ik zoek met jullie mee..... B)

Vlinders moet je volgen, niet vangen...


Verwijderd

probeer eens objectvariabelen toe te wijzen voor de (sub)objecten die je gebruikt en sluit die dan af.

in dat andere topic waarnaar wordt verwezen over dit probleem wordt er correct gebruik gemaakt van variabelen. je verwijst dus naar een object, verandert iets, en sluit die dan via de verwijzing af. idee?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim xlApp As Excel.Application 
Dim xlBook As Excel.Workbook 
Dim xlSheet As Excel.Worksheet 

Set xlApp = CreateObject("Excel.Application") 
Set xlApp = New Excel.Application 

Set xlBook = xlApp.Workbooks.Open(CommonDialog1.FileName) 

(..)

xlBook.Close 
xlApp.Quit 

Set xlSheet = Nothing 
Set xlBook = Nothing 
Set xlApp = Nothing

[ Voor 8% gewijzigd door Verwijderd op 30-11-2004 15:22 ]


Verwijderd

aimngh, dan was er bij office2000 wel een bug waardoor sommige objecten niet verwijderd konden worden bij gebruik van het with-end with statement. maar sowieso is in dit geval de tip van prinsjepieter de goede, je moet voor alle (sub)objecten een objectvariable toekennen èn (belangrijk) ze in de juiste volgorde op nothing zetten (maw rekening houden met de objecthiërarchie van excel's objectmodel).
1. set subsubobject=nothing
2. set subobject=nothing
3. set object=nothing

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 01-05 23:34
ik heb ook een keer een prog gemaakt, die excel opende, spul invulde, en afdrukte, en weer afsloot.

ik had zoiets als:
Visual Basic:
1
2
3
4
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Open FileName:=Path
xls.Visible = True
xls.activeworkbook.Close True

bij mij blijft er niks bij processen staan ?

[ Voor 8% gewijzigd door Shuisman op 01-12-2004 15:00 ]


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 19-05 14:10
Nou ik heb gedaan wat jullie hebben gezecht, maar nu gebeurd er helemaal iets vreemds.

Als ik nu het programma start dan zie ik 2 processen, en een seconde daarna (als onderstaande code is gedraaid), dan zie ik 1 proces sluiten :?

Ik heb al geprobeerd om enkele regeld weg te halen, bijvoorbeeld Set xlApp = CreateObject("Excel.Application") maar dan wordt er maar 1 proces aangemaakt en deze blijft weer fijn bestaan. Ik wordt er zo langszamerhand erg gek van :(
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = CreateObject("Excel.Application")
Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Open(TempMap & "\" & BestandsNaam)

For Each xlSheet In xlBook.Sheets
    cmbTable.AddItem xlSheet.Name
Next

xlBook.Close
xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
       

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

dit is m'n laatste in deze draad, ik ben blij dat ik niet met jouw probleem zit.
code:
1
2
Set xlApp = CreateObject("Excel.Application") 
Set xlApp = New Excel.Application
is hetzelfde (subtiel verschilletje), 1 van de 2 moet weg
en dan:
code:
1
2
3
4
5
set xlsheet=nothing
xlbook.close false
set xlbook=nothing
xlapp.quit
set xlapp=nothing

[ Voor 4% gewijzigd door Verwijderd op 01-12-2004 17:42 ]


Verwijderd

Op Google is iets te vinden over dit probleem. Er was een complete website aan gewijd. De oplossing die hierop stond, werkt.

Zoektermen weet ik niet meer, maar het was iets in de trend van Excel VB6 terminate.

Het is dus wel op te lossen, maar het is wel irritant als je dat helemaal zelf moet uitzoeken.

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 01-05 23:34
Polderdijk schreef op woensdag 01 december 2004 @ 15:57:
Nou ik heb gedaan wat jullie hebben gezecht, maar nu gebeurd er helemaal iets vreemds.

Als ik nu het programma start dan zie ik 2 processen, en een seconde daarna (als onderstaande code is gedraaid), dan zie ik 1 proces sluiten :?

Ik heb al geprobeerd om enkele regeld weg te halen, bijvoorbeeld Set xlApp = CreateObject("Excel.Application") maar dan wordt er maar 1 proces aangemaakt en deze blijft weer fijn bestaan. Ik wordt er zo langszamerhand erg gek van :(
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = CreateObject("Excel.Application")
Set xlApp = New Excel.Application

Set xlBook = xlApp.Workbooks.Open(TempMap & "\" & BestandsNaam)

For Each xlSheet In xlBook.Sheets
    cmbTable.AddItem xlSheet.Name
Next

xlBook.Close
xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
       
Probeer anders deze code eens:
Visual Basic:
1
xlapp.activeworkbook.Close True

[ Voor 7% gewijzigd door Shuisman op 01-12-2004 20:53 ]


Verwijderd

(prinsjepieter zegt:)

Logisch dat er twee excel applicaties worden aangemaakt.
Je geeft twee maal dezelfde 'opdracht': maak een nieuwe excel applicatie aan.
code:
1
2
Set xlApp = CreateObject("Excel.Application") 
Set xlApp = New Excel.Application

Beide zijn hetzelfde! De eerste wordt afgesloten omdat je dezelfde variabele gebruikt om de volgende te instantieren. VB6 sluit de eerste applicatie dus netjes af, zo als het hoort.
Er hoeft er maar één te worden aangemaakt, toch?

Probeer alleen de volgende code eens, met de debugger erlangs (breakpoints op regel 3 en 4):
code:
1
2
3
4
Dim xlApp As Excel.Application 
Set xlApp = New Excel.Application 
xlApp.Quit
Set xlApp = Nothing

Wat gebeurt er nu bij regel 3 en/of 4? Sluit het xlapp object nu nog steeds niet af? Evt zelfs als je regel 3 weglaat uit de code?

[ Voor 27% gewijzigd door Verwijderd op 02-12-2004 13:20 ]

Pagina: 1