Proces Excel blijft aanwezig ondanks Quit

Status
Niet open voor verdere reacties.

brusje

Gebruiker
Lid geworden
27 jul 2008
Berichten
6
Hallo allemaal,

Ik heb in Word een administratieve applicatie gemaakt (brieven-offertes-fakturen etc).
Er is een Hoofdmenu als Userform en vandaaruit worden oa dot’s opgestart.
Er is een mogelijkheid om adressen te kiezen via een combobox die ik vul vanuit een Excel-adressenbestand en ook kun je een vrij adres invoeren.
Er is een knop die dat Excel-adressenbestand opent zodat de gebruiker dat kan editten.
Ik heb nu een mogelijkheid gemaakt om de vrije adresgegevens dmv een knop toe te voegen aan dat Excel-adressenbestand.
Tot zover gaat alles goed.

Het is natuurlijk gebruiksvriendelijker om na het invoegen van die vrije adresgegevens het Excelblad daarna achter de schermen te sorteren.
En dan gaat er iets fout.
Er blijven Excel-processen op de achtergrond aanwezig hetgeen later foutmeldingen oplevert.

Ik open taakbeheer en zie als ik het hoofdmenu opstart dat het proces Excel erbijkomt en evenlater weer sluit. Klopt, bij activering van hoofdmenu wordt Excel geopend, combobox gevuld en Excel weer afgesloten.
Als ik de knop “Openen adressenbestand” klik dan zie ik het proces Excel ook weer erbij komen en als je dan Excel weer afsluit is het proces ook weg.
Het invoegen van een vrij adres ging op dezelfde wijze. Echter toen ik het stukje erbij geprogrammeerd had om het excelblad te SORTEREN, wilde het proces Excel niet meer sluiten. Het sorteren werkt overigens perfect.
Doe je dat daarna nog een keer dan zijn er twee processen en dan komen er foutmeldingen.

Ondanks de opdracht “Application.Quit” blijft Excel geopend????
Als ik het stukje sorteren uitvink gaat alles goed en wordt het Excelproces afgesloten.

Hier het bewuste stukje VB-code:

De variabele ExBes bevat het pad en de naam van het Excelbestand.
De variabele VR bevat de eerstvolgende lege rij in het Excelbestand.

Public Sub VoegToe()
' Applicatie Excel openen
Set xlapp = CreateObject("Excel.application")
xlapp.Visible = False
'Juiste excel-bestand openen
xlapp.Workbooks.Open FileName:=ExBes

'Juiste werkblad openen
xlapp.Worksheets("klanten").Activate
' Nu het aantal gebruikte rijen tellen; Vrije rij = gebruikte rijen + 1.
VR = xlapp.activesheet.usedrange.Rows.Count + 1
' Tekstblokken in de cellen zetten
xlapp.activesheet.Range("B" & VR).Value = txbNaam
xlapp.activesheet.Range("C" & VR).Value = txbTav
xlapp.activesheet.Range("D" & VR).Value = txbAdres
xlapp.activesheet.Range("E" & VR).Value = txbPostc
xlapp.activesheet.Range("F" & VR).Value = txbPlaats
xlapp.activesheet.Range("G" & VR).Value = txbTelefoon
xlapp.activesheet.Range("H" & VR).Value = txbFax

' ----------------------------------------------------------------------------------
' Nu de lijst sorteren
xlapp.activesheet.Cells.Select
xlapp.ActiveWorkbook.Worksheets("klanten").Sort.SortFields.Clear
xlapp.ActiveWorkbook.Worksheets("klanten").Sort.SortFields.Add Key:=Range("B2:B" & VR) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With xlapp.ActiveWorkbook.Worksheets("klanten").Sort
.SetRange Range("A1:H" & VR)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' ---------------------------------------------------------------------------------
' De applicatie weer sluiten.
xlapp.Application.DisplayAlerts = False
xlapp.Application.Save
xlapp.Application.DisplayAlerts = True
xlapp.Application.Quit
Set xlapp = Nothing 'release the reference.

End Sub


Resume:
Als ik het stukje code tussen de streepjeslijnen uitvink werkt het goed, sluit het proces Excel keurig maar wordt het werkblad natuurlijk niet gesorteerd.

Waarom sluit Excel niet volledig terwijl wel de regel “xlapp.Application.Quit” wordt doorlopen.
Hoe kan ik dat oplossen, ik ben al een week aan het zoeken en proberen :(

Wie heeft een oplossing

Gr. Brusje
 
Vermijd in VBA select en activate

Dat zou ik zo doen

Code:
Public Sub VoegToe()
  With GetObject(Exbex)
     With .Worksheets("klanten")
       .cells(rows.count,2).end(-4162).offset(1).resize(,7)=split(txbNaam & "|" & txbTAV & "|" & txbAdres & "|" & txbPostc & "|" & txbPlaats & "|" & txbTelefoon & "|" & txbFax,"|")
       .range("A1").currentregion.sort .[B1], , , , , , , 1
     End With
    .close -1
    .application.quit
  End with
End Sub
 
Hi snb,

Bedankt voor je snelle reactie.
Ik ga er morgen mee aan de slag.
Ik laat het nog weten.

Brusje
 
snb,

Ik heb een hele tijd zitten testen maar krijg steeds de foutmelding:
"Methode Rows van object_Global is mislukt", als de 4e regel van de sub gelezen wordt.
Ik dacht dat ik mogelijk niet de juiste verwijzingen had aangevinkt maar dat lijkt mij ook niet het probleem te zijn.
Als verwijzingen heb ik aangevinkt:
VB for applications;
MS Word 12.0 Obj.lib
MS Office 12.0 Obj.lib
MS Excel 12.0 Obj.lib
OLE Automation
MS Forms 2.0 Obj.lib
Normal

Is daarin nog wat te verbeteren?

Gr. Brusje
 
Laatst bewerkt:
Ja, door de toevoeging van een punt voor rows
Code:
[SIZE="3"]Public Sub VoegToe()
  With GetObject(Exbex)
     With .Worksheets("klanten")
       .cells([B][COLOR="Red"].[/COLOR][/B]rows.count,2).end(-4162).offset(1).resize(,7)=split(txbNaam & "|" & txbTAV & "|" & txbAdres & "|" & txbPostc & "|" & txbPlaats & "|" & txbTelefoon & "|" & txbFax,"|")
       .range("A1").currentregion.sort .[B1], , , , , , , 1
     End With
    .close -1
   End with
End Sub[/SIZE]
 
Laatst bewerkt:
Yes,
die regel werkt nu. In Taakbeheer zie ik Excel binnenkomen op het moment dat de 2e regel gelezen wordt.
Zodra de regel: .close-1 gelezen wordt wordt het proces in Taakbeheer gesloten.
Maar als ik dan een stap verder ga en de regel .Application.Quit lees komt de foutmelding
Fout 462 tijdens uitvoering:
De externe servercomputer bestaat niet of is niet beschikbaar.


Als ik daarna het bewuste Excebestand handmatig opstart is het helemaal leeg. Er zijn geen sheets meer en de werkbalken boven zijn allemaal niet bereikbaar. Ik moet het originele bestand er dan overheen kopieren.

Dit gaat mijn petje te boven!

Gr. Brusje
 
Ik heb mijn vorige suggestie aangepast. .Application.quit is overbodig.

je hebt 2 alternatieven

Code:
  ------------
  .application.displayalerts=false
  .save
  .application.displayalerts=true
  .application.quit
End with

of
Code:
   ---------
  .close -1
End With

Als je het bestand opent kun je het met Menubalk/venster/zichtbaar ... zichtbaar maken.
 
Beste snb,

Ik heb het nu goed werkend. Excel sluit nu netjes af en m'n adressenbestand blijft gewoon zichtbaar.
Deze code werkt nu:

Public Sub VoegToe()
' Deze sub is aangeboden door een "helper" via het forum http://www.helpmij.nl/forum
With GetObject(ExBes)
With .Worksheets("klanten")
.Cells(.Rows.Count, 2).End(-4162).offset(1).Resize(, 7) = Split(txbNaam & "|" & txbTav & "|" & txbAdres & "|" & txbPostc & "|" & txbPlaats & "|" & txbTelefoon & "|" & txbFax, "|")
.Range("A1").currentregion.Sort .[B1], , , , , , , 1
End With
.Windows(ExBesKort).Visible = True
.Close savechanges:=True
End With
End Sub


De variabele ExBesKort is alleen de naam van het Excelbestand (zonder pad).

Bedankt voor je adviezen; ik kan jnu weer verder. :thumb:

Gr. Brusje
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan