[VB6] Excel-object afsluiten

Pagina: 1
Acties:

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
Ik ben momenteel bezig aan een progje dat gegevens uit een DB uitleest en exporteert naar Excel, wat perfect lukt behalve het afsluiten van Excel na de export...

De code ziet er verkort als volgt uit:

code:
1
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
'globale declaraties
Dim moExcel As Excel.Application
Dim moReportFile As Excel.Workbook
Dim moSheet As Excel.Worksheet


'binnen  onclick...
  Set moExcel = New Excel.Application
  moExcel.Visible = False

  'template openen: empty.xls
  Set moReportFile = moExcel.Workbooks.Open(App.Path & "\empty.xls")
  Set moSheet = moReportFile.Worksheets("Sheet1")
  
  'header wegschrijven in xls-file
  ...
    
  'do lus om gegevens te exporteren
    ...
  'end if

  'gegevens sorteren in excel
  ... 
  
  'Excel-file opslaan onder andere naam
  moReportFile.SaveAs (App.Path & "\OwnerIncorrect_Division.xls)
  moReportFile.Saved = True
    
  moExcel.Quit


dus alles lukt, behalve de quit. Ik krijg ook geen fout hierop... Excel.exe blijft gewoon in de processenlijst staan, tot ik de applicatie afsluit.
Hoe komt dit?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

heb je moExcel ook op null gezet?
Maak je niet per ongeluk twee excellen aan? (test even door halverwege te lopen)

Localhost, sweet localhost


  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
kvdveer schreef op 18 november 2002 @ 10:22:
heb je moExcel ook op null gezet?
Maak je niet per ongeluk twee excellen aan? (test even door halverwege te lopen)
nee, ik zette 'm niet op null, maar ik heb dit es getest en er is geen verandering. Het is toch het volgende he:
moExcel.Quit
Set moExcel = Nothing

Er werden ook geen 2 excellen geopend...

  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

Een COM server telt toch references? Volgens mij moet je ook moExcel.Release aanroepen (of doet VB dat intern voor je?)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Doet vb intern, je KAN niet eens addreffen/releasen

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

Probeer eens moExcel.workbook.close

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Verwijderd

Sluit eerst je worksheet, dan je Workbook en dan pas je excelobject.
Gewoon met Set MyObject = nothing

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
ik heb nu:
Set moSheet = Nothing
moReportFile.Close
Set moReportFile = Nothing
moExcel.Quit
Set moExcel = Nothing

en dit doet nog altijd niets... :/

  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

freeco schreef op 18 November 2002 @ 12:58:
ik heb nu:
Set moSheet = Nothing
moReportFile.Close
Set moReportFile = Nothing
moExcel.Quit
Set moExcel = Nothing

en dit doet nog altijd niets... :/
Nog maar een keer:

Probeer deze erbij te zetten: moExcel.workbook.close

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


  • KO
  • Registratie: December 2001
  • Laatst online: 12-11-2023

KO

in deze volgorde:
close
quit
nothing

Yesterday Is History. Today Is A Gift. Tomorrow Is Mystery


Verwijderd

Als je je code iets verandert pak je in ieder geval de openstaande excel instantie.

code:
1
2
3
4
5
6
7
8
9
dim moExcel as Excel.application

   set moExcel = getobject(,"Excel.Application")

   'do meuk
   
   'Kijk even in je taskmanager hoeveel Excelprocessen hebt lopen.
   moExcel.quit
   moExcel = Nothing


Heb je meerdere excel instanties open? Loop dan je code door waar je nog meer instanties aanmaakt. Iedere New is namelijk een nieuwe Excel instantie.

[Access]
Wat je ook kan doen is gebruiken maken van docmd.transferdatabase method. Tenminste als je vanuit Access werkt?
[/Access]

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
KO schreef op 18 November 2002 @ 13:01:
[...]


Nog maar een keer:

Probeer deze erbij te zetten: moExcel.workbook.close
dan krijg ik:
Foutnummer 438
"object doesn't support object or method"

code was:
moExcel.Workbook.Close
Set moSheet = Nothing
moReportFile.Close
Set moReportFile = Nothing
moExcel.Quit
Set moExcel = Nothing

als ik de rest in commentaar zet, blijft de fout dezelfde, dus het is wel degelijk die regel... ;(

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
Verwijderd schreef op 18 november 2002 @ 13:04:
Als je je code iets verandert pak je in ieder geval de openstaande excel instantie.

code:
1
2
3
4
5
6
7
8
9
dim moExcel as Excel.application

   set moExcel = getobject(,"Excel.Application")

   'do meuk
   
   'Kijk even in je taskmanager hoeveel Excelprocessen hebt lopen.
   moExcel.quit
   moExcel = Nothing


Heb je meerdere excel instanties open? Loop dan je code door waar je nog meer instanties aanmaakt. Iedere New is namelijk een nieuwe Excel instantie.

[Access]
Wat je ook kan doen is gebruiken maken van docmd.transferdatabase method. Tenminste als je vanuit Access werkt?
[/Access]
Dat eerste is dan toch ipv Set moExcel = new excel.application he?
Dan krijg ik nl een fout:
Foutnummer -2147022986
Automation error
The object exporter specified was not found

En ik werk niet via Access, maar met een Microsoft SQL server...

Maar ik zie echt maar 1 Excel instantie geopend worden hoor...

Verwijderd

Waarschijnlijk heb ik iets voor je gevonden!

Ik weet niet of je DTS packages kent, maareh hier heb je misschien wat aan. Met DTS packages kan je exporteren naar XL of wat dan ook.

http://msdn.microsoft.com.../dblibc/dtspapps_2hb7.asp

Met deze link kan het zelfs vanuit VB aansturen. Alleen moet je waarschijnlijk je header nog even doen...

Ik weet hier verder niets vanaf dus success.... :7

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
hmm, ik denk niet dat ik er op die manier ga geraken... ik doe niet simpelweg een copy van gegevens naar Excel, maar dit gebeurt via relatief moeilijke SQL (al dan niet genest e.d.)
Van DTS packages heb ik al wel eens gehoord, maar heb er nog geen ervaring mee. Dat voorbeeldje op de MSDN verwart me alleen nog meer :|
Maar toch bedankt voor het zoeken! _/-\o_

Verwijderd

http://msdn.microsoft.com...ql/dts_tools_wiz_9e5g.asp

Wat eigenlijk op deze pagina staat is dat exporteren volgens een view of een query ook mogelijk is. Er zit een wizard bij dus een package is zo gemaakt en in de vorige post (van mij) zit een link met onderaan die pagina een example. Misschien kom je er dan wel.

Overigens houd je met bovenstaande techniek wel mooi je data(access)layer gescheiden van je gui en dat is wellicht wat je wilt.

Blijft natuurlijk wel dat het vreemd is dat Excel weigert om te sluiten. :( :( :(
Ik zoek nog ff verder voor je...

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
code:
1
2
3
4
moExcel.Interactive = False
moExcel.Visible = False
moExcel.DisplayAlerts = False
moExcel.ScreenUpdating = False

Dan heb je ze allemaal zo'n beetje wel.

Verwijderd

Ik heb nog iets voor je gevonden: http://www.sqldts.com/

Daar staat allerlei meuk en voorbeelden. Misschien heb je er wat aan.... Het blijkt iig het snelst te zijn om te exporteren. (Je hoeft de records niet door te lo(o)pen)

Sjaaky: :? Wat bedoel je hiermee of heb ik wat gemist :?

Verwijderd

Ik zou zeggen gebruik de search een keer. Dit topic heb ik nl. al eens gepost....

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
Bij mij maakte die statements het verschil. Als je ze na de code van het openen van excel zet, zal excel je niet lastig vallen met messageboxen (zoals "file already exists, overwrite?") die je niet kan zien omdat moExcel.Visible op False staat. :r
Dit gaat dus niet over DTS.

Verwijderd

Leuk dat je dan nog ff de link naar die post erbij zet. Ikke search uitgevoerd, ikke jou niet vinden in combi met... oplossing... hmmm.

[cynic mode]
Lekkere constructieve post dus _/-\o_
[/cynic mode]

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 18 November 2002 @ 14:52:
Ik zou zeggen gebruik de search een keer. Dit topic heb ik nl. al eens gepost....
Bedoel je deze: [rml][ VB6 + Excel ] Excel draait op de achtergrond[/rml]

Volgens mij gaat dit topic niet over jouw probleem...

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
Sjaaky schreef op 18 november 2002 @ 14:57:
Bij mij maakte die statements het verschil. Als je ze na de code van het openen van excel zet, zal excel je niet lastig vallen met messageboxen (zoals "file already exists, overwrite?") die je niet kan zien omdat moExcel.Visible op False staat. :r
Dit gaat dus niet over DTS.
ik krijg nu idd geen msgbox meer met de vraag of ik die file wil overwriten als die al bestaat, maar dat was maar een detail...
excel blijft nog altijd openstaan als het exporteren beëindigd is |:(
Es zien wat Boschpj nog heeft, anders laat ik het zo. Moet ik maar na elke export die applicatie es heropstarten. Handig is anders, maar het werkt wel zo :/

  • freeco
  • Registratie: Juni 2001
  • Laatst online: 28-08 14:03
Verwijderd schreef op 18 november 2002 @ 14:25:
http://msdn.microsoft.com...ql/dts_tools_wiz_9e5g.asp

Wat eigenlijk op deze pagina staat is dat exporteren volgens een view of een query ook mogelijk is. Er zit een wizard bij dus een package is zo gemaakt en in de vorige post (van mij) zit een link met onderaan die pagina een example. Misschien kom je er dan wel.

Overigens houd je met bovenstaande techniek wel mooi je data(access)layer gescheiden van je gui en dat is wellicht wat je wilt.

Blijft natuurlijk wel dat het vreemd is dat Excel weigert om te sluiten. :( :( :(
Ik zoek nog ff verder voor je...
Het is niet echt nodig om mijn layers gescheiden te houden hoor: het progje waar ik aan werk is maar om eenmalig te gebruiken. Binnen Belgacom (waar ik werk) heeft men nu net een inventaris uitgevoerd van de 16000 PC's en nu moet ik daarvoor per divisie excel-rapporten met allerlei opties genereren.
Ik zal die DTS gevallen es proberen, maar vorige week heb ik daar ook al eens proberen mee werken en dat lukte om de 1 of andere manier ook niet. Waarschijnlijk heb ik niet genoeg rechten op de SQL servers om DTSen te creëren... Ik werk hier nog maar 2 maand, dus het is een beetje moeilijk om hier al een duidelijk overzicht te hebben hoe het hier allemaal juist zit met rechten, netwerkstructuren en dergelijke...
Maar ik ga in die DTSen toch alleszins niet te veel tijd steken, want ik zal dan toch hoogstwaarschijnlijk terug gans mijn code moeten aanpassen en dat zou langer duren dan gewoon die applicatie telkens heropstarten.
Maar toch bedankt aan iedereen met opbouwende hulp! :7
Pagina: 1