Excel bestand met VB6 100% afsluiten

Status
Niet open voor verdere reacties.

bengeltje2

Gebruiker
Lid geworden
4 jan 2006
Berichten
16
Ik gebruik sinds vele jaren VB6 om voor een vereniging d.m.v een gemaakt programma scores te verwerken.
Binnen dit programma wordt een Excel bestand van het desbetreffende lid geopend, score wordt ingevoerd, Excel bestand wordt bewaard op de HD, Excel wordt afgesloten.

Tot voor kort werkte het gemaakte vlekkeloos, maar sinds kort helaas niet meer.
Wat gebeurd er, Excel blijft op de achtergrond actief.
Via taakbeheer is te zien dat Excel NIET beëindigd is.
Wanneer nog een score verwerkt moet worden dan loopt het VB6 programma vast, oorzaak hiervan is de nog actieve Excel (binnen Taakbeheer)
Als ik tussen ingave van de scores handmatig binnen Taakbeheer Excel Beëindigd werkt alles perfect.

Programmeer technisch zijn er geen veranderingen doorgevoerd, naar mijn idee is het Windows die de problemen veroorzaakt.
Na een grote Windows Update zijn de problemen ontstaan.

Iemand een idee hoe ik weer tot een goed werkende verwerking van de scores kan komen?
Welke programma instructie moet ik toepassen om 100% zeker te zijn dat Excel 100% uit de Taakbeheer verdwijnt?
 
wellicht handig om te delen welke code je hebt die eerst wel werkte?
 
wellicht handig om te delen welke code je hebt die eerst wel werkte?

Hierbij de toegepaste Code welke eerder tot enkele weken terug zonder narigheid zijn werk deed.
Of het te maken heeft met de onlangs uitgerolde Windows Update is iets dat ik in gedachte heeft.
De toegepaste code is ongeveer 3 jaar in gebruik, sinds kort ontstaat er narigheid omdat Excel NIET 100% verdwijnt maar actief blijft binnen Taakbeheer.
Zodra het programma (gemaakt met VB6) in zijn geheel wordt beëindigd verdwijnt Excel uit Taakbeheer.

Het gedeelte waarin het gewenste tabblad wordt voorzien van Inhoud heb ik weggelaten, gaat immers om het Openen (geen probleem) en volledig Afsluiten Excel uit taakbeheer Windows (wel een probleem)

Code:
Private Sub BordExcelSheetLidAanvullen()
 
Dim xlApp As Excel.Application, xlWBook As Excel.Workbook, xlWSheet As Excel.Worksheet, IStartedXL As Boolean
Dim iSheetsPerBook As Integer, TellerBlad As Integer, AantalSeries As Integer

On Error Resume Next

Const xlHTML = 44

Set xlApp = CreateObject("excel.application")
IStartedXL = True

'' xlApp.Visible = False  '' True  '' Al dan Niet Excel zichtbaar
' xlApp.Visible = True   '' True  '' Al dan Niet Excel zichtbaar

BestandNaam = "BORD Scores"

' Openen van een bestaand Excel bestand    
Set xlWBook = xlApp.Workbooks.Open(PadBordExcel & BestandNaam & ".xlsx")

' Controle of er inderdaad een Excel bestand geopend is, zo Nee nieuw Excel leeg bestand aanmaken
If xlWBook Is Nothing Then
   Set xlWBook = xlApp.Workbooks.Add  'nieuw xls bestand
End If

Set xlWSheet = xlWBook.Worksheets(Keuze) 'Keuze is TAB-blad naam welke actief moet worden

If xlWSheet Is Nothing Then
    xlApp.Worksheets.Add.Move After:=xlApp.Worksheets(xlApp.Worksheets.Count)
    xlApp.Sheets(xlApp.Worksheets.Count).Name = Keuze
    iSheetsPerBook = xlApp.SheetsInNewWorkbook
    ' code layout en vaste teksten van de tabblad met de naam "Keuze"
Endif
xlWSheet.Activate

'
' hier komt de VB-code om de gegevens op het gekozen Tabblad in een bepaalde Cel vast te leggen.
'

' 
' Bewaren als Excel en Pdf bestand gevolgd door afsluiten Excel
        
xlApp.DisplayAlerts = False

' Bewaren als Pdf (geen probleem, werkt zoals het moet

ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, FileName:=PadBordPdf & BestandNaam & ".pdf", Quality:=xlQualityStandard, OpenAfterPublish:=False ', IncludeDocProperties:=True, 'IgnorePrintAreas:=False,

' Bewaren als Excel bestand in een MAP bepaald door PadBordExcel bijvoorbeeld "D:\Scores\", 
' Excel bestand wordt correct opgeslagen!

xlWBook.SaveAs (PadBordExcel & BestandNaam & ".xlsx")

' Afsluiten Excel (helaas niet uit Taakbeheer van Windows :()
Set xlWSheet = Nothing
xlWBook.Close SaveChanges:=False
Set xlWBook = Nothing
xlApp.Quit
Set xlApp = Nothing

BestandNaam = ""

Exit Sub
 
Waarom niet meteen in Excels VBA geprogrammeerd ?
 
Waarom niet meteen in Excels VBA geprogrammeerd ?

Excel verwerking maakt deel uit van een administratieprogramma waarmee zowel de financiën en scores beheerd worden.
De opzet van het geprogrammeerde programma is dat iedereen (leden van de vereniging) op zeer eenvoudige gegevens kan/moet invoeren.
Leden van de vereniging moeten per toerbeurt zitting nemen achter de computer om als administrateur bezig te zijn,
immers een vereniging kan niet draaien zonder de inzet van leden.
Een onderdeel van de administratie is scores invoeren.
Binnen het VB programma hoef er slecht een lid uit de (leden)lijst geselecteerd te worden, in een invulvakje de score in te typen en bevestigen met OK.
Het programma doet de rest, score wordt in een Excel sheet geplaatst, er wordt een pdf gemaakt en Excel bestand wordt op de HD bewaard.
Genoemde pdf wordt gebruikt voor de internet pagina van de vereniging. De leden kunnen na inloggen een totaal overzicht downloaden van de scores.

De werkwijze is er eentje die gewaardeerd wordt, helaas gooit Windows/Excel/VB6 ergens roet in het eten door Excel niet uit de Windows Taakbeheer te verwijderen.
Omdat deze blijft wordt het ingeven van een 2de score een probleem, het gemaakte programma komt op de achtergrond in de knoei met de eerder geopende Excel omdat zoals geschreven NIET uit de Taakbeheerder verdwenen was.

Wanneer Excel in de VB6 script in de ontwikkelfase zichtbaar gemaakt wordt dan zie ik alles gebeuren zoals dit zou moeten t.w.
Excel verschijnt, Tabblad gekozen, score geplaatst, scores door Excel gesorteerd, pdf gemaakt, Excel bestand opgeslagen, Workbook afgesloten, Excel afgesloten (verdwijnt zichtbaar van de taakbalk).
Alles lijkt naar behoren te gaan zoals dit uitgedacht en geprogrammeerd is echter helaas Excel blijft onder de motorkap bestaan en veroorzaakt een crash binnen het programma.
De remedie is dat Excel 100% gestopt moet worden zodat deze tijdens gebruik van het programma uit de Taakbeheer verdwijnt.

Ik heb het idee dat ik ergens overheen kijk, maar wat.
Of er moet een instructie bij om Excel 100% te beëindigen, maar welke.
 
Ik heb de link en item 16 doorgelezen. Met de hier genoemde verbeteringen ga ik mijn code onder de loep nemen. Ergens zit het addertje, maar waar. Blijft vreemd dat de VB code niet is aangepast maar nu problemen geeft.
 
Wanneer nog een score verwerkt moet worden dan loopt het VB6 programma vast, oorzaak hiervan is de nog actieve Excel (binnen Taakbeheer)
Als ik tussen ingave van de scores handmatig binnen Taakbeheer Excel Beëindigd werkt alles perfect.
Het is dit voorval die eerst moet opgelost worden en niet die VB6 code.
 

Met de tips uit #16 ben ik op de goede weg.

Verwijzingen in de VB6 code aanpassen zoals in #16 te lezen is " You need to fully qualify it otherwise vb creates a new instance in memory implicity. "

Stap voor Stap alle verwijzingen aanpassen zoals " xlApp.Workbooks. " naar " xlApp.Worksheets(Keuze). "
Na iedere aanpassing in de VB6 code programma uitvoeren om zo er achter te komen dat Excel daadwerkelijk wordt afgesloten.
Dit doe ik door na het maken van enkele aanpassingen Call AfsluitenExcel aan te roepen.

Bedankt voor je verwijzing naar dat bericht, met name item #16
 
Ik ben na de nodige aanpassingen op de manier zoals ik eerder heb geschreven Happy.
VB6 programma en Excel werken nu goed samen.

Echter er is door het aanpassen van de VB6 code een nieuw Excel probleem(pje) ontstaat waar ik nog geen oplossing voor heb.
Het Excel werkblad welke actief gezet is moet zo worden ingesteld dat alle gegevens keuring afgedrukt kunnen worden.
De problemen binnen mijn VB6 code worden veroorzaakt door de instellingen van de Marges (Top, Left, Right en Bottom)
Zonder de verwijzingen naar de marges foutloos, met de verwijzingen actief loopt de VB6 code in de fout.
 
Laatst bewerkt:
Ondanks vele uurtjes van proberen kom ik er niet uit.
Zoals geschreven de marges instellen geeft problemen, wat is er fout aan mijn toegepaste code?
Overigens VB6 geeft geen foutmelding.
Wanneer het Excel sheet binnen Excel bekeken wordt zijn de Marges naar de gewenste waarden wel aangepast

Code:
With xlWSheet.PageSetup
    .TopMargin = Application.InchesToPoints(2.2)
    .LeftMargin = Application.InchesToPoints(0.25)

' vanaf hier gaat het wel goed  en sluit Excel keurig af (blijft niet in Taakbeheer Actief)

    .LeftHeader = ""
    .CenterHeaderPicture.FileName = PadAdministratie + "Logo.png"
    .CenterHeader = "&G" '' ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = "BAK-competitie"
    .RightFooter = ""
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .PrintQuality = 600
    .CenterHorizontally = True
    .CenterVertically = False
    .Orientation = xlPortrait
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = 100
    .PrintErrors = xlPrintErrorsDisplayed
    .PrintArea = "$A$1:$F$32"
End With

Wie Oh Wie?
 
Het heeft eventjes geduurd maar het lijkt er meer en meer op dat ik de oplossing gevonden heb. :)

De gevonden oplossing is om de pagina Marges op een andere manier te definiëren namelijk
Code:
With xlWSheet.PageSetup
    .TopMargin = 150
    .LeftMargin = 30

    .LeftHeader = ""
    .CenterHeaderPicture.FileName = PadAdministratie + "Logo.png"
    .CenterHeader = "&G" '' ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = "BAK-competitie"
    .RightFooter = ""
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .PrintQuality = 600
    .CenterHorizontally = True
    .CenterVertically = False
    .Orientation = xlPortrait
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = 100
    .PrintErrors = xlPrintErrorsDisplayed
    .PrintArea = "$A$1:$F$32"
End With

Iedereen bedankt voor het meedenken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan