Dim appexcel As Excel.Application
Dim wbexcel As Excel.Workbook
'Dim erreurnom = MessageBox.Show("Il y'a une différence de nom entre
la table Access et la feuille de données Excel", "Attention !")
appexcel = CreateObject("Excel.application")
wbexcel = appexcel.Workbooks.Open("Z:\file.xls")
'wbexcel.ReadOnly = True
appexcel.Visible = True
Le problème est que le processus (thread) ne se ferme pas et quand je lance
l'applicaton un vingtaine de fois, il prend beaucoup de mémoire.
Ma question est donc de savoir comment supprimer le processus "Excel"
lorsqu'il a terminé d'envoyer les données vers le fichier xls ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrick Philippot
Bonjour,
Le problème est dû au fait que le garbage collector ne détruit pas les objets wrapper immédiatement. Les recommandations de Microsoft pour éviter ce problème sont les suivantes (et valent pour toutes les applications Office):
1. Chaque objet Office utilisé doit faire l'objet d'une déclaration de variable séparée. Ce qui est fait dans votre code.
2. Chaque objet doit être fermé (Close) et mis explicitement à Nothing.
3. Il faut utiliser la méthode Quit sur l'objet application: appexcel.Quit.
4. Il faut utiliser la classe Marshal pour provoquer la destruction du wrapper COM:
Non testé. Il se peut que l'ordre doive être modifié. Il se peut aussi que cela ne fonctionne pas, ce problème de comptage de référence sur les objets Office n'ayant jamais été réglé proprement (un des inconvénients du COM qui disparaît avec .Net :-) )..
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Bonjour,
Le problème est dû au fait que le garbage collector ne détruit pas les
objets wrapper immédiatement. Les recommandations de Microsoft pour éviter
ce problème sont les suivantes (et valent pour toutes les applications
Office):
1. Chaque objet Office utilisé doit faire l'objet d'une déclaration de
variable séparée. Ce qui est fait dans votre code.
2. Chaque objet doit être fermé (Close) et mis explicitement à Nothing.
3. Il faut utiliser la méthode Quit sur l'objet application: appexcel.Quit.
4. Il faut utiliser la classe Marshal pour provoquer la destruction du
wrapper COM:
Non testé. Il se peut que l'ordre doive être modifié. Il se peut aussi que
cela ne fonctionne pas, ce problème de comptage de référence sur les objets
Office n'ayant jamais été réglé proprement (un des inconvénients du COM qui
disparaît avec .Net :-) )..
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Le problème est dû au fait que le garbage collector ne détruit pas les objets wrapper immédiatement. Les recommandations de Microsoft pour éviter ce problème sont les suivantes (et valent pour toutes les applications Office):
1. Chaque objet Office utilisé doit faire l'objet d'une déclaration de variable séparée. Ce qui est fait dans votre code.
2. Chaque objet doit être fermé (Close) et mis explicitement à Nothing.
3. Il faut utiliser la méthode Quit sur l'objet application: appexcel.Quit.
4. Il faut utiliser la classe Marshal pour provoquer la destruction du wrapper COM:
Non testé. Il se peut que l'ordre doive être modifié. Il se peut aussi que cela ne fonctionne pas, ce problème de comptage de référence sur les objets Office n'ayant jamais été réglé proprement (un des inconvénients du COM qui disparaît avec .Net :-) )..
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr