Ga naar inhoud

Welkom op PC Helpforum!
PC Helpforum helpt GRATIS computergebruikers. Ons team geeft via het forum professioneel antwoord op uw vragen en probeert uw pc problemen zo snel mogelijk op te lossen.

Word lid vandaag, plaats je vraag online en het PC Helpforum-team helpt u graag verder!


Log in om dit te volgen  
mani88

Visual Basic Script blijft hangen bij afsluiten Excel

Aanbevolen berichten

Ik heb volgend stuk code in een Visual Basic Script:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("D:\testfile.xlsx")
objWorkbook.Activate
 
(... andere code om paar velden te updaten, "Calculate" te doen,...)
 
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close
Set objWorkbook = Nothing
objExcel.Application.Quit
objExcel.Quit
Set objExcel = Nothing

Echter, script blijft hange nbij het stuk waar Excel applicatie moet worden afgesloten. Wat doe ik verkeerd?

aangepast door mani88

Deel dit bericht


Link naar bericht
Delen op andere sites

Probeer onderstaande code.

De volgorde van de laatste twee regels lijkt vreemd, maar werkt vaak het beste.

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("D:\testfile.xlsx")
objWorkbook.Activate 
' (... andere code om paar velden te updaten, "Calculate" te doen,...) 
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close
Application.Quit
ThisWorkbook.Saved = True

Deel dit bericht


Link naar bericht
Delen op andere sites
  • Topicstarter
  •    0

    Alvast bedankt maar daarmee is het nog niet opgelost. Door toevoegen van wat commentaar ben ik nu ook te weten gekomen waar het precies vastloopt en blijkbaar blijft het script niet hangen bij het afsluiten van de Excel applicatie. Wel bij het afsluiten van een add-in die ik in het begin ook heb geopend.

     

    Ik zal je hieronder de volledige code geven, dat maakt het misschien makkelijker.

     

    Wat doet dit script?

    Het opent een excel (meegegeven als argument bij oproepen script: Wscript.Arguments(0)) en gaat daar 2 cellen in updaten met waarden die ook bij de oproep zijn meegegeven (Wscript.Arguments(1) en Wscript.Arguments(2)). Nadien wordt de volledige Excel opnieuw berekend ("CalculateFulRebuild"), opgeslagen en afgesloten. Om de nodige berekeningen te doen, moeten echter ook 2 add-ins worden geopend/geïmporteerd. Het zijn die add-ins die blijkbaar op het einde niet kunnen worden afgesloten, waardoor script blijft hangen.

     

    Script blijft hangen op volgend stuk code:

    addin1.Close False

    On Error Resume Next
    
    Set fso = CreateObject ("Scripting.FileSystemObject")
    Set stdout = fso.GetStandardStream (1)
    
    stdout.WriteLine time & " - VB Script has been started"
    stdout.WriteLine time & " - Open XLS: " & Wscript.Arguments(0)
    Set objExcel = CreateObject("Excel.Application")
    
    With objExcel
        .Visible = False
        .EnableEvents = False
        .UserControl = False
        .DisplayAlerts = False
        .AskToUpdateLinks = False
    End With
    
    stdout.WriteLine time & " - Open Excel template"
    Set objWorkbook = objExcel.Workbooks.Open(WScript.Arguments(0))
    
    stdout.WriteLine time & " - Activating ExcelPRM XLS addin"
    Set addin1 = objExcel.Workbooks.Open("D:\Program Files\SunGard\Prophet Excel Reporting\Altsta_12\EXCELRPM.XLA")
    addin1.RunAutoMacros 1
    
    stdout.WriteLine time & " - Activating Perms XLS addin"
    Set addin2 = objExcel.Workbooks.Open("D:\Program Files\SunGard\Prophet Excel Reporting\Altsta_12\Perms.xlam")
    addin2.RunAutoMacros 1
    
    stdout.WriteLine time & " - Updating report parameters"
    objWorkbook.Activate
    objWorkbook.WorkSheets("INPUT PAR").Cells(2,3).Value = WScript.Arguments(1)
    objWorkbook.WorkSheets("INPUT PAR").Cells(3,3).Value = WScript.Arguments(2)
    
    stdout.WriteLine time & " - Save workbook"
    objExcel.ActiveWorkbook.Save
    
    stdout.WriteLine time & " - Start recalculate formulas"
    objExcel.CalculateFullRebuild
    WScript.Echo time & " - End recalculate formulas"
    
    stdout.WriteLine time & " - Save workbook"
    objExcel.ActiveWorkbook.Save
    
    stdout.WriteLine time & " - Close workbook"
    objExcel.ActiveWorkbook.Close False
    Set objWorkbook = Nothing
    
    stdout.WriteLine time & " - Close addin1"
    addin1.Close False
    Set addin1 = Nothing
    
    stdout.WriteLine time & " - Close addin2"
    addin2.Close False
    Set addin2 = Nothing
    
    stdout.WriteLine time & " - Close Excel VBS application"
    objExcel.Application.Quit
    Set objExcel = Nothing
    
    stdout.WriteLine time & " - Returncode: " & Err.Number
    
    If (Err.Number > 0) Then 
     stdout.WriteLine "ERROR: " & Err.Description
     stdout.WriteLine "VB Script ended with ERRORS"
    Else 
     stdout.WriteLine "VB Script ended SUCCESSFULLY"
    End If
    
    WScript.Quit Err.Number
    

    Deel dit bericht


    Link naar bericht
    Delen op andere sites

    Hier kan ik je niet mee verder helpen, mogelijk anderen wel.

    Die code is zonder de bijbehorende bestanden niet of nauwelijks te testen en er een slag naar slaan, dat wil ik niet.

    Deel dit bericht


    Link naar bericht
    Delen op andere sites
  • Topicstarter
  •    0

    Gevonden! :)
     
    Het werkt na volgende aanpassing:
     
    With objExcel

       .Visible = False
       .EnableEvents = False True
       .UserControl = False
       .DisplayAlerts = False
       .AskToUpdateLinks = False
    End With

    Deel dit bericht


    Link naar bericht
    Delen op andere sites

    Gast
    Dit topic is nu gesloten voor nieuwe reacties.
    Log in om dit te volgen  

    • Welkom op PC Helpforum

    • Leden statistieken

      • Aantal leden
        39.579
      • Meeste online
        1.765

      Nieuwste lid
      Tamtam
      Registratiedatum
    • Gerelateerde inhoud

      • Door Rik123
        Beste leden,
         
        Voor mijn werk ben ik een Excel bestand/dashboard aan het maken. Momenteel wordt van alles handmatig een rapportage gemaakt. Omdat ik dacht dit kan handiger ben ik gaan knutselen.
        Ik ben erg ver gekomen en tevreden met mijn resultaat.
         
        Nu kan het altijd beter. Het dashboard werkt namelijk voor een hele maand. In de ideale wereld kan ik zelf een datum invullen en het dashboard laat dan alleen de data zien van die datum. Of nog beter 2 datums en dashboard laat de data tussen deze twee datums zien.
         
        Het gaat in het bestand om de datum in cel A2 >
         
        Ik ben benieuwd of dit mogelijk is of dat er andere suggesties zijn.
        Alvast bedankt voor de moeite!
         
        (PS ik heb het bestand dusdanig aangepast zodat geen privé gegeven erin staan..)
        Voorbeeld bestand voor forumhelp.xlsx
      • Door bennieboef
        Hallo Allemaal,

        Mijn macro zoekt in een windows map op de volgende manier : "prd." + <cell value> + ".dld"
        Het probleem is dat er niet wordt gezocht in inderliggende bmappen

        Hier de macro :

        Option Explicit

        Sub Find_DLD()
        Dim AckTime As Integer, InfoBox As Object
        Dim iRow As Integer ' ROW COUNTER.
        Dim sSourcePath As String, currentpath As String
        Dim sDestinationPath As String
        Dim sFileType As String
        Dim sFileType1 As String

        Dim bContinue As Boolean

        bContinue = True
        iRow = 2

        ' THE SOURCE AND DESTINATION FOLDER WITH PATH.
        sSourcePath = "S:"
        sFileType = ".dld" ' TRY WITH OTHER FILE TYPES LIKE ".pdf".
        sFileType1 = "prd."


        ' LOOP THROUGH COLUMN "B" TO PICK THE FILES.
        While bContinue

        If Len(Range("E" & CStr(iRow)).Value) = 0 Then ' DO NOTHING IF THE COLUMN IS BLANK.
        Set InfoBox = CreateObject("WScript.Shell")
        AckTime = 1
        Select Case InfoBox.Popup("Klaar.", _
        AckTime, "Hieperdepiep", 0)
        Case 1, -1
        Exit Sub
        End Select
        Else
        ' CHECK IF FILES EXISTS.

        If Len(Dir(sSourcePath & sFileType1 & Range("E" & CStr(iRow)).Value & sFileType)) = 0 Then
        Range("F" & CStr(iRow)).Value = "Geen kantprogramma"
        Range("F" & CStr(iRow)).Font.Bold = True
        Else
        Range("F" & CStr(iRow)).Value = "Kantprogramma bestaat!"
        Range("F" & CStr(iRow)).Font.Bold = False

        End If
        End If
        iRow = iRow + 1 ' INCREMENT ROW COUNTER.
        Wend
        End Sub

        Het zou fantastisch zijn al iemand deze code zo kan aanpassen dat de macro ook in de onderliggende mappen van s:\ gaat zoeken.

        Alvast bedankt voor jullie hulp.
         
        Bijlage :  bestand met macro.
        Controle dxf + kantprogramma.xlsm
      • Door Benjaplus
        Hoi hoi,
         
        Ik ben bezig met het opstellen van een factuur in Excel alleen heb ik nog niet al te veel ervaring met Excel en ik kan niks vinden over mijn probleem op internet.
         
        Mijn probleem:
        Ik wil deze zin onderaan mijn factuur: U wordt vriendelijk verzocht het bedrag van (Bedrag uit H36(volledig uitgeschreven in euros)) voor (VANDAAG+14) over te maken op NL00 RABO 0123 4567 89 t.n.v. Naam onder melding van factuurnummer: (nummer uit A14)
         
        Alle ( ) moeten formules worden
         
        Dingen die vet gedrukt zijn moet dat ook zijn in excel
         
        Ik kom zelf tot: ="U wordt vriendelijk verzocht het bedrag van €"&H36&" voor "&VANDAAG()+14&" over te maken naar NL00 RABO 0123 4567 89 t.n.v. Naam onder melding van factuurnummer: "&A14&""
         
        Dan krijg ik: U wordt vriendelijk verzocht het bedrag van €254.1 voor 43775 over te maken naar NL00 RABO 0123 4567 89 t.n.v. Naam onder melding van factuurnummer: 2001
         
        €254.1 moet €254.10 worden (komt door getalnotaties)
        43775 moet 06-11-19 worden (komt door getalnotaties)
        en de andere moet vet gedrukt worden
         
        Het is veel gevraagd, ik weet het, maar ik kom er niet uit. Misschien is het gewoon niet mogelijk, laat het maar weten.
         
        Alvast enorm bedankt!
      • Door Emma Boschmans
        Wanneer ik in onderstaand document in een invulvak tekst wil typen lukt dit.
        Wil ik echter een titel wijzigen of de layout aanpassen krijg ik steeds de melding: 'u kunt deze wijziging niet aanbrengen omdat de selectie is vergrendeld'.
        Ik had het document echter graag aangepast aan mijn persoonlijke voorkeuren. Is er een manier om deze vergrendeling uit te schakelen? 
         
         

      • Door Kadoim
        Is er een manier in Excel om automatisch te laten berekenen welke kolommen de minste overlap hebben?
        Ik heb een draaitabel (mijn eerste...) gemaakt van de inschrijvingen in bepaalde opleidingen. De opleidingen gaan altijd door op maandagnamiddag.
        Door het toevoegen van slicers kan ik één voor één bekijken welke opleidingen géén overlappende inschrijvers hebben, maar voor het opmaken van de opleidingskalender, zou ik ook graag automatisch te zien krijgen welke opleidingen de minste overlappers hebben - aangezien het niet altijd haalbaar is om de opleidingen te plannen zonder enige overlap.
         
        Ik heb een bestandje toegevoegd als voorbeeld.
        Vertaald naar dat voorbeeld zou ik dus graag weten of het mogelijk is om op een snelle, geautomatiseerde manier te weten te komen welke twee kolommen de minste overlappende 1'tjes hebben, zodat ik weet dat ik die opleidingen eventueel op eenzelfde dag kan laten doorgaan.
         
        Alvast bedankt voor de hulp!
        Voorbeeld voor pc helpforum draaitabel.xlsx
    Logo

    OVER ONS

    PC Helpforum helpt GRATIS computergebruikers sinds juli 2006. Ons team geeft via het forum professioneel antwoord op uw vragen en probeert uw pc problemen zo snel mogelijk op te lossen. Word lid vandaag, plaats je vraag online en het PC Helpforum-team helpt u graag verder!

    ×
    ×
    • Nieuwe aanmaken...