[vb6] excel sluiten lukt niet

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

  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Hoi Tweakers,

Ik vond reeds enkele topics over bovenstaand onderwerp, maar ik heb ze allemaal nagespit en kom er tot op heden nog niet uit. Naar mijn mening open en sluit ik alle excel-objecten op juiste manier, maar mijn procesbeheer-menu denkt daar anders over.

Ik heb de volgende module:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Blaat()

  Dim objExcel As New Excel.Application
  Dim objWorkbook As Excel.Workbook
  Dim ws As Excel.Worksheet
  
  'Excel-bestand openen:
  Set objWorkbook = objExcel.Workbooks.Open(modStatischeVariabelen.cExcelpad)
  
  'Beschikbare sheets toevoegen in cboExcelSheets:
  For Each ws In ActiveWorkbook.Sheets
    frmGegevensExcel.cboExcelSheets.AddItem ws.Name
  Next ws
  
  'Sluiten book:
  objWorkbook.Close False
  objExcel.Quit

  'Opruimen:
  Set objExcel = Nothing
  Set objWorkbook = Nothing
  Set ws = Nothing

End Sub


Vreemd genoeg blijft Excel ook nu nog steeds open staan. Weet iemand hoe ik dit kan verhelpen?? BvD !!

Verwijderd

Voer je dit uit terwijl Excel al open staat? Zo ja, dan kan het zijn dat hij ook niet afsluit (heb ik ook gehad).

Probeer het aanmaken van een nieuw Excel object eens met:

code:
1
2
Dim objExcel
Set objExcel = CreateObject("Excel.Application")


?

Verwijderd

Draai de volgorder van afsluiten maar eens om. Je sluit nu eerst het Excel object en dan pas het werkboek terwijl deze afhankelijk is van het Excel object. Hoe moet hij dan weten wat hij moet opruimen als er niet meer aan het object gerefereerd kan worden.

Dus
Visual Basic:
1
2
3
set  worksheet = nothing
set  workbook=nothing
set  Excel Object=nothing

[ Voor 10% gewijzigd door Verwijderd op 26-07-2004 12:50 ]


Verwijderd

Verwijderd schreef op 26 juli 2004 @ 12:43:
Probeer het aanmaken van een nieuw Excel object eens met:

code:
1
2
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
Dat gaat niet helpen, overigens wordt Excel als het goed is wel degelijk afgesloten nadat je de hele applicatie afgesloten hebt toch :?
Wat je verder kunt doen is de gehele aanroep naar Excel in een aparte class plaatsen. Je 'Nothing' statements zet je dan in de class_terminate. Dat zou beter moeten werken

Verwijderd

Je ForEach klopt trouwens, niet, zie ik nu:

code:
1
  For Each ws In ActiveWorkbook.Sheets


ActiveWorkbook is niet gekwalificeerd en levert dus het workbook van de huidige Excel sessie op. Dat werkt echter alleen als je IN Excel VBA aan het programmeren bent, dus ik vind 't een beetje raar dat je daar geen fout op krijgt.

Overigens werkt het volgende perfect in VBScript:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HET_PAD = "X:\Workbook.xls"

Set oExcel = CreateObject("Excel.Application")
  
'Excel-bestand openen:
Set oBook = oExcel.Workbooks.Open(HET_PAD)
  
'Beschikbare sheets toevoegen in cboExcelSheets:
For Each oSheet In oBook.Worksheets
  WScript.Echo oSheet.Name
Next

oBook.Close False
oExcel.Quit

Verwijderd

Ten eerste: waarom zou je een werkblad aanmaken en vervolgens sluiten?

Allereerst zou ik de afsluit contructie veranderen, gebruik dus het spiegelbeeld van het aanmaken. Dus NIET:

'Opruimen:
Set objExcel = Nothing
Set objWorkbook = Nothing
Set ws = Nothing

Maar:

'Opruimen:
Set ws = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing

Daarnaast zou ik eens kijken of Excel toevallig niet blijft hangen bij de vraag of ie het werkblad (of meerdere) moet opslaan. Om dit te controleren kan je gebruiken:

'Zichtbaar maken vh werkblad
ws.visible = true

En voor het opslaan: (ps weet ik niet zeker)

'Opslaan
ws.saveas "c:\temp.xls"

Deze code gaat uiteraard voordat je de boel afsluit.

Succes ;)
PS hoe vermeld ik "code" tags hier?

Verwijderd

Verwijderd schreef op 26 juli 2004 @ 13:07:
PS hoe vermeld ik "code" tags hier?
Uh, met [ code ] ... [ /code ], en zonder spaties dan ;)

  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Allereerst: iedereen bedankt voor de reacties. Ik ben het probleem met de volgende code (= een mengeling van ieders bijdrage ;)) opgelost:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Sub Blaat()
  Dim objWorkbook As Excel.Workbook
  Dim objWorksheet As Excel.Worksheet
  Dim objExcel As New Excel.Application
 
  Set objExcel = CreateObject("Excel.Application")

  'Excel-bestand openen:
  Set objWorkbook = objExcel.Workbooks.Open(modStatischeVariabelen.cExcelpad)
  
  'Beschikbare sheets toevoegen in cboExcelSheets:
  For Each objWorksheet In objWorkbook.Worksheets
    frmGegevensExcel.cboExcelSheets.AddItem objWorksheet.Name
  Next

  'Sluiten book:
  'objExcel.Visible = True
  objWorkbook.Close False
  objExcel.Quit

  'Opruimen:
  Set objWorksheet = Nothing
  Set objWorkbook = Nothing
  Set objExcel = Nothing

[ Voor 3% gewijzigd door nenne op 26-07-2004 13:38 ]

Pagina: 1